Intereting Posts
Как обнаружить веб-страницу php в моем приложении iPhone, кроме Safari Функция «Получить» не работает, потому что не все дефисы должны быть заменены Этот код cURL не работает? Преобразование html в word / excel / powerPoint с помощью PHP Фиксация неверного HTML в PHP? как изменить имя переменной php в цикле? MySQL IFNULL () с несколькими таблицами не работает Что делает режим PHPUnit Strict? Как я могу отправить push-уведомление нескольким устройствам за один раз в iPhone? Проблема с кадрированием изображения из базы данных mysql с использованием PHP? Изображение отображается черным? PHP-объект, как ссылаться? SendGrid: применение шаблонов к методу зависания щенков WEB API Изменение функций сериализации в PHP для Memcached Как автоматически регистрировать нового пользователя после регистрации у пользовательского провайдера в Silex? Каждый PHP-FPM Worker индивидуально загружает php.ini?

Замените диапазон переменных цен на выбранную цену вариации в WooCommerce 3

В WooCommerce я хотел бы изменить макет страницы с одной переменной Variable. Потому что, когда у вас есть переменный продукт, вы получаете эту проводную ценовую ярость (ниже названия продукта) на странице Variable Product, и она также отображается на странице магазина.

Для меня стандартный способ – показать самую низкую цену продукта в магазине, а также страницу продукта и изменить эту цену в соответствии с выбором пользователем переменных. Я не могу поверить, почему.

Я могу удалить диапазон цен и показать самую низкую цену, используя этот фрагмент кода.

https://businessbloomer.com/disable-variable-product-price-range-woocommerce/

Но опять же, эта низкая цена не меняется в соответствии с выбранными переменными. В разной структуре продукта снова появляются две цены. Это моя текущая версия макета страницы

Beats Solo3 Wireless On-Ear Headphones

Итак, кто-нибудь может помочь удалить ценовой диапазон с переменной страницы продукта и показать по умолчанию только одну самую низкую цену (по названию продукта). Так что цена должна быть изменена в соответствии с переменными, которые есть у этого продукта. И эта самая низкая цена должна быть показана на странице магазина.

Надеюсь, это понятно. Пожалуйста, дайте мне знать, если что-то неясно. Пожалуйста, обратитесь к прилагаемому изображению для получения более подробной информации.

Благодарю.

Скриншот

Обновленный код в декабре 2017 года: во избежание:

  • Проблемы в отношении непеременных продуктов в некоторых темах
  • Ошибка повторения в некоторых темах

Это вполне возможно.

  1. Сначала мы удаляем нежелательную цену.
  2. Мы выводим вместо этого переменную цену без ценового диапазона и показываем самую низкую цену.
  3. Мы делаем копию этой переменной цены в скрытом контейнере (для использования / чтения нашим скриптом jQuery)
  4. Затем мы скрываем контейнеры выбранной цены вариации (и наличия запаса)
  5. С помощью нашего сценария jQuery , когда мы получаем выбранную цену вариации, мы заменяем переменную цену (и показываем наличие запаса).
  6. Если изменение клиента изменяется, мы обновляем цену … Если вариационная цена не отображается во время этого процесса изменения, отображается наша переменная цена

