我想在一个页面上添加三个广告。我有一个名为“ads”的自定义帖子类型,我正在使用高级自定义字段添加开始日期、结束日期和选择与之关联的页面的选项。
如果没有任何符合此标准的广告,我想为这些广告设置一个后备映像。。
if ( $start_date <= $current_date && $end_date >= $current_date && in_array( $page_id, $page_ids ) )
因此,假设我有6个广告设置,只有1个符合该标准,并且仍然处于活动状态。这个
else statement
不考虑有多少广告处于活动状态,因此如果只有1个广告处于活动状态,它仍将显示3个。如果没有适合的广告,我想让它只显示备用广告
if statement
但在循环的这一点上,我想不出该怎么做。
我有posts_per_page
设置为无限制,因为我需要按日期和与之关联的页面过滤它们,所以我使用$i < 3
在while循环中,从该点开始,将其限制为三个广告。
基本上不显示任何备用广告,除非没有符合if statement
.
这可能更像是一个PHP问题,但它包含了wp循环,所以我认为这是一个更好的提问方式。有人有什么想法吗?谢谢
<?php
$current_date = date(\'Ymd\');
$page_object = get_queried_object();
$page_id = get_queried_object_id();
$args = array(
\'post_type\' => \'ads\',
\'posts_per_page\' => -1,
\'orderby\' => \'rand\'
);
$ads = new WP_Query( $args );
if ( $ads->have_posts() ) : $i = 0;
while ( $ads->have_posts() && $i < 3 ) : $ads->the_post();
$start_date = get_field( \'start_date\' );
$end_date = get_field( \'end_date\' );
$link = get_field( \'link\' );
$display = get_field( \'display_on_page\' );
$page_ids = array();
// Store ID\'s in an array
foreach ( $display as $post_object ) {
$page_ids[] = $post_object->ID;
}
// Show ads that are inbetween start & end dates and match the page_ids selected
if ( $start_date <= $current_date && $end_date >= $current_date && in_array( $page_id, $page_ids ) ) {
?>
<div class="col-1-3">
<div class="advertisement footer-ad">
<a href="<?php echo $link; ?>"><?php the_post_thumbnail( \'ads\' ); ?></a>
</div>
</div>
<?php
} else {
// Will loop 3 times for fallback ads ?>
<div class="col-1-3">
<div class="advertisement footer-ad">
<img src="<?php bloginfo( \'template_url\' ); ?>/images/ad-listing.jpg" alt="Advertisement">
</div>
</div>
<?php
}
$i++;
endwhile;
endif;
?>
最合适的回答,由SO网友:ferne97 整理而成
从朋友那里得到了一些帮助,我发现我需要用meta\\u query将post\\u meta内容移动到查询中,然后从那里设置一个回退。
<?php
$current_date = date(\'Ymd\');
$page_object = get_queried_object();
$page_id = get_queried_object_id();
// Match the string "123" to the database value a:1:{i:0;s:3:"123";} (serialized array) for ACF
$page_id = \'"\' . $page_id . \'"\';
$args = array(
\'post_type\' => \'ads\',
\'posts_per_page\' => 3,
\'orderby\' => \'rand\',
\'meta_query\' => array(
array(
\'key\' => \'start_date\',
\'value\' => $current_date,
\'compare\' => \'<=\',
),
array(
\'key\' => \'end_date\',
\'value\' => $current_date,
\'compare\' => \'>=\',
),
array(
\'key\' => \'display_on_page\',
\'value\' => $page_id,
\'compare\' => \'LIKE\'
)
)
);
$ads = new WP_Query( $args );
if ( $ads->have_posts() ) :
while ( $ads->have_posts() ) : $ads->the_post();
$link = get_field( \'link\' );
?>
<div class="col-1-3">
<div class="advertisement footer-ad">
<a href="<?php echo $link; ?>"><?php the_post_thumbnail( \'ads\' ); ?></a>
</div>
</div>
<?php
endwhile;
else: ?>
<div class="col-1-3">
<div class="advertisement footer-ad">
<img src="<?php bloginfo( \'template_url\' ); ?>/images/ad-listing.jpg" alt="Advertisement">
</div>
</div>
<div class="col-1-3">
<div class="advertisement footer-ad">
<img src="<?php bloginfo( \'template_url\' ); ?>/images/ad-listing.jpg" alt="Advertisement">
</div>
</div>
<div class="col-1-3">
<div class="advertisement footer-ad">
<img src="<?php bloginfo( \'template_url\' ); ?>/images/ad-listing.jpg" alt="Advertisement">
</div>
</div>
<?php
endif;
?>