主页中的分页不起作用

时间:2015-11-08 作者:mante

我使用的是Presso主题,例如,如果我单击主页中的数字转到第2页,我的url将变为第/2页,突出显示的页码为2,但页面会一直显示第1页的帖子。从主页上单击,任何其他页码的情况都相同。索引。php是

<?php get_header(); ?>

<div id="page-wrapper" class="container">
<?php echo do_shortcode( vw_get_option( \'header_ads_code\' ) ) ; ?>
    <div class="row">
        <div id="page-content" class="col-sm-7 col-md-8">
            <?php $the_query = new WP_Query( \'cat=-7,-3\' ); ?>
            <?php if ($the_query->have_posts()) : ?>

                <?php get_template_part( \'templates/page-title\' ); ?>

                <?php $blog_layout = vw_get_option( \'blog_layout\' ); ?>

                <?php if ( \'classic\' == $blog_layout ) : ?>

                <div class="row archive-posts post-box-list">


                    <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
                    <div class="col-sm-12 post-box-wrapper">
                        <?php get_template_part( \'templates/post-box/classic\', get_post_format() ); ?>
                    </div>
                    <?php 
endwhile;



?>
                </div>

                <?php else: ?>

                <div class="row archive-posts vw-isotope post-box-list">
                    <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
                    <div class="col-sm-6 post-box-wrapper">
                        <?php get_template_part( \'templates/post-box/large-thumbnail\', get_post_format() ); ?>
                    </div>
                    <?php endwhile; ?>
                </div>

                <?php endif; ?>

                <?php get_template_part( \'templates/pagination\' ); ?>

                <?php comments_template(); ?>

            <?php else : ?>

                <h2><?php _e(\'Sorry, no posts were found\', \'envirra\') ?></h2>

            <?php endif; ?>

        </div>

        <aside id="page-sidebar" class="sidebar-wrapper col-sm-5 col-md-4">
            <?php get_sidebar(); ?>
        </aside>
    </div>
</div>

<?php get_footer(); ?>
挖掘主题,分页。get\\u template\\u part调用的php是:

<?php global $wp_query, $wp_rewrite; ?>

<?php if ( $wp_query->max_num_pages > 1 ) : ?>
    <div id="pagination" class="header-font clearfix">
        <?php

            $wp_query->query_vars[\'paged\'] > 1 ? $current = $wp_query->query_vars[\'paged\'] : $current = 1;
            $pagination = array(
                \'base\' => @add_query_arg( \'paged\',\'%#%\' ),
                \'format\' => \'\',
                \'total\' => $wp_query->max_num_pages,
                \'current\' => $current,
                \'prev_text\' => __( \'&laquo;\', \'envirra\' ),
                \'next_text\' => __( \'&raquo;\', \'envirra\' ),
                \'type\' => \'plain\'
            );

            if( $wp_rewrite->using_permalinks() )
                $pagination[\'base\'] = user_trailingslashit( trailingslashit( remove_query_arg( \'s\', get_pagenum_link( 1 ) ) ) . \'page/%#%/\', \'paged\' ); 

            if( !empty( $wp_query->query_vars[\'s\'] ) )
                $pagination[\'add_args\'] = array( \'s\' => urlencode( get_query_var( \'s\' ) ) );

            // echo \'<span>\' . sprintf( __( \'Page&nbsp;&nbsp;%s&nbsp;&nbsp;of&nbsp;&nbsp;%s\', \'envirra\' ), $current, $wp_query->max_num_pages ) . \'</span>\'.\' \';
            echo paginate_links( $pagination );

            if ( false ) posts_nav_link();
        ?>
    </div>
<?php endif; ?>
非常感谢您的帮助

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

<?php $the_query = new WP_Query( \'cat=-7,-3\' ); ?> 是您问题的原因,WordPress已经处理了分页,然后您将其丢弃,并且没有告诉您的新查询有关您当前所在页面的任何信息,因此它默认为第一个页面。

这相当于向某人要一杯茶,等20分钟水壶烧开,茶泡好,然后最后说“我根本不想要茶,去给我煮咖啡吧”

因此,WordPress所做的工作是原来的两倍,降低了页面速度。当插件试图修改主查询的功能时,您也会遇到问题,结果发现您从未使用过它。

如果要修改WordPress从数据库中获取的帖子,应该在运行主查询之前修改它,而不是在运行之后丢弃它。您可以使用pre_get_posts 过滤器,例如:

// show only 1 category on the homepage
function my_home_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'cat\', \'123\' );
    }
}
add_action( \'pre_get_posts\', \'my_home_category\' );
现在,您已经拥有了重新实现代码所需的一切,不需要WP_Query, 请参阅本答案末尾的链接,以获取更多可能有用的信息(我强烈建议您阅读这些链接,这将为您节省大量时间和麻烦)

我还建议您不要使用index.php 作为你的主页,它是主要的回退模板文件,当WordPress不知道加载哪个模板时,它应该充当一个安全网/包罗万象。相反,考虑使用home.php

进一步阅读WordPress.org Codex - pre_get_posts filter
  • Andrew Nacin, Core Developer, You Don\'t Know Query
  • 相关推荐

    Ajax Filtering Pagination

    我知道这是一个常见的问题,但我找不到解决办法。我在用户点击复选框时进行了ajax过滤。在用户单击分页之前,一切都正常。当然,我们现在使用的是管理ajax。php页面和分页链接不工作。这是代码。HTML复选框:<input type=\"checkbox\" id=\"telegram_chk\" checked> <input type=\"checkbox\" id=\"twitter_chk\" checked> <input type=\"checkbo