Вот этот код:

 add_action( 'woocommerce_before_single_product', 'move_variations_single_price', 1 ); function move_variations_single_price(){ if ( ! is_product() ) return; // Only on single product pages global $product, $post; if ( $product->is_type( 'variable' ) ) { // removing the variations price for variable products remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 ); // Change location and inserting back the variations price add_action( 'woocommerce_single_product_summary', 'replace_variation_single_price', 10 ); } } function replace_variation_single_price(){ global $product; // Main Price $prices = array( $product->get_variation_price( 'min', true ), $product->get_variation_price( 'max', true ) ); $price = $prices[0] !== $prices[1] ? sprintf( __( 'From: %1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] ); // Sale Price $prices = array( $product->get_variation_regular_price( 'min', true ), $product->get_variation_regular_price( 'max', true ) ); sort( $prices ); $saleprice = $prices[0] !== $prices[1] ? sprintf( __( 'From: %1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] ); if ( $price !== $saleprice && $product->is_on_sale() ) { $price = '<del>' . $saleprice . $product->get_price_suffix() . '</del> <ins>' . $price . $product->get_price_suffix() . '</ins>'; } ?> <style> div.woocommerce-variation-price, div.woocommerce-variation-availability, div.hidden-variable-price { height: 0px !important; overflow:hidden; position:relative; line-height: 0px !important; font-size: 0% !important; } </style> <script> jQuery(document).ready(function($) { $('select').blur( function(){ if( '' != $('input.variation_id').val() ){ if($('p.availability')) $('p.availability').remove(); $('p.price').html($('div.woocommerce-variation-price > span.price').html()).append('<p class="availability">'+$('div.woocommerce-variation-availability').html()+'</p>'); console.log($('input.variation_id').val()); } else { $('p.price').html($('div.hidden-variable-price').html()); if($('p.availability')) $('p.availability').remove(); console.log('NULL'); } }); }); </script> <?php echo '<p class="price">'.$price.'</p> <div class="hidden-variable-price" >'.$price.'</div>'; } 

Код отправляется в любой php-файл вашей активной дочерней темы (или темы), а также в любой файл php-плагина.

Этот код проверен и работает на WooCommerce 3.2.x (должен работать и с WooCommerce 2.6.x)

Вы можете по желанию переместить CSS ( <style></style> ) в файл styles.css вашей активной дочерней темы (или активной темы), а затем удалить ее из этой функции …

Я знаю, что я воскрешаю старый поток здесь, но что-то, что я обнаружил при использовании этого кода, заключается в том, что вам нужно знать, что с помощью этого кода вы рискуете остановить одиночные, не переменные цены от отображения на некоторые темы:

 remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 ); 

запускается на всех страницах продукта, независимо от того, является ли это переменным продуктом или нет.

Вы можете использовать приведенную ниже версию, которая просто проверяет, является ли текущий продукт переменной или нет, прежде чем запускать остальную часть кода.

  add_action( 'woocommerce_before_single_product', 'check_if_variable_first' ); function check_if_variable_first(){ if ( is_product() ) { global $post; $product = wc_get_product( $post->ID ); if ( $product->is_type( 'variable' ) ) { // removing the price of variable products remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 ); // Change location of add_action( 'woocommerce_single_product_summary', 'custom_wc_template_single_price', 10 ); function custom_wc_template_single_price(){ global $product; // Variable product only if($product->is_type('variable')): // Main Price $prices = array( $product->get_variation_price( 'min', true ), $product->get_variation_price( 'max', true ) ); $price = $prices[0] !== $prices[1] ? sprintf( __( 'From: %1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] ); // Sale Price $prices = array( $product->get_variation_regular_price( 'min', true ), $product->get_variation_regular_price( 'max', true ) ); sort( $prices ); $saleprice = $prices[0] !== $prices[1] ? sprintf( __( 'From: %1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] ); if ( $price !== $saleprice && $product->is_on_sale() ) { $price = '<del>' . $saleprice . $product->get_price_suffix() . '</del> <ins>' . $price . $product->get_price_suffix() . '</ins>'; } ?> <style> div.woocommerce-variation-price, div.woocommerce-variation-availability, div.hidden-variable-price { height: 0px !important; overflow:hidden; position:relative; line-height: 0px !important; font-size: 0% !important; } </style> <script> jQuery(document).ready(function($) { $('select').blur( function(){ if( '' != $('input.variation_id').val() ){ $('p.price').html($('div.woocommerce-variation-price > span.price').html()).append('<p class="availability">'+$('div.woocommerce-variation-availability').html()+'</p>'); console.log($('input.variation_id').val()); } else { $('p.price').html($('div.hidden-variable-price').html()); if($('p.availability')) $('p.availability').remove(); console.log('NULL'); } }); }); </script> <?php echo '<p class="price">'.$price.'</p> <div class="hidden-variable-price" >'.$price.'</div>'; endif; } } } }