WordPress - 列出所有的文章(使用适当分页)

24

我正在处理的WordPress网站会按照类别列出文章,但我也需要一个页面来列出所有文章(分页显示每页10篇)。我该如何实现这一点?

谢谢。

3个回答

53

你可以创建一个包含此循环的新页面模板:

<?php 
$paged = get_query_var('paged')? get_query_var('paged') : 1;
$args = [
    'post_type' => 'post',
    'posts_per_page' => 10, 
    'paged' => $paged,
];
$wp_query = new WP_Query($args);

while ( have_posts() ) : the_post(); ?>
    <h2><?php the_title() ?></h2>
<?php endwhile; ?>

<!-- then the pagination links -->
<?php next_posts_link( '&larr; Older posts', $wp_query ->max_num_pages); ?>
<?php previous_posts_link( 'Newer posts &rarr;' ); ?>

19

如果其他人也在谷歌搜索这个问题... 如果你用一个静态页面替换了你网站的主页,但是仍然希望你的文章列表出现在另一个链接下面,你需要:

  1. 创建一个空页面(并指定任何你喜欢的URL / slug)
  2. 设置 > 读取下,将这个新页面选择为你的“文章页面”

现在当你在菜单中点击这个页面的链接时,它应该列出所有你最近的文章(无需更改代码)。


谢谢你的回答! 简短问题:完成这个操作后,如何编辑页面的模板? - Miguel Leite

2
基于 @Gavins 的答案,这里提供一个更加高级的解决方案。
<?php
/*
Template Name: List-all-chronological
*/

function trimStringIfTooLong($s) {
    $maxLength = 60;
    
    if (strlen($s) > $maxLength) {
        echo substr($s, 0, $maxLength - 5) . ' ...';
    } else {
        echo $s;
    }
}

?>

<ul>
<?php
$query = array( 'posts_per_page' => -1, 'order' => 'ASC' );
$wp_query = new WP_Query($query);

if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<li>
    <a href="<?php the_permalink() ?>" title="Link to <?php the_title_attribute() ?>">
        <?php the_time( 'Y-m-d' ) ?> 
        <?php trimStringIfTooLong(get_the_title()); ?>
    </a>
</li>
<?php endwhile; else: ?>
<p><?php _e('Sorry, no posts published so far.'); ?></p>
<?php endif; ?>
</ul>

1
如何为超过10篇文章添加分页? - Venkateshwaran Selvaraj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接