我正在寻找一种按日期或自定义字段过滤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 );