У меня есть посты с призывом к действию, которые я хочу отображать на своей главной странице.Я хотел бы запросить эти пользовательские типы сообщений и отобразить один из них с датой запуска <сегодняшняя дата и дата истечения> сегодняшней даты.Если нет таких, которые соответствуют этим условиям, я хочу отобразить призыв к действию, у которого нет даты истечения срока действия.
Есть ли способ запросить все сообщения с призывом к действиюзатем случайным образом отобразите одно из них, которое соответствует первому условию, а затем, если оно пустое, второе условие?
Я успешно попытался выполнить запрос дважды, по одному для каждого условия (см. ниже).Но я думаю, что лучше один раз запросить базу данных.Таким образом, я могу добавлять дополнительные условия по мере необходимости, не делая бесчисленных запросов.Или этот подход был бы опрометчивым?
$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;