В WooCommerce я хотел бы изменить макет страницы с одной переменной Variable. Потому что, когда у вас есть переменный продукт, вы получаете эту проводную ценовую ярость (ниже названия продукта) на странице Variable Product, и она также отображается на странице магазина.
Для меня стандартный способ – показать самую низкую цену продукта в магазине, а также страницу продукта и изменить эту цену в соответствии с выбором пользователем переменных. Я не могу поверить, почему.
Я могу удалить диапазон цен и показать самую низкую цену, используя этот фрагмент кода.
https://businessbloomer.com/disable-variable-product-price-range-woocommerce/
Но опять же, эта низкая цена не меняется в соответствии с выбранными переменными. В разной структуре продукта снова появляются две цены. Это моя текущая версия макета страницы
Итак, кто-нибудь может помочь удалить ценовой диапазон с переменной страницы продукта и показать по умолчанию только одну самую низкую цену (по названию продукта). Так что цена должна быть изменена в соответствии с переменными, которые есть у этого продукта. И эта самая низкая цена должна быть показана на странице магазина.
Надеюсь, это понятно. Пожалуйста, дайте мне знать, если что-то неясно. Пожалуйста, обратитесь к прилагаемому изображению для получения более подробной информации.
Благодарю.
Обновленный код в декабре 2017 года: во избежание:
- Проблемы в отношении непеременных продуктов в некоторых темах
- Ошибка повторения в некоторых темах
Это вполне возможно.
jQuery
, когда мы получаем выбранную цену вариации, мы заменяем переменную цену (и показываем наличие запаса). Вот этот код:
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; } } } }