【问题标题】:ACF WP_Query Filter by Taxonomy FieldACF WP_Query 按分类字段筛选
【发布时间】:2019-05-22 01:15:30
【问题描述】:

我正在尝试过滤 CPT 以按分类显示字段,我目前正在使用以下代码:-

$args = array(
    'posts_per_page'=> -1,
    'post_type'     => 'episode',
    'order'             => 'DESC',
    //'meta_key'        =>  $filter_key,
    //'meta_value'  =>  $filter,                                
    'tax_query' => array(
        array(
            'taxonomy' => 'name',
            'field' => 'make',
            'terms' => array('Jaguar')
        )
    ),  
);

但是,这不会返回任何结果。

这是我要过滤的内容:-

array(3) { [0]=> object(WP_Term)#7336 (10) { ["term_id"]=> int(25) ["name"]=> string(6) "Jaguar" ["slug"]=> string(6) "jaguar" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(25) ["taxonomy"]=> string(8) "post_tag" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(0) ["filter"]=> string(3) "raw" } [1]=> object(WP_Term)#7493 (10) { ["term_id"]=> int(24) ["name"]=> string(13) "Mercedes K100" ["slug"]=> string(13) "mercedes-k100" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(24) ["taxonomy"]=> string(8) "post_tag" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(0) ["filter"]=> string(3) "raw" } [2]=> object(WP_Term)#7492 (10) { ["term_id"]=> int(26) ["name"]=> string(10) "Porche 911" ["slug"]=> string(10) "porche-911" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(26) ["taxonomy"]=> string(8) "post_tag" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(0) ["filter"]=> string(3) "raw" } } array(3) { [0]=> object(WP_Term)#7503 (10) { ["term_id"]=> int(25) ["name"]=> string(6) "Jaguar" ["slug"]=> string(6) "jaguar" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(25) ["taxonomy"]=> string(8) "post_tag" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(0) ["filter"]=> string(3) "raw" } [1]=> object(WP_Term)#7490 (10) { ["term_id"]=> int(24) ["name"]=> string(13) "Mercedes K100" ["slug"]=> string(13) "mercedes-k100" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(24) ["taxonomy"]=> string(8) "post_tag" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(0) ["filter"]=> string(3) "raw" } [2]=> object(WP_Term)#7489 (10) { ["term_id"]=> int(26) ["name"]=> string(10) "Porche 911" ["slug"]=> string(10) "porche-911" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(26) ["taxonomy"]=> string(8) "post_tag" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(0) ["filter"]=> string(3) "raw" } }

所以我的分类字段的名称称为“make”,出于测试目的,我只想显示所有分类为“Jaguar”的帖子

请指教。

【问题讨论】:

    标签: php wordpress advanced-custom-fields


    【解决方案1】:
    array(
                'taxonomy' => 'name',
                'field' => 'make',
                'terms' => array('Jaguar')
            )
    

    错了。应该是

    array(
                'taxonomy' => 'post_tag',
                'field' => 'name',
                'terms' => array('Jaguar')
            )
    

    查看WP Query taxonomy parameters 上的文档以了解其工作原理

    编辑:查看您发布的 var 转储似乎 Jaguar 是一个帖子标签,而不是一个名为“make”的自定义分类法

    【讨论】:

    • 谢谢@mrben522 - 我试过上面的代码,但它仍然没有返回,有什么想法吗?
    • var_dump 属于 get_field('make'); - 这是 ACF 分类法字段(使用分类法;标签)
    • OHHHH 现在我明白了。你不能像那样使用 ACF。如果您尝试通过查询中的 ACF 字段过滤事物,则需要使用元查询,而不是税务查询
    • 我不太确定这里的最终目标是什么
    【解决方案2】:

    我最终设法对此进行了排序,@mrben522 非常正确,args 应该如下:-

    $args = array(
        'posts_per_page'=> -1,
        'post_type'     => 'episode',
        'tax_query' => array(
            array(
                'taxonomy' => 'post_tag',
                'terms' => array('Jaguar'),
                'field' => 'name',              
            )
        ),
        'order'             => 'DESC',                                    
    );
    

    但是,仅此一项并不能解决问题。我还必须做的是更改 ACF 中分类字段的选项。 “保存条款”选项设置为“否”,但将此选项更改为“是”对我有用。

    如果您在分类字段中使用“保存术语”设置,则所选术语将保存为帖子和术语之间的连接 - 就像 WP 核心一样。这意味着所有代码都可以在有或没有 ACF 的情况下工作。

    发布此解决方案,因为它可能对其他人有帮助,谢谢!

    【讨论】:

      猜你喜欢
      • 2020-04-20
      • 2015-02-13
      • 2019-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 2022-08-19
      • 1970-01-01
      相关资源
      最近更新 更多