高级自定义字段:无法按自定义字段查询帖子

时间:2017-04-01 21:19:13

标签: advanced-custom-fields

我试图查询其ACF字段" show_on_frontpage"值等于"是" (见下面截图中该字段的定义)。按照ACF docs中的规定,我的代码是:

$args = array(
  'posts_per_page' => -1,
  'meta_key' => 'show_on_frontpage',
  'meta_value' => 'yes'
);
$my_posts = new WP_Query($args);
if ($my_posts->have_posts()) {
  while ($my_posts->have_posts()) : $my_posts->the_post();
    if (get_field('show_on_frontpage')) the_field('show_on_frontpage'); ?>
  endwhile;
}

返回/不显示任何内容。如果我只使用$args = array('posts_per_page' => -1);,那么我会收到我的所有帖子和#34;是"出现在那些有"是"作为他们" show_on_frontpage"的价值字段。

我的代码出了什么问题?

enter image description here

2 个答案:

答案 0 :(得分:1)

根据ACF论坛上的这个问题/答案:

https://support.advancedcustomfields.com/forums/topic/using-checkbox-fields-in-custom-queries/

最好将复选框字段切换为True / False字段,因为看起来您的复选框组字段只包含一个选项。

  

复选框存储为序列化数据,您无法使用WP_Query按复选框字段进行过滤。

     

如果使用true / false字段,则可以使用WP_Query,其值为   true / false字段对于false为0(零),对于true为0。

因此,如果您将复选框字段切换为True / False字段,则应按如下方式重写代码:

$args = array(
    'posts_per_page' => -1,
    'meta_key' => 'show_on_frontpage',
    'meta_value' => 1 /* or true */
);
$my_posts = new WP_Query($args);
if ($my_posts->have_posts()) {
    while ($my_posts->have_posts()) : $my_posts->the_post();
        /* My content for each post with the checkbox checked goes here */
    endwhile;
}

答案 1 :(得分:0)

如果您使用更新的meta_query => array()语法,这应该有效:

$args = array(
        'posts_per_page' => -1,
        'meta_query' => array(
            array(
                'key' => 'show_on_frontpage',
                'value' => 'yes',
                'compare' => 'LIKE',
            )
        ),
    );

    $my_posts = new WP_Query($args);

    if ($my_posts->have_posts()) {

        while ($my_posts->have_posts()) : $my_posts->the_post();

          echo get_the_title();
          // Post stuff

        endwhile;

        /* Restore original Post Data */
        wp_reset_postdata();

}

请注意,您需要将帖子ID提供给ACF辅助函数get_field()&在while循环中the_field()

请参阅https://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

从更广泛的角度来看,本文质疑为此目的使用post_meta密钥的智慧,值得一读:https://tomjn.com/2016/12/05/post-meta-abuse/。本文建议使用自定义分类法来实现您的需求 - 提高性能。