【问题标题】:WooCommerce: Set attribute value from custom fieldWooCommerce:从自定义字段设置属性值
【发布时间】:2019-11-25 02:16:06
【问题描述】:

免责声明:我是 WooCommerce 的新手。如果我的方法或我的术语有缺陷,请提出建议:)

我想要做的:客户应该能够在产品页面上选择预订日期。将产品添加到购物车后,日期应显示在购物车中。

到目前为止我的方法:我已经创建了一个带有 slug 到达日期的产品属性,并给它一个默认值(“尚未选择”)。该属性已添加到产品中,并将其配置为在产品页面上隐藏但在结帐页面上可见。之后,我在 functions.php 中创建了一个自定义字段以显示在产品页面上,并使用了 jquery datepicker。到目前为止,一切都很好。

使用钩子 woocommerce_add_cart_item_data,我可以这样设置购物车商品数据:

add_filter( 'woocommerce_add_cart_item_data', 'add_cart_item_data', 10, 2 );
function add_cart_item_data( $cart_item_data, $product_id ) {

    write_log("adding item to cart, setting arrival date to " . $_POST["arrivaldate"]);

    $cart_item_data[ "pa_arrivaldate" ] = $_POST["arrivaldate"];  

    return $cart_item_data;
}

然而,我想这不是设置属性值的正确方法,因为结帐页面上的行仍然填充了默认值。

我怎样才能让它工作?我什至可以将属性设置为事先未创建的值吗?

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    要在结账时节省订单价值,您可以这样做:

    add_action("woocommerce_checkout_update_order_meta", function ($order_id, array $data) {
    
    
        $order = \WC_Order_Factory::get_order($order_id);
    
    
        // to associate a different value at each item
        foreach ($order->get_items("line_item") as $id_line_item => $element) {
    
            update_post_meta($id_line_item, "date", $date);
    
        }
    
    
        // or if the date is associated to the order
        update_post_meta($order->get_ID(), "date", $date);
    
    
    }, 10, 2);
    

    【讨论】:

    • 感谢您的回答!我一直在尝试这个并添加了一条日志语句,但是我担心将产品添加到购物车时没有执行钩子?
    • 您说客户在结帐时选择了一个日期,然后该产品添加到购物车的日期不存在?
    • 对不起,我刚刚重新阅读了我的问题,并没有清楚地表达出来。我希望客户在产品页面上选择一个日期,一旦将产品添加到购物车,他的选择应该会转移到购物车和结帐过程中。
    猜你喜欢
    • 2016-12-30
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    相关资源
    最近更新 更多