You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过wc_get_order获取数据库中的最新订单数据

解决WooCommerce守护进程中获取最新订单状态的问题

方法1:清除指定订单的缓存

WooCommerce会将订单数据缓存到transient或对象缓存中,长运行的守护进程不会自动刷新这些缓存。你可以在调用wc_get_order()前,先清除对应订单的缓存:

// 替换为目标订单ID
$order_id = 123;

// 清除WooCommerce专属的订单transient缓存
wc_delete_order_transient( $order_id );

// 或者直接清除WordPress对象缓存中的订单条目
wp_cache_delete( 'order_' . $order_id, 'orders' );

// 此时获取的就是数据库最新数据
$order = wc_get_order( $order_id );

方法2:绕过缓存直接查询数据库

如果清除缓存的方式无效,可直接通过$wpdb查询数据库获取最新状态,完全绕开WordPress和WooCommerce的缓存机制:

global $wpdb;
$order_id = 123;

// 直接查询订单的post_status(WooCommerce订单属于自定义文章类型)
$latest_status = $wpdb->get_var(
    $wpdb->prepare(
        "SELECT post_status FROM {$wpdb->posts} WHERE ID = %d",
        $order_id
    )
);

// 若需完整订单对象,可手动触发重新读取
$order = wc_get_order( $order_id );
if ( $order ) {
    // 标记对象未读取,强制下次从数据库加载
    $order->set_object_read( false );
    $order->read();
}

方法3:临时禁用WooCommerce缓存

在守护进程脚本中临时禁用WooCommerce的缓存功能,确保每次获取订单都直接访问数据库:

// 获取订单前禁用缓存
add_filter( 'woocommerce_cache_enabled', '__return_false' );

$order = wc_get_order( $order_id );

// 若后续需要恢复缓存,移除过滤器即可
remove_filter( 'woocommerce_cache_enabled', '__return_false' );

内容的提问来源于stack exchange,提问作者rafwlaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 10:41:31