利用FacetWP与ACF排除已停产产品,保留页面直接访问权
解决FacetWP排除停产产品但保留直接访问的方案
针对你的需求,有两种可靠的实现方式,既能让未勾选wm_manufactured(及对应分类字段)的产品不显示在目录/筛选结果中,又能保留它们的直接访问权限:
方法一:实时过滤查询结果(无需重新索引)
通过facetwp_query_args钩子在FacetWP处理查询时,只保留勾选了对应字段的产品,单页面访问不受影响。
add_filter( 'facetwp_query_args', function( $args, $class ) { // 单产品页面直接返回原查询,确保直接访问正常 if ( is_singular() ) { return $args; } // 获取当前目录页对应的分类对象(替换成你的产品自定义分类法slug) $current_term = get_queried_object(); if ( ! $current_term || ! is_a( $current_term, 'WP_Term' ) ) { return $args; } // 配置分类slug与对应ACF字段的映射关系 $field_map = array( 'washing-machine' => 'wm_manufactured', // 洗衣机分类slug对应字段 'refrigerator' => 'fr_manufactured', // 冰箱分类示例 // 在这里添加所有产品分类的字段映射 ); $target_field = $field_map[ $current_term->slug ] ?? ''; if ( empty( $target_field ) ) { return $args; } // 添加元查询,只包含字段值为"Yes"的产品 $args['meta_query'][] = array( 'key' => $target_field, 'value' => 'Yes', 'compare' => '=' ); return $args; }, 10, 2 );
说明:
- 将代码添加到主题的
functions.php文件或自定义插件中。 - 替换代码中的产品自定义分类法slug(如果你的分类法不是
product_category)。 - 确保ACF字段的返回值是字符串
Yes(在ACF字段设置中,将"返回值"设为"值"即可)。
方法二:索引阶段排除停产产品(查询更高效)
通过facetwp_index_row钩子在FacetWP构建索引时,跳过未勾选字段的产品,需要重新索引生效。
add_filter( 'facetwp_index_row', function( $params ) { $post_id = $params['post_id']; // 获取当前产品所属的分类(替换成你的产品自定义分类法slug) $term_slugs = wp_get_post_terms( $post_id, 'product_category', array( 'fields' => 'slugs' ) ); if ( empty( $term_slugs ) ) { return $params; } // 分类slug与ACF字段的映射,同方法一 $field_map = array( 'washing-machine' => 'wm_manufactured', 'refrigerator' => 'fr_manufactured', // 补充其他分类 ); foreach ( $term_slugs as $slug ) { if ( isset( $field_map[ $slug ] ) ) { $field_value = get_field( $field_map[ $slug ], $post_id ); // 未勾选则跳过索引 if ( 'Yes' !== $field_value ) { return false; } } } return $params; });
说明:
- 添加代码后,进入WordPress后台的FacetWP设置页面,点击「Re-index」按钮重新构建索引。
- 此方法会让停产产品完全不进入FacetWP的索引库,查询性能更优,但后续修改字段值后需要重新索引。
注意事项
- 两种方法二选一即可,方法一适合频繁修改产品状态的场景,方法二更适合产品状态稳定的情况。
- 若ACF字段是多选项复选框(而非单个复选框),需将代码中的
'value' => 'Yes'改为'value' => 'Yes', 'compare' => 'IN'(对应数组值的判断)。
内容的提问来源于stack exchange,提问作者Lost in space
相关产品推荐
相关产品推荐

