切换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 );
代码说明
woocommerce_order_search_fields:负责将自定义元字段tracking_number加入HPOS订单的可搜索字段集合。woocommerce_order_search_query:通过关联wp_woocommerce_ordermeta表(表前缀根据你的WordPress配置调整),实现对订单元字段tracking_number的模糊搜索匹配。
内容的提问来源于stack exchange,提问作者luissimo
相关产品推荐
相关产品推荐

