php - 如何从任何地方更新订单项元数据?

标签 php ajax wordpress woocommerce

我正在开发一个自行车租赁网站,用户可以在其中选择从开始日期到结束日期的日期范围(以天为单位)。我正在使用 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/

相关文章:

php - 从 Facebook 群组获取事件

php - 使用 UTF-8 排序规则的 phpMyAdmin 中的拉丁字符

ruby-on-rails - 使用 datatable/will_paginate 的索引页面显示性能差

css - 使用 CSS 定位标签

php - 动态添加自定义输入字段并将其保存到数据库

PHP日期时间转换保存到MySQL

javascript - 我无法使用 Angular2 从 JSONP 响应中获取正文数据,但它可以通过使用 ajax 来工作

javascript - 将下拉列表中选定选项的属性作为参数传递给 'onchange' 中的函数

wordpress - 将 WordPress 作为 Yii 中的模块或扩展

css - wordpress 中的下拉菜单关闭问题?