Отображение суммы сбережений вариаций в продаже для переменных продуктов WooCommerce - PullRequest
2 голосов
/ 20 апреля 2019

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

Я попробовал этот код, чтобы показать сохранение, но он работает только для простых продуктов

function you_save_echo_product() {
    global $product;

    // works for Simple and Variable type
    $regular_price  = get_post_meta( $product->get_id(), '_regular_price', true ); // 36.32
    $sale_price     = get_post_meta( $product->get_id(), '_sale_price', true ); // 24.99

    if( !empty($sale_price) ) {

        $saved_amount       = $regular_price - $sale_price;
        $currency_symbol    = get_woocommerce_currency_symbol();

        $percentage = round( ( ( $regular_price - $sale_price ) / $regular_price ) * 100 );
        ?>
            <p id="saving_total_price">You Save: <span class="symbol"><?php echo $currency_symbol; ?></span> <span class="amount"><?php echo $saved_amount; ?></span>.00</p>                
        <?php       
    } 
}
add_action( 'woocommerce_single_product_summary', 'you_save_echo_product', 11 );

Я рассчитываю показать общую экономию для моих аксессуаров с основным продуктом в виде переменной

1 Ответ

1 голос
/ 21 апреля 2019

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

Я также добавил процент экономии (который можно удалить, если он вам не нужен).

// For simple products
add_action( 'woocommerce_single_product_summary', 'simple_product_saving_amount', 11 );
function simple_product_saving_amount() {
    global $product;

    if( $product->is_type('simple') && $product->is_on_sale() ) {
        $regular_price = (float) wc_get_price_to_display( $product, array('price' => $product->get_regular_price() ) );
        $active_price  = (float) wc_get_price_to_display( $product, array('price' => $product->get_sale_price() ) );

        $saved_amount  = $regular_price - $active_price;
        $percentage    = round( $saved_amount / $regular_price * 100 );

        echo '<p id="saving_total_price">'. __("You Save") .': ' . wc_price($saved_amount) . ' ('.$percentage.'%)</p>';
    }
}

// For product variations (on variable products)
add_filter( 'woocommerce_available_variation', 'variable_product_saving_amount', 10, 3 );
function variable_product_saving_amount( $data, $product, $variation ) {

    if( $variation->is_on_sale() ) {
        $saved_amount  = $data['display_regular_price'] - $data['display_price'];
        $percentage    = round( $saved_amount / $data['display_regular_price'] * 100 );

        $data['price_html'] .= '<p id="saving_total_price">'. __("You Save") .': ' . wc_price($saved_amount) . ' ('.$percentage.'%)</p>';
    }
    return $data;
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

...