在分类页面中按字母顺序排列帖子?

时间:2015-11-16 作者:Nimara

我已经编写了一个页面模板,将列出与页面名称相同类别的帖子。我想知道如何修改它,让它按字母顺序返回帖子?

我一直在阅读并练习如何使用Alphabetizing Posts Codex Page. 我似乎无法让它发挥作用。如果有人能为我演示一下,我将不胜感激,这样我就可以看到在这种情况下是如何做到的。

以下是我的页面模板代码:

<?php /*
Template Name: Category Page
*/ 

get_header(); ?>



<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <div class="content-container">
        <h1><?php the_title(); ?></h1>
            <?php the_content(); ?>
            <?php endwhile; 
            else: endif; ?>

<?php query_posts(\'category_name=\'.get_the_title().\'&post_status=publish\');?>
    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
        <h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>    </h1>
        <p><?php the_content(); ?>
    
<?php endwhile; else: endif; ?>
</div>

<?php /*If sidebar is not disabled in Customizer, get_sidebar*/
if ( get_theme_mod( \'ctheme_remove_sidebar\' ) != 1 ) :
get_sidebar(); 
endif;
get_footer(); ?>
这是我考虑的一种方法。如果你有任何其他想法,我应该如何处理它,让我知道!

本页的目的是检索动物名称列表(帖子没有日期,帖子没有摘录,只有动物的名称),所以按字母顺序将是最有用的。

谢谢

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

正如我所说,永远不要使用query_posts. 你在抄本中链接到的页面一文不值,完全错误。有关为什么不使用的其他信息query_posts, 检查my answer here 答案是@Rarst.

你还有一个问题,category_namenot 接受类别名称作为值,但slug. 此参数的命名约定错误。get_the_title() 返回页面名称/标题,而不是slug。如果页面的标题只有一个单词,但没有特殊字符,则查询可能会起作用WP_Tax_Query 类可能会将其与slug匹配,但如果页面名称有特殊字符或有多个单词,则会失败。

您需要的是获取页面slug,它将作为类别slug传递给category_name 为此,需要获取查询的对象,然后返回$post_name 所有物同样,命名约定是完全错误的。$post_name 保存页面的slug,而不是名称。

在订购时,您需要设置orderby 参数到titleorderASC 从a-z而非默认顺序排序z-a

总而言之,您的查询如下所示:(NOTE: 至少需要PHP 5.4)

$args = [
    \'category_name\' => get_queried_object()->post_name,
    \'order\'         => \'ASC\',
    \'orderby\'       => \'title\' // Can use \'name\' as well, see https://codex.wordpress.org/Class_Reference/WP_Query#Order_.26_Orderby_Parameters
    // Add any extra parameters you need
];
$q = new WP_Query( $args ); 

// Run the loop
if ( $q->have_posts() ) {
    while ( $q->have_posts() ) {
    $q->the_post();

        // Display what you need from the loop like title, content etc

    }
    wp_reset_postdata();
}
您也可以尝试使用以下内容this 您可以在页面上选择发布页面时要显示的类别,还可以选择排序和其他一些功能。

SO网友:pwbred

您需要仔细查看query\\u帖子,并按照标题对帖子进行排序,如page that you linked to.

您需要更改此选项:

<?php query_posts(\'category_name=\'.get_the_title().\'&post_status=publish\');?>
并添加以下内容:

<?php query_posts(\'category_name=\'.get_the_title().\'&post_status=publish&orderby=title\');?>
正如其他人指出的那样,在这种情况下,您真的应该使用WP\\u查询。查看参考资料,因为许多选项都解释得非常清楚:Class Reference/WP Query