php - WooCommerce:从自定义字段设置属性值
问题描述
免责声明:我是 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;
}
然而,我想这不是设置属性值的正确方法,因为结帐页面上的行仍然填充了默认值。
我怎样才能让它工作?我什至可以将属性设置为事先未创建的值吗?
解决方案
为了在结账时节省订单价值,您可以这样做:
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);
推荐阅读
- c++ - C++ 从 std::string 创建 CString 失败
- apache - Django + Apache2 + Ubuntu + WSGI + sqlite3 - attempt to write a readonly database. How to fix?
- python - How to make a floating windowless widget in python
- laravel - 隐藏表单参数传递给控制器
- go - Get project root path on runtime to read config file
- c# - Unable to launch the IIS Express Web Server in visual studio 2017. Output says IIS Express is running but not
- php - PHP - Get div content of external website which is dynamically loaded by javascript
- cakephp - 3.6 版本发布请求中的 CSRF 令牌不匹配
- c# - C#在C#中构造对象时方括号([])的用途是什么
- haskell - 无法摆脱这种类型的错误