php - 通过 woocommerce_before_calculate_totals 更改价格时获取数组的值

标签 php wordpress woocommerce cart hook-woocommerce

所以我有一系列产品,售价也很可观。

通常从数组获取值很简单,如下所示:

$the_sups = array(
    21179 => 14.99,     //shine
    21169  => 17.95,    //boost
    1665  => 19.15,     //flexx
    1663  => 17.85,     //revive
    1661 => 19.75,      //muscle
    1657  => 17.85      //maximus
);
echo $the_sups[21179];

这将返回14.99

在我的一生中,当通过 woocommerce_before_calculate_totals

时,我不断得到 NULL 返回

下面是我使用的代码,如果从数组返回价格,我知道它应该可以工作:

$sup_discount= 0.9;

$the_sups = array(
    21179 => 14.99,     //shine
    21169  => 17.95,    //boost
    1665  => 19.15,     //flexx
    1663  => 17.85,     //revive
    1661 => 19.75,      //muscle
    1657  => 17.85      //maximus           
);

foreach (WC()->cart->get_cart() as $hash => $value ) {

    if( in_array( 52, $value['data']->get_category_ids() ) ) {

         echo $value['product_id'];  //IS 21179

         $product_value = $the_sups[$value['product_id']];
         var_dump($product_value); //IS ALWAYS NULL

         $value['data']->set_price($product_value * $sup_discount);

    }         
}  

有人可以解释一下我做错了什么吗?

最佳答案

这似乎可以做到,用 WooCommerce 4.1.0 进行测试

function action_woocommerce_before_calculate_totals( $cart ) {
    if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return;

    /* SETTINGS */

    $sup_discount = 0.9;

    $the_sups = array(
        21179  => 14.99, // shine
        21169  => 17.95, // boost
        1665   => 19.15, // flexx
        1663   => 17.85, // revive
        1661   => 19.75, // muscle
        1657   => 17.85, // maximus
    );

    /* END SETTINGS */

    // Loop through cart items
    foreach ( $cart->get_cart() as $value ) {    
        // Get product id
        $product_id = $value['product_id'];

        if( in_array( 52, $value['data']->get_category_ids() ) ) {
            echo $product_id;

            $product_value = $the_sups[ $product_id ];

            var_dump($product_value);

            $value['data']->set_price( $product_value * $sup_discount );
        }
    }
}
add_action( 'woocommerce_before_calculate_totals', 'action_woocommerce_before_calculate_totals', 10, 1 );

关于php - 通过 woocommerce_before_calculate_totals 更改价格时获取数组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61880518/

相关文章:

Php foreach - 除最后一个元素外,用逗号分隔每个循环

php - Laravel 按与用户的距离搜索

php - MyISAM 和 InnoDB 中的单个 mysql 语句是原子的吗?

php - 将非关联数组传递给 json_encode() 时会发生什么?

javascript - WordPress 模板在 IE7 上导致白色/空白屏幕,其后面带有源代码和导航

PHP - 使用 get_option 将选项发送到 style.php

javascript - 使用 get_categories() 构建动态类别树

wordpress - Woocommerce:获取所有 sku 产品的列表

javascript - 您可以自动将产品从在线商店添加到 WooCommerce 吗?

paypal - 我无法通过 WooCommerce 使用 Paypal 付款