按多个ACF字段排序

时间:2016-02-21 20:10:08

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

我见过几个与此类似的问题,但我仍然无法让事情发生,所以我想我会问。

我有一个名为“课程”的自定义帖子类型。此CPT有一个名为“date”的自定义字段,该字段可以是过去,未来或未设置(null)。

我正在尝试编写一个隐藏过去课程的查询,然后显示未来的课程(按日期排序,最先安排),然后显示未设置日期的课程(占位符课程)。

我的计划是在课程CPT中添加“placeholder_course”字段,只有在设置为false时才会显示日期框。这样,所有占位符对于此字段的值都为1,因此我可以按此排序以使它们显示在当时结束,然后按日期排序以正确排序日期字段中的值。

这就是我一直在使用的:

  <?php
  $today = current_time('Ymd');
  $args = array(
    'post_type' => 'course',
    'posts_per_page' => -1,
    'meta_query' => array(
      'relation' => 'OR',
      'placeholder' => array(
          'key' => 'placeholder_course',
          'compare' => '=',
          'value' => '1
      ),
      'future_dates' => array(
          'key' => 'date',
          'compare' => '>=',
          'value' => $today,
      )
    ),
    'orderby' => array(
      'placeholder' => 'ASC',
      'future_dates' => 'ASC',
    ),
    );
  ?>

但是订单仍然很混乱。我很确定我在查询中做错了什么,有人可以解决问题吗?

1 个答案:

答案 0 :(得分:0)

为占位符值设置true/false字段(如果未设置日期,则可以对其进行检查),则以下代码将在未来日期或任何包含占位符true/false值的帖子中运行到true

更新:你可能要做2次查询。

    $args = array(
            'post_type' => 'course',
            'posts_per_page' => -1,
            'meta_key' => 'date',
            'meta_query' => array(
                array(
                    'key' => 'date', 
                    'value' => $today, 
                    'compare' => '>=',
                ),
            ), 
            'orderby'=> 'meta_value_num',
            'order' => 'ASC'
        );
$args2 = array(
            'post_type' => 'course',
            'posts_per_page' => -1,
            'meta_query' => array(
                array(
                    'key' => 'placeholder_course', 
                    'value' => true, 
                    'compare' => '=',
                ),
            ), 
            'order' => 'ASC'
        );