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

利用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:30:50