如何从任何地方更新订单商品元数据?

时间:2017-08-09 08:02:10

标签: php ajax wordpress woocommerce

我正在开发一个自行车租赁网站,用户可以从开始日期到结束时选择日期范围(以天为单位)。我使用wc_add_order_item_meta()函数存储该数据作为订单的元数据,对。

然后,我希望通过浏览订单页面为用户提供类似他可以更改或延长日期的功能。这也完成了,我创建了一个模态,并在模态上更改日期时添加了一个ajax请求。

现在,我使用AJAX将数据发送到functions.php,并使用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();
    }

}

这也是更新但不是所有地方。我的意思是,它给了我正确的答案,当我刷新时,它也会提供更新的数据,但是当我浏览查看项目页面时,它只显示旧数据而不是更新一。即使我在管理员中检查订单,它也会显示旧的元数据。

任何想法都会受到赞赏,在此先感谢。

1 个答案:

答案 0 :(得分:1)

我认为这是因为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();
}