WP_Query按日期搜索或自定义字段

时间:2016-10-27 12:12:08

标签: php wordpress

我正在寻找一种按日期或自定义字段过滤wordpress WP_Queries的方法。

我试图提取在特定日期之后发布的所有帖子或标有给定meta_key的帖子。

到目前为止,我可以看到如何为不同的date_query选项或不同的meta_query选项设置or子句,但不能在两者之间。

这是我到目前为止尝试使用meta_query过滤器和date_query过滤器

$args = array(
    'category_name' => 'mcr-bulletin',
    'post_status'   => 'publish',
    'orderby' => 'date',
    'order' => 'ASC', 
    'relation' => 'OR', 
    array(
        'date_query' => array(
            'after'=>array(
                'year' => $date->format('Y'),
                'month' => $date->format('m'),
                'day'=>$date->format('d')
             )
         ),
         'meta_query' => array(
             'relation' => 'AND', 
             array(
                'key' => 'end_date', 
                'value' => $now->format("Ymd"),
                'type'=>'NUMERIC', 
                'compare' => '>' ),
             array(
                'key' => 'repeat_post', 
                'value' => 1, 
                'type' => 'NUMERIC',
                'compare'=> '=')
             )
        )
    )
);

更新

使用当前的解决方法进行更新。我可以通过帖子使用2个wpdb查询和2个相应的循环来实现所需的功能。但是,如果可能的话,我想将查询组合成一个参数,减少数据库访问并简化代码。

global $wpdb;
$message  = "";
$message2 = "";
$now      = new DateTime();
$date     = new DateTime();
$date->setTimestamp( mktime( 0, 0, 0, date( "m" ), date( "d" ) - 7, date( "Y" ) ) );

$args   = array(
    'category_name'  => 'mcr-bulletin',
    'post_status'    => 'publish',
    'posts_per_page' => - 1,
    'orderby'        => 'date',
    'order'          => 'ASC',
    'date_query'     => array(
        'after' => array(
            'year'  => $date->format( 'Y' ),
            'month' => $date->format( 'm' ),
            'day'   => $date->format( 'd' )
        )
    )
);
$args2  = array(
    'category_name'  => 'mcr-bulletin',
    'post_status'    => 'publish',
    'posts_per_page' => - 1,
    'orderby'        => 'date',
    'order'          => 'ASC',
    'meta_query'     => array(
        'relation' => 'AND',
        array( 
            'key' => 'end_date', 
            'value' => $now->format( "Ymd" ), 
            'type' => 'NUMERIC', 
            'compare' => '>' ),
        array( 
            'key' => 'repeat_post', 
            'value' => 1, 
            'type' => 'NUMERIC', 
            'compare' => '=' 
        )
    ),
    'date_query'     => array(
        'before' => array(
            'year'  => $date->format( 'Y' ),
            'month' => $date->format( 'm' ),
            'day'   => $date->format( 'd' )
        )
    )
);
$query  = new WP_Query( $args );
$query2 = new WP_Query( $args2 );

0 个答案:

没有答案