【问题标题】:Wordpress pagination not returning the same number of posts on pagesWordpress 分页没有在页面上返回相同数量的帖子
【发布时间】:2021-04-08 22:10:47
【问题描述】:

这是我的分页代码。一切都很好,除了第 2 页之后,页面上的帖子数量不同。例如,它在第 1 页和第 2 页上返回 9、在第 3 页上返回 8、在第 4 页上返回 7、在第 5 页上返回 6 ......这个数字只会越来越小。发生这种情况有原因吗?我已尝试更改参数,但到目前为止没有任何帮助。


    <?php
    if (!defined('ABSPATH')) exit;
    // Exit if accessed directly
    
    /**
     * @param $posts array
     * @param $every_eighth_full_width boolean
     */
    ?>
    <?if ($posts) :?>
            <div class="row new-post-list">
                <?php 
                    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
                    $args = array( 'post_type'=> 'post', 'post_status' => 'publish','orderby' => 'post_date',
                'order'   => 'desc', 'posts_per_page' => 9, 'paged' => $paged );
                    $query = new WP_Query($args);
                    $counter = 1;
                    while ( $query->have_posts() ) : $query->the_post();
                    ?>
                                    <?php
    
                    $hide = get_field('hide_this_blog_post_from_the_main_blog_page', $post->ID);
                    if($hide)
                        continue;
                    ?>
                    <div class="col-12 mb-2 <?= ($every_seventh_full_width && $counter%7 == 0) ? '' : 'col-md-6' ?>">
                        <?php include(locate_template('/templates/posts/new-post-teaser.php')); ?>
                    </div>
                    <?php
                    $counter++;
                    endwhile;?>
                    <div class="col-12 new-blog-pagination">
                    <?php
                      echo paginate_links(array(
                        'total' => $query->max_num_pages,
                        'prev_text' => '',
                        'next_text' => ''
                      ));
                    ?>
                    </div>
                    
                <?php wp_reset_postdata(); ?>
            </div>
    <?php endif; ?> 

编辑:这就是我解决问题的方法:

            <?php 
                $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
                $args = array( 'post_type'=> array('post','guide'), 'post_status' => 'publish','orderby' => 'post_date',
            'order'   => 'desc', 'posts_per_page' => 9, 'paged' => $paged, 'meta_query' => array(
                array(
                    'key'       => 'hide_this_blog_post_from_the_main_blog_page',
                    'value'     => '1',
                    'compare'   => '<'
                )
            ) 
        );
                $query = new WP_Query($args);
                $counter = 1;
                while ( $query->have_posts() ) : $query->the_post();
                ?>

                <div class="col-12 mb-2 <?= ($every_seventh_full_width && $counter%5 == 0) ? '' : 'col-md-6' ?>">
                    <?php include(locate_template('/templates/posts/new-post-teaser.php')); ?>
                </div>
                <?php
                $counter++;
                endwhile;?>

【问题讨论】:

  • 嗯,这可能与您如何从输出部分的结果集中跳过帖子有关,基于 $hide 包含的内容......
  • 您应该首先阻止那些具有此特定元值的帖子在您的查询中被选中,而不是稍后才将它们过滤掉。 developer.wordpress.org/reference/classes/wp_query/…
  • @CBroe 谢谢,当我删除它时它起作用了。我将尝试找到排除这些帖子的解决方案
  • 我发布该链接的目的是解释如何根据查询中的元值进行过滤。
  • @CBroe 谢谢!我设法解决了我的问题,现在效果很好:)

标签: php wordpress pagination


【解决方案1】:

也许是因为这段代码

 $hide = get_field('hide_this_blog_post_from_the_main_blog_page', $post->ID);
                if($hide)
                    continue;

您是否尝试对此发表评论?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    相关资源
    最近更新 更多