Показать значок бесплатной доставки, если цена выше 50 $ на странице продукта / архива WooCommerce - PullRequest
0 голосов
/ 06 мая 2018

Я хочу показать значок «бесплатная доставка» на каждом товаре с ценой выше 50 $. Это должно быть видно на странице товара и в цикле.

Проблема в том, что может быть более одной цены. Если вы думаете о вариациях и продажах (или даже вариациях с вариантами в продаже). Поэтому мне нужно проверить тип продукта и найти самую дешевую цену для расчета.

В данный момент я использую следующий код. Иногда работает нормально. Но для продуктов без активного управления запасами он выдает время ожидания на странице продукта и не работает с архивами (сообщение не отображается). Кроме того, он создает некоторые уведомления о том, что не следует использовать идентификатор напрямую.

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

<?php add_action( 'wgm_after_tax_display_single', 'wgm_after_tax_display_single_free_delivery', 10, 1 );
function wgm_after_tax_display_single_free_delivery(  ) {

    if (is_product()):
        global $post, $product;

        if ( ! $product->is_in_stock() ) return;

        $sale_price     = get_post_meta( $product->id, '_price', true);
        $regular_price  = get_post_meta( $product->id, '_regular_price', true);

        if (empty($regular_price)){ //then this is a variable product
            $available_variations = $product->get_available_variations();
            $variation_id=$available_variations[0]['variation_id'];
            $variation= new WC_Product_Variation( $variation_id );
            $regular_price = $variation ->regular_price;
            $sale_price = $variation ->sale_price;
        }

        if ( $sale_price >= 50 && !empty( $regular_price ) ) :
            echo 'free delivery!';
        else :
            echo 'NO free delivery!';
        endif;

    endif;
} ?>

1 Ответ

0 голосов
/ 06 мая 2018

Поскольку вы используете настраиваемый хук, сложно проверить его на самом деле (так же, как вы) ... Теперь этот пересмотренный код должен работать намного лучше, чем ваш (решение проблем):

add_action( 'wgm_after_tax_display_single', 'wgm_after_tax_display_single_free_delivery', 10, 1 );
function wgm_after_tax_display_single_free_delivery() {
    // On single product pages and archives pages
    if ( is_product() || is_shop() || is_product_category() || is_product_tag() ):
        global $post, $product;

        if ( ! $product->is_in_stock() ) return;

        // variable products (get min prices)
        if ( $product->is_type('variable') ) {
            $sale_price = $product->get_variation_sale_price('min');
            $regular_price = $product->get_variation_regular_price('min');
        }
        // Other products types
        else {
            $sale_price     = $product->get_sale_price();
            $regular_price  = $product->get_regular_price();
        }

        $price = $sale_price > 0 ? $sale_price : $regular_price;

        if ( $price >= 50  ) {
            echo __('free delivery!');
        } else {
            echo __('NO free delivery!');
        }
    endif;
}

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

...