我使用下面的代码根据分类法按名称排序,然后列出每个分类法中的帖子。
第一个查询可以按字母顺序列出分类法。
我遇到的问题是,每个分类法中的帖子都没有按字母顺序列出。有什么想法吗?
<ul style="margin: 10px 25px 45px 25px !important;">
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php
//if (false == ($content = get_transient(\'os_travel_cache\'))){
// ob_start();
$taxonomies = array(
\'tax_one\' => \'Taxonomy1\',
\'tax_two\' => \'Taxonomy2\',
\'tax_three\' => \'Taxonomy3\',
);
foreach($taxonomies as $taxonomy => $title) {
// start div... cor column..
?>
<li>
<div><h6><?php echo $title; ?></h6></div>
<?php
$terms = get_terms( $taxonomy,
array(
\'orderby\' => \'name\',
\'order\' => \'ASC\',
\'hide_empty\' => true ) );
if (!is_wp_error($terms) && is_array($terms) && count($terms) > 0){
foreach($terms as $term){
$args = array(
\'post_type\' => \'os_book\',
\'tax_query\' => array(
array(
\'taxonomy\' => $term->taxonomy,
\'field\' => \'id\',
\'terms\' => $term->term_id
)
)
);
?>
<div class="term_container">
<div class="handler"><span id="ashplus"> + </span><?php echo $term->name; ?></div>
<div>
<ul class="list">
<?php
$rp = new WP_Query( $args );
if ($rp->have_posts())
while ( $rp->have_posts() ) {
$rp->the_post();
$name = get_field(\'fl_profile_name\');
$location = get_post_meta(get_the_id(), \'fl_country\', true);
?>
<li data-location="<?php echo $location; ?>"><a href="<?php the_permalink();?>"><?php echo $name; ?></a></li>
<?php
}
?>
</ul>
</div>
</div>
<?php
}
}
?>
</li>
<?php
}
// $content = ob_get_contents();
// ob_end_clean();
// set_transient(\'os_travel_cache\', $content, 1);
// }
// echo $content;
?>
<?php endwhile;
endif; ?>
</ul>
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成
帖子不会按字母顺序排序,因为你不会告诉WordPress按这种方式排序。默认情况下,它们将按日期按后代顺序排序(最新优先)。
你应该做的是改变你的WP_Query
通过添加参数order
和orderby
, 所以应该是这样的:
$args = array(
\'post_type\' => \'os_book\',
\'orderby\' => \'title\',
\'order\' => \'ASC\',
\'tax_query\' => array(
array(
\'taxonomy\' => $term->taxonomy,
\'field\' => \'id\',
\'terms\' => $term->term_id
)
)
);
另外,你应该按
title
而不是
name
, 我想是吧。这两种方法的结果可能不同,按名称排序并不能在每种情况下都提供正确的字母顺序(即忽略重音)。
SO网友:user49521
我正在尝试使用下面的代码按分类法对自定义帖子进行排序,但它不起作用。它显示结果,但只是按照我在数据库中输入的顺序排序。非常感谢您的帮助。顺便说一句,我不是编码员。
$args = array(
\'post_type\' => \'staff\',
\'order_by\' => \'title\',
\'order\' => \'asc\',
\'posts_per_page\' => -1,
\'tax_query\' => array(
array(
\'taxonomy\' => \'department\',
\'field\' => \'slug\',
\'terms\' => \'staff\'
)
)
);