我对WordPress没有经验。我的目标是显示页面上的所有帖子。
我试图在这样的页面上显示帖子:
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
...
<?php endwhile; else: ?>
<p><?php _e( \'Sorry, no pages found.\' ); ?></p>
<?php endif; ?>
我遇到了一个问题,默认情况下最多只能显示5篇帖子。我尝试使用自定义
WP_Query
:
<?php
$all_query = new WP_Query(array(
\'post_type\'=>\'post\',
\'post_status\'=>\'publish\',
\'posts_per_page\'=>-1,
));
if ($all_query->have_posts()) : while ($all_query->have_posts()) : $all_query->the_post();
?>
它显示了所有帖子,但也显示了所有帖子,即使是在类别存档页面上(即来自其他类别的帖子)。
据我所知,我可以创造archive.php
类别和作者页面。
是否有任何解决方案可以使用循环仅显示当前类别或作者的所有帖子?
SO网友:Dave Romsey
默认情况下,任何循环中显示的帖子数量由博客页面最多显示的设置控制。要显示所有帖子,可以输入大量数字,但是-1
(这是用于posts_per_page
参数输入WP_Query
) 在这里不起作用。
可以显示类别和作者档案中的所有帖子,同时在主博客区域中显示有限数量的帖子。为此,请使用博客页面最多显示设置来配置要在主博客中显示的帖子数量,然后使用pre_get_posts
钩住以修改其他存档以符合您的偏好。将以下代码添加到主题的functions.php
文件:
/**
* Modify the query to show all posts on category and author archives.
*
*/
function wpse238882_pre_get_posts( $query ) {
if ( ( $query->is_author() || $query->is_category() ) && $query->is_main_query() ) {
$query->set( \'posts_per_page\', -1 );
}
}
add_action( \'pre_get_posts\', \'wpse238882_pre_get_posts\' );
您仍然可以使用
author.php
和
category.php
模板来自定义作者和类别存档的输出,但这对于简单地修改显示的帖子数量并不是必需的,上面已经演示了这一点。查看
template hierarchy 有关自定义模板的详细信息,请参阅Codex条目。
SO网友:Maria Teresa
<?php
//for each category, show all posts
$cat_args = array(
\'orderby\' => \'name\',
\'order\' => \'ASC\'
);
$categories = get_categories( $cat_args );
foreach( $categories as $category ) {
$args = array(
\'showposts\' => -1,
\'post_per_page\' => -1,
\'category__in\' => array($category->term_id),
\'caller_get_posts\' =>1
);
$posts = get_posts( $args );
if( $posts ) {
echo \'<p>Category: <a href="\' . get_category_link( $category->term_id ) . \'" title="\' . sprintf( __( "View all posts in %s" ), $category->name ) . \'" \' . \'>\' . $category->name . \'</a></p>\';
foreach( $posts as $post ) {
setup_postdata( $post );
while ( have_posts() ) : the_post();
the_title( \'<div>\', \'</div>\' );
endwhile;hp
} // foreach($posts
} // if ($posts
} // foreach($categories