【问题标题】:Wordpress pagination always returns same 3 postsWordpress 分页总是返回相同的 3 个帖子
【发布时间】:2013-10-01 06:15:25
【问题描述】:

所以我创建了专门的页面模板,我想在这个页面上列出最近的 3 篇博客文章,并使用通常的分页链接将用户带到上一篇或下一篇 3 篇文章。

我已经填充了列表,并且出现了链接,但是当我单击上一个或下一个链接时,我只会得到与以前相同的 3 个帖子。我可以看到 URL 更改(/blog/page/2),但显示的帖子始终是最近的三个。

更新。在变得非常沮丧之后,我决定让事情回归基础。下面的 sn-p 是我的模板中唯一的代码,只是为了基本上隔离循环,这个 STILL 并没有修复它。我得到的只是页面上的单个帖子,但是如果我在 url 末尾手动键入 /page/2 ,它会将我带到第 2 页并显示不同的帖子。但是,我看到的唯一与分页有关的链接是“较新的帖子”(仅出现在第 2 页上)。为什么“旧”帖子没有显示?

<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
    'orderby'       => 'post_date',
    'order'         => 'DESC',
    'post_type'     => 'post',
    'post_status'       => 'publish',
    'posts_per_page'    => 1,
    'paged'         => $paged,
);

$postslist = get_posts( $args );
foreach ($postslist as $post) :  setup_postdata($post);
?>

<article>
    <h2 class="fnt25 noBtmMarg"><a href="<?php echo get_permalink(); ?>" title="Read: <?php the_title(); ?>"><?php the_title(); ?></a></h2>
    <div class="meta fnt18 pMarginBottom">Posted on: <?php the_date(); ?></div>

    <div class="fnt22"><?php print_custom_field('listingDesc'); ?></div>

    <a href="<?php echo get_permalink(); ?>" class="floatRight fnt22" title="Read the full article: <?php the_title(); ?>">Read more...</a>
    <div class="clearfix"></div>

</article>
<?php endforeach; ?>

<div class="nav-previous alignleft"><?php next_posts_link( 'Older posts' ); ?></div>
<div class="nav-next alignright"><?php previous_posts_link( 'Newer posts' ); ?></div>

【问题讨论】:

  • 您是否在这段代码之前访问或操作 wp_query(或 get_posts/get_post 或 $post 对象)?此外,您访问的某些帖子是否有可能是自定义帖子?
  • 不,这段代码是我第一次接近 wp_query 或循环。我确实有自定义帖子类型,但我不希望它们被包含在内,这就是为什么我要具体说明“帖子”项目类型。
  • 好的,我假设您的帖子总数不止 3 个(不是自定义帖子)。在这种假设下,也许这个来自 wordpress 的建议? “如果在您的 php.ini 中启用了 mysql.trace_mode,此功能将不起作用(静默失败)。如果您无法编辑该文件,请尝试将 ini_set('mysql.trace_mode', 0); 添加到主题的 functions.php ”。或者,当您不建议特定的 post_type 时会发生什么,那么它是否有效(同时显示帖子和自定义帖子)?
  • 确实,我有 6 个帖子,所以第 2 页应该填满。我尝试使用代码编辑 functions.php 文件,但这对结果没有影响。更改代码以删除帖子类型使其完全停止工作。页面仍然呈现,但没有返回任何帖子...查看完整页面代码直到我复制了我已经粘贴的位是否有用?
  • 我发现wp.tutsplus.com/tutorials/wordpress-pagination-a-primer 真的很有帮助。底部有一个替代选项的解释,称为“更好的解决方案”。调查一下。我能想象到的唯一另一件事是你的页脚。但是通过那个教程,也许它会澄清一些我们没有看到的东西。

标签: wordpress pagination


【解决方案1】:
$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1; // setup pagination

    $the_query = new WP_Query( array( 
        'post_type' => 'post',
        'paged' => $paged,
        'post_status' => 'publish',
        'orderby' => 'date',
        'order' => 'DESC',
        'posts_per_page' => 1) 
    );

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


    echo '<nav>';
    echo  '<div class="nav-previous alignleft">'.get_next_posts_link('Older posts', $the_query->max_num_pages).'</div>'; //Older Link using max_num_pages
    echo  '<div class="nav-next alignright">'.get_previous_posts_link('Newer posts', $the_query->max_num_pages).'</div>'; //Newer Link using max_num_pages
    echo "</nav>";


    wp_reset_postdata(); // Rest Data

请检查上面的代码好吗?

【讨论】:

    【解决方案2】:

    好的。在自己做了一些研究之后,似乎query_posts() 不是这种场景的最佳选择。使用get_posts(),也请阅读一下。

    一个很好的例子(编辑:更好的描述):

    <?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $args = array(
        'orderby'       => 'post_date',
        'order'         => 'DESC',
        'post_type'     => 'post',
        'post_status'       => 'publish',
        'posts_per_page'    => 3,
        'paged'         => $paged,
    );
    
    $postslist = get_posts( $args );
    foreach ($postslist as $post) :  setup_postdata($post);
    ?>
    

    【讨论】:

    • 只返回 1 个帖子并且不显示任何分页链接。您不需要指定打开分页吗?我已经仔细检查过,我有 5 篇已发布的博客文章,所以可以肯定这不是内容问题。
    • 不,事实上它似乎所做的只是列出一个自引用的链接。无论是因为它链接到不存在的东西(实际上只是#),还是因为查询中有一些奇怪的东西使它链接到当前模板而不是帖子......
    • 很抱歉,同时处理多个问题。我以一种更有意义且更简洁的方式重新格式化了代码(而且你很老套,我完全忘记了paged 属性。
    • 我想我们快到了!!我把它放进去,它似乎工作(如果我到 url/page/2 我得到剩余的帖子。但是我在哪里调用分页链接?我试过在 endforeach 之后这样做,但这不起作用...
    • 试试这个插件wordpress.org/plugins/wp-pagenavi/installation。并将&lt;?php wp_pagenavi(); ?&gt; 放在foreach 之后。希望这有效!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 2015-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多