我有一些行动号召的帖子,我想在我的首页上显示出来。我想查询这些自定义帖子类型,并显示其中一个具有启动日期<今天的日期和到期日期>今天的日期的帖子类型。如果没有满足这些条件的,我希望显示一个没有到期日期的行动号召。
有没有一种方法可以查询所有行动号召帖子,然后随机显示满足第一个条件的帖子,如果为空,则显示第二个条件?
我已经成功地尝试了两次查询,每个条件一次(见下文)。但我想我更愿意查询数据库一次。通过这种方式,我可以根据需要添加更多的条件,而不需要进行无数的查询。或者这种方法是不明智的?
$today = date( "Ymd" );
// args
$condition1 = array(
'posts_per_page' => 1,
'post_type' => 'cta',
'post-status' => 'publish',
'orderby' => 'rand',
'meta_query' =>array(
'relation' => 'AND',
array(
'key' => 'launch',
'value' => $today,
'compare' => '<'
),
array(
'key' => 'expiry',
'value' => $today,
'compare' => '>'
),
)
);
$condition2 = array(
'posts_per_page' => 1,
'post_type' => 'cta',
'post-status' => 'publish',
'orderby' => 'rand',
'meta_query' =>array(
array(
'key' => 'launch',
'value' => $today,
'compare' => '<'
),
)
);
// query
$cta1 = new WP_Query( $condition1 );
$cta2 = new WP_Query( $condition2 );
if( !empty($cta1 -> have_posts()) ) :
while( $cta1 -> have_posts() ) : $cta1 -> the_post(); global $post;
// Display post with first condition
endwhile; wp_reset_postdata();
elseif( ( $cta2 -> have_posts() ) ) :
while( $cta2 -> have_posts() ) : $cta2 -> the_post(); global $post;
// Display post with second condition
endwhile; wp_reset_postdata();
endif;发布于 2019-04-29 11:50:48
您可以使用高级meta query选项
$meta_query = array(
'posts_per_page' => 1,
'post_type' => 'cta',
'post-status' => 'publish',
'orderby' => 'rand',
'meta_query' =>array(
'relation' => 'OR',
array(
'key' => 'launch',
'value' => $today,
'compare' => '<'
),
array(
'relation' => 'AND',
array(
'key' => 'launch',
'value' => $today,
'compare' => '<'
),
array(
'key' => 'expiry',
'value' => $today,
'compare' => '>'
),
),
)
);https://stackoverflow.com/questions/55896112
复制相似问题