带有防止重复输出的代码的随机循环有时根本不返回任何输出

时间:2014-06-12 作者:rkoller

我有一个自定义的分类法,每个术语都有几个引号。两个术语(generalyoga) 共享相同的三个引号池。在我的front-page.php 我从每个学期中随机抽取一句话,作为每个章节的介绍。在条款的情况下generalyoga 我已经包括了一个故障保护,变量$do_not_duplicate, 为了防止在第二次抽签时再次选择相同的报价,并且我在一页上有两次相同的报价。第一个块的代码为:

    <blockquote class="container" style="color:#287da2;">
    <?php
        $args = array(
            \'post_type\' => \'quotes\',
            \'thesections\' => \'general\',
            \'posts_per_page\' => 1,
            \'orderby\' => \'rand\'
        );
        $the_query = new WP_Query( $args );
        if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); $do_not_duplicate = $post->ID; ?>
        <q><?php the_field( \'quote_text\' ); ?></q><br><cite><?php the_field( \'quote_origin\' ); ?></cite>
        <?php endwhile;
                wp_reset_postdata();
            else: ?>
            <p>DB error</p>
        <?php endif; ?>
    </blockquote>
第二块代码为:

    <blockquote class="container" style="color:#1f8665;">
    <?php
        $args = array(
            \'post_type\' => \'quotes\',
            \'thesections\' => \'yoga\',
            \'posts_per_page\' => 1,
            \'orderby\' => \'rand\'
        );
        $the_query = new WP_Query( $args );
        if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); if( $post->ID == $do_not_duplicate ) continue; ?>
        <q><?php the_field( \'quote_text\' ); ?></q><br><cite><?php the_field( \'quote_origin\' ); ?></cite>
        <?php endwhile;
                wp_reset_postdata();
            else: ?>
            <p>DB error</p>
        <?php endif; ?>
    </blockquote>
问题是,它大部分时间都可以工作,但在重新加载两到三个页面后,如果引号正确更新并且没有显示重复项,那么第二个块会保持空白,没有输出,而第一个块会显示引号。日志中没有显示php错误,wp调试模式中也没有错误-无。这是因为术语中的引号太少(3个引号),还是代码中有错误?我真的不知道这种情况下的问题是什么,也不知道是什么原因导致每隔几次重新加载,第二个街区就没有演出。:/向拉尔夫致意

1 个回复
最合适的回答,由SO网友:Pat J 整理而成

问题是您如何进行排除。这是在你拿到第二个报价后发生的。如果它与第一个引号匹配,它就不会出现。

在你的第二个街区试试这个:

<blockquote class="container" style="color:#1f8665;">
<?php
    $args = array(
        \'post_type\' => \'quotes\',
        \'thesections\' => \'yoga\',
        \'posts_per_page\' => 1,
        \'post__not_in\' => array( $do_not_duplicate ),
        \'orderby\' => \'rand\'
    );
    $the_query = new WP_Query( $args );
    if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
    <q><?php the_field( \'quote_text\' ); ?></q><br><cite><?php the_field( \'quote_origin\' ); ?></cite>
    <?php endwhile;
            wp_reset_postdata();
        else: ?>
        <p>DB error</p>
    <?php endif; ?>
</blockquote>
Thepost__not_in 参数将阻止WP_Query 从选择$do_not_duplicate 首先发布。

参考WP_Query Post & Page parameters

结束

相关推荐

Vimeo Froogaloop API,在小提琴中工作,但不能在WP中工作

我试图利用Vimeo的Froogaloop API,在用户单击某个元素时暂停视频嵌入。我让它在my Fiddle 但它在我的Wordpress环境中不起作用。我从this thread 创建我正在处理的网站的简化版本;HTML<div id=\"player1\" class=\"col\"> <div class=\"vid\"> <iframe src=\"//player.vimeo.com/video/75817361?titl