使用"高级自定义字段"自定义查询中的复选框字段

时间:2015-02-11 09:40:22

标签: wordpress checkbox advanced-custom-fields wp-query

我正在尝试编写一个WP_Query,它使用来自两个ACF复选框的一些数据作为参数的一部分。

我发现文档显示了如何在自定义查询中使用字段,但我无法弄清楚复选框的正确语法是什么。

我的ACF:

  • 标签:推广到主页?
  • 姓名:promote_to_homepage
  • 选择:Promoteto主页:推广到主页
  • 标签:制作专辑?
  • 姓名:make_feature
  • 选择:显示为功能:显示为功能(主页顶部)

这是我的查询:

$the_query = new WP_Query(
   array
      (
         'posts_per_page' => 1,
         'meta_key' => 'promote_to_homepage',
         'meta_value' => 'Promote to homepage',
         'meta_key' => 'make_feature',
         'meta_value' => 'Make feature'
      )
);

我想我无法弄清楚为什么meta_keymeta_value实际需要数据。标签是关键吗?价值是选择之一吗?或者我需要使用meta_value => true或其他什么?我尝试了很多变化,无法让它发挥作用。

基本上我想要做的是输出最新的帖子,检查“推广到主页”和“制作功能”。

我也尝试过:

array
   (
      'posts_per_page' => 1,
      'meta_key' => 'promote_to_homepage',
      'meta_value' => true,
      'meta_key' => 'make_feature',
      'meta_value' => true
)

修改

这是我尝试过的新代码:

    $args = array(
        'post_type' => 'post',
        'posts_per_page' => 1,
        'meta_query' => array(
        'relation' => 'AND',
            array(
                'key' => 'promote_to_homepage',
                'value' => true,
            ),
            array(
                'key' => 'make_feature',
                'value' => true,
            ),
        )
     );

    $the_query = new WP_Query($args);

   if ( $the_query->have_posts() ) {
      while ( $the_query->have_posts() ) {
            $the_query->the_post();
            echo '<h2>' . get_the_title() . '</h2>';
            echo '<p>' . get_the_excerpt() . '</p>';
            echo '<p><a href="#" class="read-more">Read more</a></p>';
        }
    }
    wp_reset_postdata();

2 个答案:

答案 0 :(得分:0)

&#13;
&#13;
$args = array(
	'post_type' => 'post',   //replace 'post' with cpt if you need to.
        'posts_per_page' => 1,
	'meta_query' => array(
           'relation' => 'AND',
		array(
			'key' => 'promote_to_homepage',
			'value' => '1',
		    'compare' => '=='
		),
                array(
			'key' => 'make_feature',
			'value' => '1',
		    'compare' => '=='
		),
	)
 );
$the_query = new WP_Query($args); // This will return posts and other data
$the_query = get_posts( $args );  // This will return the posts
&#13;
&#13;
&#13;

对你来说怎么样?选择WP_Query OR get_posts:get_posts无论如何都会从wp_query返回帖子数据,所以你也可以使用它。

我不完全确定你的意思是真的/是&#39;但你可以玩弄价值观。如果自定义字段中的键值是字面上的真/是&#39;然后你最好把它作为args中的值 - 否则是或者是真的。

答案 1 :(得分:0)

Another option is to get a lot of posts like this:

 $args = array(
       'post_type' => 'posts',
       );

$posts = get_posts($args);

foreach($posts as $item) :
  $make_feature = get_post_meta($item->ID, 'make_feature', true );
  var_dump($make_feature); //test
  $promote_to_homepage = get_post_meta($item->ID, 'promote_to_homepage', true );
  var_dimp($promote_to_homepage); //test

  if(isset($make_feature) && isset($promote_to_homepage)):

    print_r($item);

  endif;

endforeach;

在限制帖子之前检查这是否有效。如果你没有从var_dump变量得到任何结果,那么ACF就会出现问题。