使用unctions.php列出类别中的所有帖子标题

时间:2015-04-05 作者:SevenT

我已经在谷歌上搜索过了。但许多主题展示了创建新模板页面的方法,您可以为页面选择模板类型。

但是我希望它通过使用函数直接在类别中显示帖子标题。php在我的主题中。

代码为

<?php if ( is_category() ) : ?>
<li>
<h2>News</h2><ul>
<?php
$posts = get_posts(\'numberposts=-1&orderby=date&order=ASC\');
 foreach($posts as $post) :
 ?>

<li>
<a>"><?php the_title(); ?></a>
</li>
<?php endforeach; ?>
</ul>
</li>
<?php endif ; ?>
任何关于如何将其转换为函数以便在函数中使用的问题。php?

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

我不确定您的确切方法是什么,但上面的内容可以很容易地转换为函数。我已经对代码进行了注释,因此您可以遵循它。(需要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 );
    }
});
然后,您可以只使用类别中的默认循环。php

while ( have_posts() ) {
    the_post();

        the_title( \'<h1 class="entry-title"><a href="\' . esc_url( get_permalink() ) . \'" rel="bookmark">\', \'</a></h1>\' );

}
这将为您提供与自定义函数相同的精确效果

结束