WooCommerce搜索及后台隐藏产品分类失败求助
解决WooCommerce隐藏产品分类代码无效的问题
你的代码无效主要有三个核心问题,下面逐一说明并给出修正方案:
1. 语法转义错误(最致命)
你提供的代码里存在HTML转义字符:->应该是->,&&应该是&&,这些转义字符会导致PHP语法错误,代码直接无法运行。
2. 查询场景覆盖不全
原代码只处理了产品归档页和产品分类归档页,没有覆盖你需要的搜索页面和后台产品管理界面,所以这两个场景下隐藏分类的逻辑完全没生效。
3. 后台查询未做针对性处理
后台的产品列表查询需要单独判断,避免代码影响其他后台功能(比如文章、页面的查询)。
修正后的完整代码
function exclude_product_categories( $q ) { $excluded_cats = array( 3233, 3254, 3244, 1990, 3120, 3129, 3121, 2717, 2718, 2355, 3314, 2356, 3040, 3312, 2978, 2357, 3125, 3117, 2358, 1994, 3333, 1995, 2998, 2699, 3123, 2714, 2700, 1991, 3330, 3324, 1992, 3325, 2862, 3122, 3328, 2013, 3156, 2364, 2479, 3246, 2701, 3256, 3166, 2698, 2353, 3115, 3116, 3251, 3329, 3331, 3250, 2010, 2011, 2171, 2715, 2796, 2980, 2981, 3124, 3255, 3243, 2894, 1984, 1985, 1986, 3231, 3101, 3105, 3102, 3109, 3103, 2418, 2419, 3253, 2814, 3170, 1987, 1988, 2015, 2996, 2017, 3012, 2989, 2570, 3234, 2571, 2006, 2007, 2004, 3230, 2012, 2695, 2864, 3235, 3005, 2466, 2908, 2909, 2910, 2008, 2682, 2786, 2991, 2812, 2019, 2020, 2900, 2791, 3241, 3238, 3357, 3358, 2904, 2905, 3245, 2893, 2459, 2795, 2906, 2897, 2907, 2684, 3153, 3104, 2902, 3240, 2349, 2350, 2351, 3377, 3161, 3162, 3247, 3248, 3376, 3249, 3239, 1996, 2001, 2792, 2912, 2002, 2990, 2003, 2567, 2568, 2374, 2375, 2456, 3257, 3154, 1999, 2354, 2000, 2895, 3164, 2896, 2021, 3293, 2022, 3155, 3147, 3167, 3313, 2697, 2911, 2457, 3237, 2901, 2683, 2898, 2903, 2719, 2793, 2794, 2876, 2877, 2720, 2995, 3252, 1193, 1205, 1201, 1203, 1511, 3480, 1697, 3165, 1250, 1734, 1899, 1874, 1729, 1853, 1204, 3363, 1176 ); // 处理前台:产品归档、分类归档、搜索页面 if ( !is_admin() && $q->is_main_query() && ( $q->is_post_type_archive('product') || $q->is_tax('product_cat') || $q->is_search() ) ) { $tax_query = (array) $q->get('tax_query'); $tax_query[] = array( 'taxonomy' => 'product_cat', 'field' => 'term_id', 'terms' => $excluded_cats, 'operator' => 'NOT IN' ); $q->set('tax_query', $tax_query); } // 处理后台:产品列表页查询 if ( is_admin() && $q->is_main_query() && $q->get('post_type') === 'product' ) { $tax_query = (array) $q->get('tax_query'); $tax_query[] = array( 'taxonomy' => 'product_cat', 'field' => 'term_id', 'terms' => $excluded_cats, 'operator' => 'NOT IN' ); $q->set('tax_query', $tax_query); } } add_action( 'pre_get_posts', 'exclude_product_categories' );
代码说明
- 修复了所有转义语法错误,确保PHP能正常解析
- 前台新增了
$q->is_search()判断,覆盖搜索页面 - 新增了后台产品列表的判断逻辑,只针对产品类型的查询生效,避免影响其他后台功能
- 分前台和后台两个分支处理,逻辑更清晰
内容的提问来源于stack exchange,提问作者ioGadgets
相关产品推荐
相关产品推荐

