Wordpress 自定义分页在每个页面上显示相同的帖子

Wordpress custom pagination shows same posts on every page

我一直在尝试将自定义数字分页添加到我的自定义 Wordpress 主题中。到目前为止一切似乎都很好,但问题是每个页面都显示相同的 3 个帖子。在构建我自己的 Wordpress 博客主题时,我应该考虑做些什么吗?现在我有我的 page-archive.php 和 single.php 文件,我需要其他东西才能工作吗?类别过滤也不起作用,它一直让我回到 index.php

我的 index.php 文件中的代码

<div class="blogitem a">
<?php
            
        //PRINT ONLY Tutvustus
        $lastBlog = new WP_Query('type=post&posts_per_page=3');
            
        if( $lastBlog->have_posts() ):
            
            while( $lastBlog->have_posts() ): $lastBlog->the_post(); ?>
                
                <?php get_template_part('page-archive',get_post_format()); ?>
            
            
            
            
            <?php endwhile;
            
        endif;
        
        wp_reset_postdata();
                
        ?>
        
        <div class="pagination">
<?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(array(
    'post_type'      => 'post',
    'paged'          => $paged,
    'posts_per_page' => 2
));

if ( have_posts() ) : ?>

<?php while ( have_posts() ) : the_post(); ?>

    <?php?>

<?php endwhile; ?>

    <?php my_pagination(); ?>

<?php else : ?>

    <?php ?>

<?php endif; ?>
</div>
        
</div>

我的 functions.php 文件中的代码

if ( ! function_exists( 'my_pagination' ) ) :
    function my_pagination() {
        global $wp_query;
        $big = 999999999; 

        echo paginate_links( array(
            'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
            'format' => '?paged=%#%',
            'current' => max( 1, get_query_var('paged') ),
            'total' => $wp_query->max_num_pages
        ) );
    }
endif;

我将我的页面-archives.php 文件修改为此代码。

<?php
/*
Template Name: Archives
*/
get_header(); ?>

  
<div id="container">
    <div id="content" role="main">

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

    </div><!-- #content -->
</div><!-- #container -->


<?php get_footer(); ?>

现在我的类别过滤可以正常工作了,但是如果我从分页中选择第二页,它不会显示任何帖子。

我认为您需要 wp_reset_query...一些有用的链接:

参见此处示例:

<div class="blogitem a">
<?php
            
        //PRINT ONLY Tutvustus
        $lastBlog = new WP_Query('type=post&posts_per_page=3');
            
        if( $lastBlog->have_posts() ):
            
            while( $lastBlog->have_posts() ): $lastBlog->the_post(); ?>
                
                <?php get_template_part('catalog',get_post_format()); ?>
            
            
            
            
            <?php endwhile;
            
        endif;
        
        wp_reset_postdata();
                
        ?>
        
        <div class="pagination">
<?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(array(
    'post_type'      => 'post',
    'paged'          => $paged,
    'posts_per_page' => 2
));

if ( have_posts() ) : ?>

<?php while ( have_posts() ) : the_post(); ?>

    <?php?>

<?php endwhile; ?>

    <?php my_pagination(); ?>

<?php else : ?>

    <?php ?>

<?php endif; ?>

<?php wp_reset_query(); // add this ?>

</div>
        
</div>

原来我很傻,反正前半段代码我也不需要

<div class="pagination">
<?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(array(
    'post_type'      => 'post', // You can add a custom post type if you like
    'paged'          => $paged,
    'posts_per_page' => 2
));

if ( have_posts() ) : ?>

<?php while ( have_posts() ) : the_post(); ?>

    <?php get_template_part('catalog',get_post_format()); ?> // added template part here and voila it works

<?php endwhile; ?>

    <?php my_pagination(); ?>

<?php else : ?>

    <?php  ?>
<?php wp_reset_query(); // add this ?>
<?php endif; ?>


</div>