免责声明:我是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;
}
但是,我认为这不是设置属性值的正确方法,因为结帐页面上的行仍填充有默认值。
我该如何使用它?甚至可以将属性设置为尚未预先创建的值吗?
答案 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);