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

WooCommerce HPOS:订单保存钩子的用户权限检查适配

适配WooCommerce HPOS的订单权限检查替换方案

在HPOS(High-Performance Order Storage)模式下,订单不再以WordPress文章(post)类型存储,原有的current_user_can('edit_shop_order', $post_id)权限检查方式会失效,需要替换为WooCommerce提供的HPOS兼容方法。

具体替换方案

先通过wc_get_order()获取订单对象,再使用订单内置的is_editable_by_current_user()方法检查权限,该方法会自动适配传统订单存储和HPOS两种模式。

修改后的完整代码如下:

<?php
use Automattic\WooCommerce\Utilities\OrderUtil;

add_action('save_post', 'my_save_wc_order_other_fields', 20, 1);
function my_save_wc_order_other_fields($post_id)
{
    // 兼容HPOS的订单类型检查
    if (!OrderUtil::is_order($post_id, wc_get_order_types())) {
        return;
    }

    // 获取订单对象(兼容两种存储模式)
    $order = wc_get_order($post_id);
    if (!$order) {
        return $post_id;
    }

    // 检查当前用户是否有权限编辑该订单(HPOS兼容)
    if (!$order->is_editable_by_current_user()) {
        return $post_id;
    }

    // 此处添加你的订单字段保存逻辑
}

方案说明

  • wc_get_order($post_id):无论订单存储在传统post表还是HPOS专属数据表中,都能正确获取到订单实例
  • $order->is_editable_by_current_user():WooCommerce官方提供的权限检查方法,内部已处理两种存储模式下的权限验证逻辑,无需额外判断运行环境

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:42:42