Php 如何从任何地方更新订单项元数据?
我正在开发一个自行车租赁网站,用户可以在其中选择从开始日期到结束的日期范围(以天为单位)。我使用Php 如何从任何地方更新订单项元数据?,php,ajax,wordpress,woocommerce,Php,Ajax,Wordpress,Woocommerce,我正在开发一个自行车租赁网站,用户可以在其中选择从开始日期到结束的日期范围(以天为单位)。我使用wc\u add\u order\u item\u meta()函数将这些数据存储为订单的元数据,对吗 然后,我想给用户一个功能,比如他可以通过查看订单页面来改变或延长天数。这也完成了,我创建了一个模式,并在模式上添加了一个关于更改日期的ajax请求 现在,我使用AJAX将数据发送到functions.php,并使用wc\u update\u order\u item\u meta()更新元数据 我的
wc\u add\u order\u item\u meta()
函数将这些数据存储为订单的元数据,对吗
然后,我想给用户一个功能,比如他可以通过查看订单页面来改变或延长天数。这也完成了,我创建了一个模式,并在模式上添加了一个关于更改日期的ajax请求
现在,我使用AJAX将数据发送到functions.php
,并使用wc\u update\u order\u item\u 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();
}
}
这也在更新,但并非所有地方都在更新。我的意思是,它给了我正确的响应,当我刷新时,它也给了更新的数据,但当我浏览查看项目页面时,它只在那里显示旧数据,而不是更新的数据。即使我在管理中检查订单,它也会在那里显示旧的元数据
任何想法都将不胜感激,提前感谢。我想这是因为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();
}
您的woocommerce版本是什么?@Reigel版本是3.1.1