分页页面中的相同帖子

时间:2013-06-26 作者:Dan

我有一个特定的模板,只显示类别(350)中的帖子。当我为帖子分页时,帖子保持不变。下面是组成此模板的一些代码。有没有办法纠正这个问题?

<?php if (is_front_page()) { ?>
    <?php get_template_part(\'home\'); ?>
<?php } else { ?>   
    <?php 
    $et_ptemplate_settings = array();
    $et_ptemplate_settings = maybe_unserialize( get_post_meta($post->ID,\'et_ptemplate_settings\',true) );

    $fullwidth = isset( $et_ptemplate_settings[\'et_fullwidthpage\'] ) ? (bool) $et_ptemplate_settings[\'et_fullwidthpage\'] : false;

    $et_ptemplate_blogstyle = isset( $et_ptemplate_settings[\'et_ptemplate_blogstyle\'] ) ? (bool) $et_ptemplate_settings[\'et_ptemplate_blogstyle\'] : false;

    $et_ptemplate_showthumb = isset( $et_ptemplate_settings[\'et_ptemplate_showthumb\'] ) ? (bool) $et_ptemplate_settings[\'et_ptemplate_showthumb\'] : false;

    $blog_cats = isset( $et_ptemplate_settings[\'et_ptemplate_blogcats\'] ) ? (array) $et_ptemplate_settings[\'et_ptemplate_blogcats\'] : array();
    $et_ptemplate_blog_perpage = isset( $et_ptemplate_settings[\'et_ptemplate_blog_perpage\'] ) ? (int) $et_ptemplate_settings[\'et_ptemplate_blog_perpage\'] : 10;
    ?>

        <div id="content" class="clearfix<?php if($fullwidth) echo(\' pagefull_width\');?>">
            <div id="content-area"> 
                <div class="entry clearfix">
                <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
                    <?php query_posts(\'cat=350\'); ?>

                    <h1 class="title"><?php the_title(); ?></h1>

                    <?php the_content(); ?>
                    <?php wp_link_pages(array(\'before\' => \'<p><strong>\'.esc_html__(\'Pages\',\'Minimal\').\':</strong> \', \'after\' => \'</p>\', \'next_or_number\' => \'number\')); ?>

                    <div id="et_pt_blog">
                        <?php $cat_query = \'\'; 
                        if ( !empty($blog_cats) ) $cat_query = \'&cat=\' . implode(",", $blog_cats);
                        else echo \'<!-- blog category is not selected -->\'; ?>
                        <?php 
                            $et_paged = is_front_page() ? get_query_var( \'page\' ) : get_query_var( \'paged\' );
                        ?>
                        <?php query_posts("showposts=$et_ptemplate_blog_perpage&paged=" . $et_paged . $cat_query); ?>
                        <?php if (have_posts()) : while (have_posts()) : the_post(); ?>

                            <div class="et_pt_blogentry clearfix">
                                    <?php the_content(); ?>
                            </div> <!-- end .et_pt_blogentry -->

                        <?php endwhile; ?>
                            <div class="page-nav clearfix">
                                <?php if(function_exists(\'wp_pagenavi\')) { wp_pagenavi(); }
                                else { ?>
                                     <?php get_template_part(\'includes/navigation\'); ?>
                                <?php } ?>
                            </div> <!-- end .entry -->
                        <?php else : ?>
                            <?php get_template_part(\'includes/no-results\'); ?>
                        <?php endif; wp_reset_query(); ?>

                    </div> <!-- end #et_pt_blog -->

                <?php endwhile; endif; ?>
                </div> <!-- end .entry -->

            </div> <!-- end #content-area -->   

    <?php if (!$fullwidth) get_sidebar(); ?>
        </div> <!-- end #content --> 

    <?php get_footer(); ?>
<?php } ?>  

1 个回复
SO网友:s_ha_dum

问题是您正在运行query_posts 在页面的中间,顺便说一句,这几乎是你永远不应该做的。这将覆盖主查询global $wp_query 对象分页可能会出现才能工作。问题是原始主查询在加载模板之前运行,因此在运行修改后的查询版本之前运行,因此主查询和正在分页的查询不同步。

您可能需要在上使用筛选器pre_get_posts, something like this one, 而不是在页面中间运行另一个查询。在你的情况下,你需要获取一些信息。

以下是您需要的最佳猜测(完全未经测试):

function pre_get_posts_wpse_104225($qry) {
  if (is_main_query() && !is_front_page()) {
    $et_ptemplate_blog_perpage = isset( $et_ptemplate_settings[\'et_ptemplate_blog_perpage\'] ) 
      ? (int) $et_ptemplate_settings[\'et_ptemplate_blog_perpage\'] 
      : 10;

    $blog_cats = isset( $et_ptemplate_settings[\'et_ptemplate_blogcats\'] ) 
      ? (array) $et_ptemplate_settings[\'et_ptemplate_blogcats\'] 
      : array();

    $cat_query = implode(",", $blog_cats);

    $qry->set(\'posts_per_page\',$et_ptemplate_blog_perpage);
    $qry->set(\'category__in\', $cat_query);
  }
}
add_action(\'pre_get_posts\',\'pre_get_posts_wpse_104225\');
我相信你需要更多的条件if (is_main_query() && !is_front_page()) {-- 但我不知道还有什么。

结束

相关推荐

Pagination and multiple loops

对,所以我现在有一个使用css网格将页面分成三部分的页面。第三列是侧栏,前两列各有一个要显示的帖子查询,并创建一个漂亮的帖子网格(虚拟内容):http://puu.sh/2Xh9o.jpg每个循环如下所示: <?php query_posts(\'showposts=5\'); ?> <?php $posts = get_posts(\'numberposts=5&offset=0\'); foreach ($posts as $post) : start_wp()