显示特定类别/作者的所有帖子

时间:2016-09-11 作者:Frelseren

我对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 类别和作者页面。

是否有任何解决方案可以使用循环仅显示当前类别或作者的所有帖子?

2 个回复
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.phpcategory.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

相关推荐

按ASC或DESC对wp_Dropdown_Categories进行排序

我有一个在标题中搜索的网站(anunciaya.es)。我想按名称ASC/DESC订购wp\\U下拉列表\\U类别,但它不适合我。\'排序依据\'=>;\'“名称”和“顺序”=>;\'DESC不适合我。有什么解决方案吗?以下是PHP代码:wp_dropdown_categories( array( \'show_option_none\' => $cat_text, \'option_none_value\' => \'\', \'ta