2个循环,IS_HOME不起作用,计数关闭

时间:2011-11-17 作者:Rev. Voodoo

好的,这些年来我已经做了很多主题,并且写了很多查询。我刚刚意识到,我显然不知道如何让多个查询正常运行。这是我索引中的循环。php:

        <?php do_action( \'voodoo_pre_loop\' ); ?>

        <?php if( is_home() ) : ?>

            <?php $args = array(
                \'posts_per_page\' => 1,
                \'post__in\' => get_option( \'sticky_posts\' ),
                \'ignore_sticky_posts\' => 1
            );
            $my_query = new WP_Query( $args );
            while ($my_query->have_posts()) : $my_query->the_post();
            $do_not_duplicate = $post->ID; ?>
            <?php get_template_part( \'content\', \'featured\' ); ?>
            <?php endwhile; ?>

            <?php if ( is_active_sidebar( \'sidebar-2\' ) ) : ?>
                    <?php dynamic_sidebar( \'sidebar-2\' ); ?>
            <?php endif; ?>

            <?php $paged = get_query_var( \'paged\' ) ? get_query_var( \'paged\' ) : 1;
            $more_args = array(
                \'posts_per_page\' => 9,
                \'post__not_in\' => get_option( \'sticky_posts\' ),
                \'paged\' => $paged
            );
            query_posts( $more_args ); ?>

        <?php endif; ?>

        <?php if ( have_posts() ) : ?>

            <?php voodoo_content_nav( \'nav-above\' ); ?>

            <?php while ( have_posts() ) : the_post();
            if( $post->ID == $do_not_duplicate ) continue; ?>

                <?php $format = get_post_format();
                if ( false === $format )
                    $format = \'standard\';
                    get_template_part( \'content\', $format ); ?>

            <?php endwhile; ?>

            <?php voodoo_content_nav( \'nav-below\' ); ?>

        <?php else : ?>

            <?php voodoo_else(); ?>

        <?php endif; ?>
所以,我所期望的是有一个循环。它只会抓住一个帖子。如果有粘性的,我们会抓住它。如果没有,那么是最近的帖子。这将始终扩展到显示的特色内容。这个循环似乎有效。我有一根棍子,如果没有的话就没有。并调用所选内容。这一切都在is\\U主页上,因为我只希望它出现在主页/首页上。

仍然在is\\U主页中的是一个小部件区域。这并不复杂。

接下来是第二个循环。根据我的逻辑,查询仍在is\\U主页中。在头版上,我想要9篇帖子,从来没有任何粘性,没有第一篇帖子的副本。在随后的页面上,我想我不需要那个查询。我只想让所有其他页面都显示我的标准10篇帖子。没有特色的东西,没有侧边栏等。

因此,这似乎让我想起了第一篇帖子、小部件和一团混乱。

在第二个领域,我只有7个帖子。在随后的页面中,我仍然会看到我不想要的第一个特色循环。我只有8个帖子。我在互联网上读了很多书,显然我没有掌握什么东西。

任何想法:为什么is\\U主页或is\\U首页在这里不起作用?为什么我的数字不正确?(1+9个帖子是主页,剩余10个帖子)

我想在这里得到一些帮助,这样我就能更好地理解这一切。谢谢

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

应使用重置第一个查询wp_reset_postdata() 循环完成后,以避免与主查询冲突。浏览一下您的代码,这是我看到的最重要的缺陷。

还有,我会用$my_query_2 = new WP_Query( $more_args ); 对于第二个问题,我不明白为什么恢复使用query_posts(). This 可能值得一读。

虽然这样做了:它不应该影响代码的功能,但为什么会有这么多php开始和结束标记(即。<?php?>) ? 如果中间有HTML标记并且不喜欢回音,那么这可能是有道理的,但如果不是这样的话,只需<?php 在文件顶部(或相关章节),以及?> 在底部。它将为您自己以及帮助您的人提供更清晰的代码。

EDIT: 姆凯。这在我的dev安装上正常工作:

<ul>            
<?php
    $per_page = is_paged() ? 10 : 9;
    $stickies = get_option( \'sticky_posts\' );
    $offset = empty( $stickies ) ? 1 : 0;
    if( is_home() && !is_paged() ) {
        $per_page = 9;
        $args_first_query = array(
            \'posts_per_page\' => 1,
            \'post__in\' => $stickies,
            \'ignore_sticky_posts\' => 1
        );
        $first_query = new WP_Query( $args_first_query );
        if( $first_query->have_posts() ) {
            while ($first_query->have_posts()) : $first_query->the_post();
                // replace with your template part:
                echo \'<li>Latest Sticky:\'.get_the_title().\'</li>\';
            endwhile;
        }
        wp_reset_postdata();
    }
    // your sidebar
    $paged = get_query_var( \'paged\' ) ? get_query_var( \'paged\' ) : 1;
    $args_main_query = array(
        \'posts_per_page\' => $per_page,
        \'post__not_in\' => $stickies,
        \'paged\' => $paged,
        \'offset\' => $offset
    );
    query_posts( $args_main_query );
    if( have_posts() ) {
        while ( have_posts()) : the_post();
            $format = get_post_format();
            if ( false === $format )
                $format = \'standard\';
            echo \'<li>\'.get_the_title().\'</li>\';
        endwhile;
    }
    // pagination, with check for WP-PageNavi plugin
    if ( function_exists(\'wp_pagenavi\') ) {
        wp_pagenavi();
    } elseif ( get_next_posts_link() || get_previous_posts_link() ) {
        next_posts_link( \'&laquo; Older Entries\' );
        previous_posts_link( \'Newer Entries &raquo;\' );
    }
    wp_reset_query();
?>
</ul>
我建议您检查一下上述内容是否也适用于您的网站。如果失败了,请逐个输入自定义内容,看看是否失败,如果失败了,何时失败。

此支票if( $post->ID == $do_not_duplicate ) continue; 这绝对是多余的,因为第一个查询只接受胶粘物,而第二个查询根本不接受胶粘物。因此,您可以肯定地在第一个查询中省略该行和相关行。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post