Отобразить индивидуальную цену товара на странице архива woocommerce и для продаж / сопутствующих товаров - PullRequest
0 голосов
/ 08 марта 2019

Есть ли способ включить поле бэкэнда в панели управления WordPress, чтобы отображать пользовательскую цену для продукта на странице архива и для дополнительных / связанных продуктов, но оставить цену в сводке по продукту?

Пример: продукт А имеет цену 10 €, но я бы хотел показать «от 6 € / кг».

Самый простой способ - использовать настраиваемое поле, которое переопределяет woocommerce_template_loop_price, но этот код не работает, но я не понимаю, почему.

add_action('woocommerce_template_loop_price', 'shopprice_change', 10, 2);
function shopprice_change ($price, $product) {
    global $post, $blog_id;
    $post_id = $post->ID;
    $price = get_post_meta($post_id, 'shoppricechange', true);
    return $price;
    wp_reset_query();
}

UPDATE

Я нашел решение для изменения цены на странице архива без изменения на странице отдельного продукта:

function cw_change_product_html( $price_html, $product ) {
    $unit_price = get_post_meta( $product->id, 'shoppricechange', true );
    if (is_product()) return $price_html;
    if ( ! empty( $unit_price ) ) {
        $price_html = '<span class="amount">' . wc_price( $unit_price ) . '</span>';  
    }
    return $price_html;
}
add_filter( 'woocommerce_get_price_html', 'cw_change_product_html', 10, 2 );

Проблема: На самом деле продажи и сопутствующие товары также должны измениться на странице одного продукта. Но с if (is_product()) return $price_html; это исключает и их. Кто поможет решить эту проблему, получит награду. Спасибо!

Ответы [ 3 ]

3 голосов
/ 15 марта 2019

Но с if (is_product()) return $price_html; исключая их как хорошо.

Использование этого вместо is_product() хорошо работает для меня:

is_single( $product->get_id() )

И вам не следует звонить $product->id напрямую. Вместо этого используйте $product->get_id().

Вот полный код, который я использовал:

function cw_change_product_html( $price_html, $product ) {
    if ( is_single( $product->get_id() ) )
        return $price_html;

    $unit_price = get_post_meta( $product->get_id(), 'shoppricechange', true );
    if ( ! empty( $unit_price ) ) {
        $price_html = '<span class="amount">' . wc_price( $unit_price ) . '</span>';
    }

    return $price_html;
}
add_filter( 'woocommerce_get_price_html', 'cw_change_product_html', 10, 2 );
1 голос
/ 13 марта 2019
  1. woocommerce_template_loop_price это не действие, а функция

  2. Используйте код ниже

    function cw_change_product_html( $price_html, $product ) {
            $unit_price = get_post_meta( $product->id, 'shoppricechange', true );
            $returnedSignleProdctP =false;
    
            $trace = debug_backtrace();
            $callstack = (array) $trace;
    
            foreach ($callstack as $key => $value) {
    
                if(isset($value['function']) && $value['function'] == 'woocommerce_output_related_products' ){
    
                    if ( ! empty( $unit_price ) ) {
    
                    $price_html = '<span class="amount">' . wc_price( $unit_price ) . '</span>';  
    
                    }
    
                }
    
                    if(isset($value['function']) && $value['function'] == 'woocommerce_template_single_price' ){
    
                        $price_html = $price_html;
    
                    }
    
    
    
                    if(isset($value['function']) && $value['function'] == 'woocommerce_template_loop_price' ){
    
                    if ( ! empty( $unit_price ) ) {
    
                    $price_html = '<span class="amount">' . wc_price( $unit_price ) . '</span>';  
    
                    }
    
                }
    
    
    
            }
    
    
    
    
    
    
            return $price_html;
    
    }
    add_filter( 'woocommerce_get_price_html', 'cw_change_product_html', 10, 2 );
    
0 голосов
/ 13 марта 2019

Может быть, этот плагин может помочь, Поля дополнительных цен Woocommerce (Источник: https://wordpress.org/plugins/woocommerce-extra-price-fields/)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...