【问题标题】:Woocommerce, update price when added by admin via wp-adminWoocommerce,管理员通过 wp-admin 添加时更新价格
【发布时间】:2017-11-20 18:22:52
【问题描述】:

当且仅当管理员通过管理区域将产品添加到现有订单时,我想设置 50% 的折扣。

我试过这个:

function admin_set_custom_price( $item, $item_id ) {
    $item->set_subtotal( ( ( ( 100 - 50 ) * $item->get_subtotal() ) / 100 ) );
    $item->set_total( ( ( ( 100 - 50 ) * $item->get_total() ) / 100 ) );

    $item->apply_changes();
    $item->save();

    return $item;
}
add_filter( 'woocommerce_ajax_order_item', 'admin_set_custom_price', 10, 2 );

结果是添加商品时的价格就是原价。

如果我只是刷新页面,它会显示 50% 折扣的价格。

我还需要做什么,在添加时立即显示带有折扣的价格而不需要刷新页面?

看起来有些东西正在覆盖它,因为它被保存了我猜是因为刷新时价格是正确的。

谈论简单/多变的产品类型。

【问题讨论】:

    标签: wordpress woocommerce hook-woocommerce


    【解决方案1】:

    所以我改用了这个钩子:

    woocommerce_ajax_added_order_items

    然后在函数中:

    foreach ( $order->get_items() as $order_item_id => $order_item_data ) {
        //    Set custom price.
    }
    

    似乎工作得很好。

    更新:

    事实证明,如果你想一次添加多个项目,上面的钩子只会获取最后一个项目。

    一个更好的钩子,它只在通过 ajax 添加的项目(不影响现有项目)在循环中执行:

    woocommerce_ajax_add_order_item_meta

    然后在循环中,您可以对购物车中的商品进行循环,如果购物车 id 匹配,您可以更改产品。

    function update_order_prices_on_admin_ajax( $item_id, $item, $order )
        foreach ( $order->get_items() as $order_item_id => $order_item_data ) {
            if ( $order_item_id == $item_id ) {
                // Do changes here.
    
                // Runs this after making a change to $order_item_data
                $order->apply_changes();
                $order->save();
            }
        }
    }
    add_action( 'woocommerce_ajax_add_order_item_meta', 'update_order_prices_on_admin_ajax', 99, 3 );
    

    【讨论】:

    • 嗨,我正在尝试此代码,但无法正常工作。你能给我同样的帮助吗?
    猜你喜欢
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    • 1970-01-01
    • 2015-01-16
    • 2014-06-10
    相关资源
    最近更新 更多