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

Php WooCommerce:从自定义字段设置属性值,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,免责声明:我是WooCommerce的新手。如果我的方法或术语有缺陷,请告知:) 我想做的是:客户应该能够在产品页面上选择预订日期。将产品添加到购物车后,日期应显示在购物车中 到目前为止,我的方法是:我用slug arrivaldate创建了一个产品属性,并给它一个默认值(“尚未选择”)。该属性已添加到产品中,并将其配置为在产品页面上隐藏,但在签出页面上可见。之后,我在functions.php中创建了一个自定义字段,显示在产品页面上,并使用jquery日期选择器。到目前为止还不错 使用hook

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

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

到目前为止,我的方法是:我用slug arrivaldate创建了一个产品属性,并给它一个默认值(“尚未选择”)。该属性已添加到产品中,并将其配置为在产品页面上隐藏,但在签出页面上可见。之后,我在functions.php中创建了一个自定义字段,显示在产品页面上,并使用jquery日期选择器。到目前为止还不错

使用hook\u add\u cart\u item\u数据,我可以通过以下方式设置购物车项目数据:

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;
}
然而,我认为这不是设置属性值的正确方法,因为签出页面上的行仍然充满了默认值


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

要在结帐时保存订单上的值,您可以这样做:

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

谢谢你的回答!我一直在尝试这一点,并添加了一个日志语句,但我担心在将产品添加到购物车时钩子没有执行?你说客户在结账时选择了一个日期,然后产品添加到购物车时该日期就不存在了?对不起,我只是重新阅读了我的问题,我没有说清楚。我希望客户在产品页面上选择一个日期,一旦产品添加到购物车中,他的选择就应该转到购物车和结账流程。