如果WooCommerce产品/存档页面中的价格高于50美元,则显示免费送货徽章

时间:2018-05-05 21:27:16

标签: php wordpress woocommerce badge price

我想展示一个"免费送货"每种产品的徽章,价格高于50美元。 它应该在产品页面和循环中可见。

问题是,可能有多个价格。如果您考虑变化和销售(甚至是销售变体的变化)。 所以我需要检查产品的类型,并且必须搜索最便宜的价格来计算。

目前我正在使用以下代码。 它有时候工作正常。但是对于没有活动库存管理的产品,它会在产品页面上产生超时,并且不会对存档进行操作(不显示消息)。 此外,它还会产生一些关于不直接使用ID的通知。

我对代码感到不安全......是否有更好的方法来实现它? 我尝试了很多方法,但我不确定我是否考虑过价格,销售,库存或产品类型的所有可能性?!

<?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 :(得分:1)

当你使用自定义钩子时,很难真正测试它(就像你一样)......现在这个重新访问的代码应该比你的更好(解决错误通知):

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文件中。它应该更好。