按ASC或DESC以外的顺序对WP_QUERY结果进行排序

时间:2014-11-04 作者:sba222

我有一个带有自定义字段“language”的页面,可以是“EN”、“DE”或“FR”。

在分类页面上,我希望按照特定的顺序输出它们,例如,先是EN页,然后是FR页,然后是DE页。

似乎只能通过ASC或DESC对“语言”进行排序。是否有办法按照数组中提供的自定义顺序进行排序?

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

最好的选择是使用分类法。

如果EN、DE和FR是术语,那么您可以循环遍历它们,并以每个术语为基础获取页面。

您可以结合一个插件来实现这一点,该插件允许您手动重新排序此类术语。

https://wordpress.org/plugins/i-order-terms/

然后,您可以对代码执行以下操作:

// Get all of the terms in the taxonomy
$countries = get_terms( \'countries\' );

// Check to ensure there are results returned
if ( !empty( $countries ) && !is_wp_error( $countries ) ) {

    // Loop through the countries
    foreach($countries as $country) {

        $args = array(
            \'post_status\' => \'publish\',
            \'post_type\' => \'page\',
            \'countries\' => $country->slug,
        )

        // Get all of the pages that have this term
        $country_pages = new WP_Query($args);

        // If there are results then print out the country\'s title and then a list of pages for that country.
        if($country_pages->have_posts()) : ?>

            <h2><?php echo $country->name; ?></h2>

            <ul>

                <?php 
                while($country_pages->have_posts()) : $country_pages->the_post(); ?>

                    <li><?php the_title() ?></li>

                <?php endwhile; 
                // Ensure that the main query is reset
                wp_reset_postdata(); ?>

            </ul>

        <?php 
        endif; 

    }
}

结束

相关推荐

Orderby参数在自定义查询中不起作用

我有一个非常奇怪的问题,我正在更新的网站。。。我想做的就是让帖子按降序排列,而不是随机排列。我有下面的代码,但当您将其从“rand”更改为“desc”时,它只是默认按“asc”顺序拉入帖子。我不知道为什么。此外,如果将“orderby”更改为“order”,则默认为升序。。。我在主题中做了一个搜索,看看发生了什么,但根本没有列出的地方。。。有人能把我引向正确的方向吗? <?php $args= array( \'post_type\' => \'waiting-f