Wordpress分页wp_query

时间:2015-03-18 12:01:08

标签: php wordpress

我有一个自定义页面,列出了所有帖子,不管是哪个类别,我都用分页打砖墙了!出于某种原因,分页没有出现!

这是我的代码

<?php // Template Name: News Feed ?>
<?php get_header(); ?>
<div id="content">
    <div class="container">
        <div class="row">
            <div class="col-md-3">
                <div id="left-sidebar">
                    <?php get_sidebar('posts') ?>
                </div>
            </div>
            <div class="col-md-6">
            <?php
                $args = array(
                    'post_type' => 'post',
                    'orderby'   => 'date',
                    'order'     => 'DESC',
                );
                $my_query = new WP_Query($args);

                    while ($my_query->have_posts()) : $my_query->the_post(); ?>

                        <div class="post">
                            <h2><a href="<?php the_permalink(); ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
                            <small><?php the_time('F jS, Y'); ?> by <?php the_author_posts_link(); ?></small>
                            <div class="entry">
                                <?php the_excerpt(); ?>
                            </div>
                            <p class="postmetadata"><?php _e( 'Posted in' ); ?> <?php the_category( ', ' ); ?></p>
                        </div> 

                    <?php endwhile; ?>

                    <div class="navigation">
                        <div class="alignleft"><?php previous_posts_link('Previous Entries'); ?></div>
                        <div class="alignright"><?php next_posts_link('Next Entries'); ?></div>
                    </div>

            </div>
            <div class="col-md-3">
                <?php get_sidebar(); ?>
            </div>
        </div>
    </div>
</div>
<?php get_footer(); ?>

4 个答案:

答案 0 :(得分:1)

您的链接不会显示,因为默认情况下next_posts_link()设置为主查询($max_num_pages)的$wp_query->max_num_pages参数。在页面上,这将始终为1,默认情况下,当只有一个页面时,这些链接不会显示

此外,您没有对查询进行分页,因此即使您的链接工作正常,您也会看到相同的帖子被重复。

您应该将paged参数添加到您的查询中,如下所示

$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
$args = array(
    'paged' => $paged,
    // Rest of you arguments
);

然后你需要改变$max_pages这样的next_posts_link()参数

next_posts_link( 'Next entries', $my_query->max_num_pages );

答案 1 :(得分:1)

首先尝试将'posts_per_page'参数添加到$ args中,这样循环就会知道要在页面中显示多少帖子。

其次,来自WordPress Codex:

  

如果在静态首页上分页,您必须以这种方式添加“paged”&gt;参数:

<?php 
if ( get_query_var('paged') ) { $paged = get_query_var('paged'); }
elseif ( get_query_var('page') ) { $paged = get_query_var('page'); }
else { $paged = 1; }

query_posts('posts_per_page=3&paged=' . $paged); 
?>

这意味着只需在你的args之前添加这段代码(不带“query_posts”),然后就像这样的args:

$args = array(
                    'post_type' => 'post',
                    'paged'     => $paged,
                    'orderby'   => 'date',
                    'order'     => 'DESC',

我建议再次探索一下,也许有些东西可以帮助你。 http://codex.wordpress.org/Pagination#Example_Loop_with_Pagination

答案 2 :(得分:0)

您已创建自定义模板,因此您应首先尝试使用以下链接: https://wordpress.org/support/topic/pagination-not-working-on-custom-template-1

另外,我要求您完成此link并详细解释所有内容

默认情况下,在任何给定的上下文中,WordPress使用主查询来确定分页。主查询对象存储在$ wp_query全局中,该全局也用于输出主查询循环:

 if ( have_posts() ) : while ( have_posts() ) : the_post();

使用自定义查询时,可以创建一个完全独立的查询对象:

 $custom_query = new WP_Query( $custom_query_args );

该查询通过完全独立的循环输出:

if ( $custom_query->have_posts() ) : 
while ( $custom_query->have_posts() ) : 
    $custom_query->the_post();

但是分页模板标签,包括previous_posts_link(),next_posts_link(),posts_nav_link()和paginate_links(),它们的输出基于主查询对象$ wp_query。该主查询可能是也可能不是分页的。例如,如果当前上下文是自定义页面模板,则主$ wp_query对象将仅包含一个帖子 - 即自定义页面模板所分配到的页面的ID。

如果当前上下文是某种归档索引,则主$ wp_query可能包含足够的帖子以导致分页,这导致问题的下一部分:对于主$ wp_query对象,WordPress将传递分页查询的参数,基于分页的URL查询变量。获取查询时,将使用该分页参数来确定要返回的分页帖子集。如果单击显示的分页链接并加载下一页,则您的自定义查询将无法知道分页已更改。

https://wordpress.stackexchange.com/questions/120407/how-to-fix-pagination-for-custom-loops

我希望这对你有用

答案 3 :(得分:0)

$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1; // setup pagination

    $the_query = new WP_Query( array( 
        'post_type' => 'post',
        'paged' => $paged,
        'posts_per_page' => 5) 
    );

    while ( $the_query->have_posts() ) : $the_query->the_post();
        echo '<div>' . get_the_title() . '</div>';
              the_content();
    endwhile;


    echo '<nav>';
    echo  '<div>'.get_next_posts_link('Older', $the_query->max_num_pages).'</div>'; //Older Link using max_num_pages
    echo  '<div>'.get_previous_posts_link('Newer', $the_query->max_num_pages).'</div>'; //Newer Link using max_num_pages
    echo "</nav>";


    wp_reset_postdata(); // Rest Data

请您尝试上面的代码吗?