WordPress不按自定义字段排序

时间:2018-03-18 作者:iwillbeawebdeveloper

我试图在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

1 个回复
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

结束