WordPress分页wp_query

cclgggtu  于 2023-06-21  发布在  WordPress
关注(0)|答案(5)|浏览(180)

我有一个自定义页面,其中列出了所有的职位,无论类别,我已经击中了砖墙与分页!由于某些原因分页不显示!
这是我的代码

<?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(); ?>
2jcobegt

2jcobegt1#

您的链接将不会显示,因为默认情况下,next_posts_link()被设置为主查询($wp_query->max_num_pages)的$max_num_pages参数。在页面上,这将始终是1,默认情况下,当只有一个页面时,这些链接不会显示
此外,你没有分页你的查询,所以即使你gt你的链接工作,你会看到相同的职位被重复。
您应该像这样将paged参数添加到查询中

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

然后需要像这样修改next_posts_link()中的$max_pages参数

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

zazmityj2#

首先尝试将'posts_per_page'参数添加到$args中,这样循环就会知道页面中要显示多少文章。
第二,从WordPress Codex:
如果在静态首页上分页被破坏,则必须以这种方式添加“paged”>参数:

<?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

2skhul33

2skhul333#

您已经创建了自定义模板,所以您应该先尝试以下链接: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对象将只包含一个post -自定义页面模板所分配到的页面的ID。
如果当前上下文是某种类型的归档索引,主$wp_query可能包含足够多的帖子,导致分页,这导致问题的下一部分:对于主$wp_query对象,WordPress将根据分页URL查询变量向查询传递一个分页参数。当获取查询时,该paged参数将用于确定返回哪组分页的帖子。如果单击显示的分页链接并加载下一页,则自定义查询将无法知道分页是否已更改。
https://wordpress.stackexchange.com/questions/120407/how-to-fix-pagination-for-custom-loops
我希望这对你有用

kxkpmulp

kxkpmulp4#

$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

请尝试上面的代码。

0pizxfdo

0pizxfdo5#

<?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',
                    'paged'     => get_query_var('paged') // Add this to fetch the current page number
                );
                $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>
                
                <?php
                // Pagination using paginate_links()
                echo '<div class="pagination">';
                echo paginate_links(array(
                    'total' => $my_query->max_num_pages,
                    'current' => max(1, get_query_var('paged')),
                ));
                echo '</div>';
                ?>

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

相关问题