为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
DIEA 2024-01-19 15:58:24
免责声明:我正在尝试帮助某人向他们的 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();?>编辑:我在已接受答案的帮助下找到了解决方案。我在下面的另一个答案中发布了我所做的修复所有内容的操作。
查看完整描述

3 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

刚刚在我的本地环境中尝试了这段代码,唯一的变化是数组post_type中的值$args,它似乎工作正常。

我建议做什么,如下所示:

  1. 仔细检查该值是否post_type与帖子类型的 slug 相匹配。这可能只是一个拼写错误的情况,多年来,这件事让我绊倒的次数比我愿意承认的还要多。
    您可以通过查找functions.php函数register_post_type调用来找到它。

  2. 检查该帖子类型下是否确实有已发布的帖子。再说一遍,我也曾多次遇到过这种情况。

此外,您可能需要考虑稍微整理一下代码,以防止可能丢失某些内容并使其在将来更易于管理。
循环访问可用的帖子类型数组,然后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_Querywp_reset_query()在这种情况下有点多余。


查看完整回答
反对 回复 2024-01-19
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

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



查看完整回答
反对 回复 2024-01-19
?
慕标5832272

TA贡献1966条经验 获得超4个赞

我找到了解决办法!事实上,并不是 WP_Query() 循环导致了问题,而是保存正在显示的帖子的轮播。每个循环都会将自定义帖子放入轮播中,并且我为页面上的每个轮播重复使用相同的 id。这对 JavaScript 来说效果不佳。

为了纠正这个问题,我在主 js 文件中复制了 JavaScript 函数,但将 #original-name 更改为 #other-name。我还将 carousel id 更改为 other-name。

现在一切都按预期进行。


查看完整回答
反对 回复 2024-01-19
  • 3 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信