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

切换HPOS后WooCommerce后台订单按自定义元字段搜索失效

适配WooCommerce HPOS的订单自定义元字段搜索实现方式

HPOS(高性能订单存储)将订单数据迁移至独立的自定义数据库表,不再依赖WordPress的Post系统,因此原有的woocommerce_shop_order_search_fields钩子不再生效。以下是适配HPOS的正确实现方案:

方案代码

将以下代码添加到主题的functions.php文件或自定义插件中:

// 将自定义元字段加入HPOS订单搜索字段列表
function custom_hpos_order_search_fields( $fields ) {
    $fields[] = 'tracking_number';
    return $fields;
}
add_filter( 'woocommerce_order_search_fields', 'custom_hpos_order_search_fields' );

// 扩展搜索查询,支持自定义元字段匹配
function custom_hpos_order_search_query( $query, $term, $search_fields ) {
    global $wpdb;

    if ( in_array( 'tracking_number', $search_fields ) ) {
        // 构建关联订单元数据表的查询片段
        $meta_search = $wpdb->prepare(
            "OR EXISTS (
                SELECT 1 FROM {$wpdb->prefix}woocommerce_ordermeta om
                WHERE om.order_id = p.id AND om.meta_key = 'tracking_number' AND om.meta_value LIKE %s
            )",
            '%' . $wpdb->esc_like( $term ) . '%'
        );

        // 将自定义搜索逻辑整合到主查询中
        $query = preg_replace( '/WHERE\s+/', "WHERE {$meta_search} ", $query );
    }

    return $query;
}
add_filter( 'woocommerce_order_search_query', 'custom_hpos_order_search_query', 10, 3 );

代码说明

  1. woocommerce_order_search_fields:负责将自定义元字段tracking_number加入HPOS订单的可搜索字段集合。
  2. woocommerce_order_search_query:通过关联wp_woocommerce_ordermeta表(表前缀根据你的WordPress配置调整),实现对订单元字段tracking_number的模糊搜索匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 06:07:12