我正在开发一个自行车租赁网站,用户可以在其中选择从开始日期到结束日期的日期范围(以天为单位)。我正在使用 wc_add_order_item_meta()
存储该数据功能作为订单的元数据,对。
然后,我想为用户提供一个功能,比如他可以通过浏览订单页面来更改或延长日期。这也完成了,我创建了一个模态并添加了一个关于模态日期更改的ajax请求。
现在,我将数据发送到 functions.php
使用 AJAX,我使用了 wc_update_order_item_meta()
更新元数据。
这是我的功能:
add_action( 'wp_ajax_update_date_picker', 'update_date_picker' );
function update_date_picker() {
$p_da = $_POST['p_date'];
$r_da = $_POST['r_date'];
$t_dy = $_POST['t_days'];
$order_id = $_POST['order_id'];
$order = wc_get_order($order_id);
foreach ($order->get_items() as $item_id => $item_obj) {
$pd = wc_update_order_item_meta($item_id, 'pickup_hidden_datetime', $p_da);
$rd = wc_update_order_item_meta($item_id, 'return_hidden_datetime', $r_da);
$td = wc_update_order_item_meta($item_id, 'return_hidden_days', $t_dy);
if($pd&&$rd&&$td){
echo "Nice work, Bilal";
}
die();
}
}
这也在更新,但不是在所有地方。我的意思是,它给了我正确的响应,当我刷新时,它还提供更新的数据,但是当我浏览 View 项目页面时,它只显示旧数据而不是更新数据。即使我在管理员中检查订单,它也会在那里显示旧的元数据。
任何想法将不胜感激,提前致谢。
最佳答案
我认为这是因为 WooCommerce 的缓存......尝试这样的事情。
add_action( 'wp_ajax_update_date_picker', 'update_date_picker' );
function update_date_picker() {
$p_da = $_POST['p_date'];
$r_da = $_POST['r_date'];
$t_dy = $_POST['t_days'];
$order_id = $_POST['order_id'];
$order = wc_get_order($order_id);
foreach ($order->get_items() as $item_id => $item_obj) {
$pd = wc_update_order_item_meta($item_id, 'pickup_hidden_datetime', $p_da);
$rd = wc_update_order_item_meta($item_id, 'return_hidden_datetime', $r_da);
$td = wc_update_order_item_meta($item_id, 'return_hidden_days', $t_dy);
if($pd&&$rd&&$td){
echo "Nice work, Bilal";
}
}
clean_post_cache( $order->get_id() );
wc_delete_shop_order_transients( $order );
wp_cache_delete( 'order-items-' . $order->get_id(), 'orders' );
die();
}
关于php - 如何从任何地方更新订单项元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45584914/