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

在WooCommerce后台订单列表(含HPOS)过滤作者自有产品的订单

实现WooCommerce后台订单按发布产品的用户过滤

原代码失效的核心问题:订单的产品信息并不存储在订单的_product_id自定义字段中,而是存储在WooCommerce的订单项表(wp_woocommerce_order_items和wp_woocommerce_order_itemmeta)里,直接用meta_query无法关联到产品作者信息。

以下是修正后的实现代码:

// 后台订单列表过滤:仅显示当前用户发布的产品对应的订单
function restrict_admin_orders_to_user_products($where, $query) {
    global $pagenow, $wpdb;

    // 仅在后台订单列表页生效,且当前用户不是管理员
    if (is_admin() && $pagenow === 'edit.php' && $query->get('post_type') === 'shop_order' && !current_user_can('administrator')) {
        $current_user_id = get_current_user_id();

        // 关联订单项、产品表,筛选出当前用户发布的产品对应的订单ID
        $order_ids = $wpdb->get_col(
            $wpdb->prepare(
                "
                SELECT DISTINCT order_items.order_id
                FROM {$wpdb->prefix}woocommerce_order_items AS order_items
                LEFT JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS item_meta ON order_items.order_item_id = item_meta.order_item_id
                LEFT JOIN {$wpdb->prefix}posts AS products ON item_meta.meta_value = products.ID
                WHERE item_meta.meta_key = '_product_id' AND products.post_author = %d
                ",
                $current_user_id
            )
        );

        // 如果用户没有发布过产品,返回空结果
        if (empty($order_ids)) {
            $where .= " AND 0=1";
        } else {
            // 将订单ID列表加入查询条件
            $order_ids_str = implode(',', array_map('intval', $order_ids));
            $where .= " AND {$wpdb->prefix}posts.ID IN ($order_ids_str)";
        }
    }

    return $where;
}
add_filter('posts_where', 'restrict_admin_orders_to_user_products', 10, 2);

代码说明:

  • 使用posts_where钩子修改订单查询的WHERE条件,通过SQL关联查询直接从数据库层面筛选符合条件的订单
  • 关联订单项表获取订单对应的产品ID,再关联产品表匹配产品的发布者ID(当前用户ID)
  • 处理了用户无发布产品的情况,此时会隐藏所有订单
  • 仅对非管理员用户生效,管理员仍能查看所有订单

额外优化建议:

  • 如果用户发布的产品数量较多,可以考虑添加缓存机制,避免每次加载订单列表都执行关联查询
  • 若需要支持变体产品,需额外关联wp_postmeta表匹配变体对应的父产品作者(因为变体的post_author通常继承父产品)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:47:08