当股票为“ 0”时,我如何更改价格

时间:2019-12-19 03:32:43

标签: php wordpress woocommerce

当股票为“ 0”时如何更改价格?

我在管理端有一个“调节器价格”和“另一个价格”。 “另一个价格”是元数据(您可以在代码->'_alg_msrp'中看到)。 我用以下代码触发:

if($product->stock_quantity == 0 ){
    function return_custom_price($price, $product) {
        global $post, $blog_id;
        $post_id = $post->ID;
        $price = get_post_meta( get_the_ID(), '_alg_msrp', true );

        return $price;
    }
    add_filter('woocommerce_get_price', 'return_custom_price', 10, 2);
}

价格确实有所变化,但我希望仅在正面进行更改,而不是在管理员方面进行更改。此代码更改了整个视图。我的意思是,它如何只影响首页,而不影响管理页面,如WooCommerce中的“产品”标签中。 感谢您的任何建议。

2 个答案:

答案 0 :(得分:0)

对于简单的产品,这取决于您要更改的位置

从3.0.0版开始不推荐使用“ woocommerce_get_price”

改为使用“ woocommerce_product_get_price”。

add_filter('woocommerce_product_get_price', 'new_price', 11, 2 );
add_filter('woocommerce_product_get_regular_price', 'new_price', 11, 2 );
function new_price( $price, $product ) {
    if($product && !is_admin()){
      if($product->stock_quantity == 0 ){
       $new_price = get_post_meta( $product->get_id(), '_alg_msrp', true );
       if($new_price){
        return $new_price;
       }
      }
    }
    return $price;
}

答案 1 :(得分:0)

我会更改它,以便逻辑在函数内部:

function return_custom_price($price, $product) {
    if ( is_admin() || $product->stock_quantity != 0 ) 
        return $price;

    $custom_price = get_post_meta( $product->get_id(), '_alg_msrp', true );
    return ($custom_price == '') ? $price : $custom_price;
}
add_filter('woocommerce_get_price', 'return_custom_price', 10, 2);

仅当它不为空时,它将返回自定义价格。否则,它将返回正常价格。