我不确定您的确切方法是什么,但上面的内容可以很容易地转换为函数。我已经对代码进行了注释,因此您可以遵循它。(需要PHP 5.4,因为它使用短数组语法。另外,我还没有包含标记,您需要根据需要添加标记)
function category_post_list()
{
/*
* Stop function and return null this function is used outside of a
* a category archive page
*/
if ( !is_category() )
return null;
/*
* Get the current category ID with get_queried_object_id()
*/
$category_id = get_queried_object_id();
$args = [
\'cat\' => $category_id,
\'nopaging\' => true, // The same as posts_per_page => -1
];
$q = new WP_Query( $args );
while ( $q->have_posts() ) {
$q->the_post();
the_title( \'<h1 class="entry-title"><a href="\' . esc_url( get_permalink() ) . \'" rel="bookmark">\', \'</a></h1>\' );
}
/*
* Very important reset all postdata if a custom query changed it
*/
wp_reset_postdata();
}
然后可以按如下方式使用它
category_post_list();
另一方面,如果你只是想用你的分类页面作为一个页面来列出文章标题,你可以简单地使用
pre_get_posts
相应地修改主查询,将每页的帖子设置为-1,这样效率会更高。将其添加到函数中。php,此代码将返回一个类别中的所有帖子。(
需要PHP 5.3)add_action( \'pre_get_posts\', function ( $q )
{
if ( !is_admin() && $q->is_main_query() && $q->is_category() ) {
$q->set( \'nopaging\', true );
}
});
然后,您可以只使用类别中的默认循环。phpwhile ( have_posts() ) {
the_post();
the_title( \'<h1 class="entry-title"><a href="\' . esc_url( get_permalink() ) . \'" rel="bookmark">\', \'</a></h1>\' );
}
这将为您提供与自定义函数相同的精确效果