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

如何按当前分类法动态过滤ACF Post Object字段可选文章

现有代码的问题

  • 语法错误:函数内部多了一处多余的右大括号,会直接导致代码解析失败,功能无法生效。
  • 未适配分类编辑页的ID规则:ACF在分类术语编辑页传入的$post_id为term_{ID}格式的字符串(例如编辑ID为8的分类时,值为term_8),直接传入查询参数无法匹配到对应分类。
  • 分类法写死:固定查询category分类,无法适配所有分类法动态生效的需求。

可行解决方案

将以下代码添加到主题的functions.php文件或自定义功能插件中,注意替换代码中的字段名为你实际创建的Post Object字段名称:

// 钩子后缀的your_post_object_field替换为你自己的Post Object字段名
add_filter('acf/fields/post_object/query/name=your_post_object_field', 'filter_post_object_by_current_term', 10, 3);
function filter_post_object_by_current_term( $args, $field, $post_id ) {
    // 判断当前是否为分类术语编辑页
    if ( str_starts_with($post_id, 'term_') ) {
        // 提取纯数字的术语ID
        $term_id = (int) str_replace('term_', '', $post_id);
        $current_term = get_term($term_id);
        // 术语校验通过后动态添加分类过滤规则
        if ( !is_wp_error($current_term) ) {
            $args['tax_query'] = [
                [
                    'taxonomy' => $current_term->taxonomy,
                    'field'    => 'term_id',
                    'terms'    => $term_id,
                ]
            ];
        }
    }
    return $args;
}

如果你的WordPress版本低于5.9(无原生str_starts_with函数),将判断条件替换为以下兼容写法:

if ( substr($post_id, 0, 5) === 'term_' )

注意事项

如果需要让规则对所有Post Object字段生效,可将钩子改为acf/fields/post_object/query,无需加字段名后缀,不建议这么做,避免影响其他无关的Post Object字段的查询结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:24:07