基于从中筛选出的数字的Fallback IF语句

时间:2013-09-27 作者:ferne97

我想在一个页面上添加三个广告。我有一个名为“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;
?>

1 个回复
最合适的回答,由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;
?>

结束

相关推荐

Loop not showing first post

我在页面上设置了以下循环,但它缺少了第一篇帖子。有人知道为什么会这样吗?<div class=\"gallery\"> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <div class=\"gallery-item\"> <a href=\"<?php esc_url( the_permalink() ); ?>\">