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
相关产品推荐
相关产品推荐

