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

WooCommerce后台订单列表如何实现按订单状态搜索功能

订单管理页面示例

WooCommerce订单列表按状态搜索实现方案

你当前使用的woocommerce_shop_order_search_fields过滤器仅支持扩展*自定义字段(post_meta)*作为搜索条件,而订单状态存储在WordPress默认posts表的post_status字段中,不属于自定义元数据,因此无法直接通过该过滤器添加支持。你可以新增一段查询逻辑来实现订单状态搜索,同时保留原有自定义字段的搜索能力。

完整可直接使用的代码

// 原有逻辑:扩展手机号、订单总金额为可搜索字段
add_filter( 'woocommerce_shop_order_search_fields', 'shipping_awb_searchable_field', 10, 1 );
function shipping_awb_searchable_field($meta_keys){
    $meta_keys[] = '_billing_phone';
    $meta_keys[] = '_order_total';
    return $meta_keys;
}

// 新增逻辑:支持按订单状态搜索
add_action( 'pre_get_posts', 'add_order_status_to_search', 20 );
function add_order_status_to_search( $query ) {
    // 仅在后台订单列表页面、且是搜索请求时生效
    if ( ! is_admin() || $query->get( 'post_type' ) !== 'shop_order' || empty( $query->get( 's' ) ) ) {
        return;
    }

    $search_term = trim( $query->get( 's' ) );
    $order_statuses = wc_get_order_statuses();
    $matched_statuses = array();

    // 匹配订单状态的slug或者中文名称
    foreach ( $order_statuses as $status_slug => $status_name ) {
        if ( stripos( $status_slug, $search_term ) !== false || stripos( $status_name, $search_term ) !== false ) {
            $matched_statuses[] = $status_slug;
        }
    }

    // 如果匹配到对应状态,修改查询条件
    if ( ! empty( $matched_statuses ) ) {
        $query->set( 'post_status', $matched_statuses );
        // 清空原搜索关键词条件,避免和其他字段冲突
        $query->set( 's', '' );
        // 保留原搜索词用于页面显示
        add_filter( 'get_search_query', function() use ( $search_term ) {
            return $search_term;
        });
    }
}

使用说明

  • 可以直接在订单搜索框输入订单状态的中文名称(比如「处理中」「已完成」)或者英文slug(比如「processing」「completed」),即可筛选出对应状态的所有订单
  • 原有手机号、订单金额搜索功能不受影响

如果你需要同时支持关键词同时匹配订单状态和其他字段(比如手机号、订单号),可以删除代码中$query->set( 's', '' );这一行即可。

内容的提问来源于stack exchange,提问作者MAKHDUM HUSAIN GULAM HAIDER NA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:36:05