Wordpress 页面上的第二个循环不起作用

免责声明:我正在尝试帮助某人向他们的 WordPress 网站添加另一个部分。这段代码的大部分内容都不是我写的。

我为每个 WP_Query 循环使用不同的自定义帖子类型。两个循环本身都可以正常工作,但是当我尝试在同一页面上运行它们时,第二个循环不显示任何帖子。

我尝试过的事情:

  • wp_reset_query();

  • wp_reset_postdata();

  • 更改 $query 和 $args 的名称,使每个名称都是唯一的

  • 将重置函数移至 if() 内部(但仍在 while 循环外部)

我查看了我能找到的关于该主题的所有帖子并尝试了所有建议,但没有任何效果。我肯定错过了一些东西..也许另一双眼睛可以帮助我找到问题。我在下面发布了相关代码。

/* ---- First Loop ---- */

<?php

    $args = array(

        'post_type'      => 'casestudies',

        'post_status'    => 'publish',

        'order'          => 'ASC',

        'posts_per_page' => -1

    );

                        

    $query = new WP_Query( $args );

    if ( $query->have_posts() ) :

        while ( $query->have_posts() ) : 

            $query->the_post();


            /* ---- Do Stuff ---- */


        endwhile;               

    endif;

    wp_reset_query();

?>


/* ---- Second Loop ---- */

<?php

    $args = array(

        'post_type'      => 'whitepages',

        'post_status'    => 'publish',

        'order'          => 'ASC',

        'posts_per_page' => -1

    );

                        

    $query = new WP_Query( $args );

    if ( $query->have_posts() ) :

        while ( $query->have_posts() ) : 

            $query->the_post();


            /* ---- Do Stuff ---- */    

                                

        endwhile;

    endif;

    wp_reset_query();

?>

编辑:

我在已接受答案的帮助下找到了解决方案。我在下面的另一个答案中发布了我所做的修复所有内容的操作。


DIEA
浏览 104回答 3
3回答

小唯快跑啊

刚刚在我的本地环境中尝试了这段代码,唯一的变化是数组post_type中的值$args,它似乎工作正常。我建议做什么,如下所示:仔细检查该值是否post_type与帖子类型的 slug 相匹配。这可能只是一个拼写错误的情况,多年来,这件事让我绊倒的次数比我愿意承认的还要多。您可以通过查找functions.php函数register_post_type调用来找到它。检查该帖子类型下是否确实有已发布的帖子。再说一遍,我也曾多次遇到过这种情况。此外,您可能需要考虑稍微整理一下代码,以防止可能丢失某些内容并使其在将来更易于管理。循环访问可用的帖子类型数组,然后WP_Query为每个可用的帖子类型构造一个数组,这是我首选执行您所描述的任务,它看起来像这样:<?php    $post_types       = array( 'yourposttype', 'yourotherposttype' );    $common_arguments = array(        'post_status'    => 'publish',        'order'          => 'ASC',        'posts_per_page' => -1,    );?><?php foreach ( $post_types as $post_type ): ?>    <?php        $post_type_argument = array( 'post_type' => $post_type );        $arguments          = array_merge( $common_arguments, $post_type_argument );        $query              = new WP_Query( $arguments );    ?>    <?php if ( $query->have_posts() ): ?>        <?php while ( $query->have_posts() ) : $query->the_post(); ?>            <?php // Example output ?>            <?php the_title(); ?>        <?php endwhile; ?>        <?php wp_reset_postdata(); ?>    <?php endif; ?>    <?php endforeach; ?>这样,如果您需要显示另一种帖子类型,您可以将其添加到$post_types数组中,而无需复制代码块。最后,当您使用时,您是正确的wp_reset_postdata(),这是在循环自定义之后运行的推荐函数WP_Query,wp_reset_query()在这种情况下有点多余。

慕标琳琳

使用<?php wp_reset_postdata(); ?>while 循环后解决了这个问题。

慕标5832272

我找到了解决办法!事实上,并不是 WP_Query() 循环导致了问题,而是保存正在显示的帖子的轮播。每个循环都会将自定义帖子放入轮播中,并且我为页面上的每个轮播重复使用相同的 id。这对 JavaScript 来说效果不佳。为了纠正这个问题,我在主 js 文件中复制了 JavaScript 函数,但将 #original-name 更改为 #other-name。我还将 carousel id 更改为 other-name。现在一切都按预期进行。
打开App,查看更多内容
随时随地看视频慕课网APP