我试图在WordPress循环中按自定义分类法排序,这是一种评级,但它不是按数字排序。如果我按“ASC”排序,那么它将把那些没有评级的放在顶部,否则就不能按“ASC”或“DESC”排序。
有什么想法吗?
$number = 1;
$args = array( \'posts_per_page\' => -1, \'orderby\'=> \'rating\', \'order\' => \'ASC\' );
$wpb_all_query = new WP_Query( $args );
while ( $wpb_all_query->have_posts() ) : $wpb_all_query->the_post();
if (has_term( \'Roast Dinner\', \'type\')) { ?>
<li><?php echo $number . \'. \'; $number++;?>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<span class="remove-link"><?php echo strip_tags(get_the_term_list( $post->ID, \'rating\', \'\' )); ?></span>
<span class="remove-link league-table-price hidden"><?php echo strip_tags(get_the_term_list( $post->ID, \'price\', \'\' )); ?></span>
<span class="remove-link league-table-priceincservice hidden"><?php echo strip_tags(get_the_term_list( $post->ID, \'priceincservice\', \'\' )); ?></span>
<span class="remove-link league-table-meat hidden"><?php echo strip_tags(get_the_term_list( $post->ID, \'meat\', \'\' )); ?></span>
<span class="remove-link league-table-tubeline hidden"><?php echo strip_tags(get_the_term_list( $post->ID, \'tubeline\', \'\' )); ?></span>
<span class="remove-link league-table-tubestation hidden"><?php echo strip_tags(get_the_term_list( $post->ID, \'tubestation\', \'\' )); ?></span>
<span class="remove-link league-table-areaoflondon hidden"><?php echo strip_tags(get_the_term_list( $post->ID, \'areaoflondon\', \'\' )); ?></span>
<span class="remove-link league-table-districtoflondon hidden"><?php echo strip_tags(get_the_term_list( $post->ID, \'districtoflondon\', \'\' )); ?></span>
<span class="remove-link league-table-zone hidden"><?php echo strip_tags(get_the_term_list( $post->ID, \'zone\', \'\' )); ?></span>
</li>
<?php } ?>
编辑-我确实尝试了中所示的解决方案
Orderby custom field for custome post type 但是,它提供了一个空白循环-无输出。
种类regardsJames
SO网友:Jacob Peattie
请阅读the documentation. \'rating\'
不是的有效值orderby
. 要按需要使用的自定义字段排序\'orderby\' => \'meta_value\'
或\'meta_value_num\'
.
请注意,查询中还必须存在“meta\\u key=keyname”。还请注意,排序将按字母顺序进行,这对于字符串(即单词)来说是很好的,但对于数字(例如1、3、34、4、56、6等,而不是您自然期望的1、3、4、6、34、56等)来说可能是意外的。对于数值,请使用“meta\\u value\\u num”。如果要将元值强制转换为特定类型,还可以指定“meta\\u type”。可能的值为“NUMERIC”、“BINARY”、“CHAR”、“DATE”、“DATETIME”、“DECIMAL”、“SIGNED”、“TIME”、“UNSIGNED”,与“$meta\\u query”中的值相同。
因此,您的查询将是:
$args = array(
\'posts_per_page\' => -1,
\'orderby\' => \'meta_value_num\',
\'meta_key\' => \'rating\',
\'order\' => \'ASC\'
);
请注意,此查询中将缺少没有评分的项目。要包含这些内容,请参阅前面关于该主题的问题和答案:
Orderby meta_value only returns posts that have existing meta_key