如何重新排列使用两个查询连接的帖子池?

时间:2013-10-01 作者:versvs

我需要选择两个不同月份的职位(当前,过去)。据我所知,这是不可能通过的m date参数作为整数数组而不是整数数组,因此我执行两个不同的查询,并将所有帖子返回到同一数组中。

问题是,我如何重新排列帖子的结果池?仅仅将第二个池推送到第一个查询返回的数组中是不够的,因为orderby 参数在两个数组的连接处发现不连续。

我试过使用usort 但我有个错误You can\'t use WP_Post object as an array.

有什么想法吗?

谢谢

1 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

我会这样做:

代码

function my_pseudo_date_query( $where, $query ) {

    global $wpdb;

    $dq = $query->get(\'my_date_query\');

    if( $dq && !empty( $dq[\'after\'] ) ){

        $where .=  $wpdb->prepare( 
                      " AND {$wpdb->posts}.post_date >= %s"
                      $dq[\'after\']
                   );
    }

    if( $dq && !empty( $dq[\'before\'] ) ){

        $where .=  $wpdb->prepare( 
                     " AND {$wpdb->posts}.post_date <= %s",
                      $dq[\'before\']
                   );
    }

    return $where;
}
add_filter( \'post_where\', \'my_pseudo_date_query\', 10, 2 );
用法示例:
$now = new DateTime( \'now\' );
$first_of_last_month = new DateTime( \'first day of last month\' );
$my_query = new WP_Query( array(
 \'my_date_query\' => array(
      \'before\' => $now->format( \'Y-m-d H:i:s\' ),
      \'after\' => $first_of_last_month->format( \'Y-m-d H:i:s\' ),
  );
 ) );
在本例中,before参数是多余的。

备注

  1. 这还没有经过测试,这是“原则上”的代码before 和after 的键my_date_query 属性非常严格。他们必须在Y-m-d H:i:s (php)格式。但这就足够了WordPress 3.7 将提供date_query 作为论据。上述代码是“向前兼容”的,因为一旦升级到3.7,就可以删除my_ 示例中的前缀PHP5.3+. 尽管解决这个限制相当简单
  2. 如果与一起使用get_posts() 别忘了设置suppress_filtersfalse.

结束

相关推荐

如何使用WP_QUERY搜索存储在自定义字段中的数组?

我有一个名为“on air”的自定义帖子类型,其中包括一个名为“daysonair”的自定义字段。此表单中有一周中每天的复选框。添加/更新帖子时,选中的项目将作为数组存储在自定义字段中。我不知道如何将该自定义字段添加到我的WP\\u Query()搜索中:array( \'key\' => \'daysonair\', \'value\' => \'Thursday\', \'compare\' => \'IN\' ) 我尝试过多种类