WooCommerce:从自定义字段设置属性值

时间:2019-11-24 16:36:18

标签: php wordpress woocommerce

免责声明:我是WooCommerce的新手。如果我的方法或我的术语总体上有缺陷,请告知:)

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

到目前为止,我的方法:我已经创建了一个带有商品到达日期的产品属性,并为其指定了默认值(“尚未选择”)。该属性已添加到产品中,并将其配置为在产品页面上隐藏,但在结帐页面上可见。之后,我在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;
}

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

我该如何使用它?甚至可以将属性设置为尚未预先创建的值吗?

1 个答案:

答案 0 :(得分:0)

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

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);