具有多个元查询的高级排序

时间:2016-05-26 作者:Champeau

我正在使用最新版本的WordPress。我已经浏览了关于wp\\U查询和meta\\U查询的法典。我还通读了以下内容:

https://make.wordpress.org/core/2015/03/30/query-improvements-in-wp-4-2-orderby-and-meta_query/

https://make.wordpress.org/core/2014/08/29/a-more-powerful-order-by-in-wordpress-4-0/

以下是我的$参数用于查询:

$args = array (
        \'post_type\'              => array( \'member\' ),
        \'tax_query\'              => array(
                array(
                    \'taxonomy\'   => \'group\',
                    \'field\'      => \'slug\',
                    \'terms\'      => array(\'town-board\'),
                    )
                ),
        \'meta_query\'             => array(
            \'relation\'           => \'OR\',
            \'chairman\' =>   array(
                    \'key\'        => \'_town-board_position\',
                    \'value\'      => \'Town Chairman\',
                    ),
            \'supervisor\' =>   array(
                    \'key\'        => \'_town-board_position\',
                    \'value\'      => \'Supervisor\',
                    \'compare\'    => \'LIKE\',
                    ),
                ),
        \'orderby\'                => array(
            \'supervisor\'         => \'ASC\',
            \'chairman\'           => \'DESC\',
            ),
    );
我已经修补了不同的orderby配置,但它似乎没有产生我想要的结果。

在上面的$args中,我首先列出了主席,但列出的是监事。主席,3号主管,2号主管,1号主管。

我想对其进行排序,使主席排在第一位,然后将主管1、主管2等按顺序列在主席下方。

我就是不知道该怎么办。。。

如有任何意见,将不胜感激。如果需要更多详细信息,请让我知道。

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

我尽我所能尝试在WordPress函数中排序,但无法得到我想要的。我最终听从了PieterGoosen的建议,做了一个usort()。以下是我现在拥有的:

WP\\U查询$参数

$args = array (
        \'post_type\'              => array( \'member\' ),
        \'tax_query\'              => array(
            array(
                    \'taxonomy\'   => \'group\',
                    \'field\'      => \'slug\',
                    \'terms\'      => \'town-board\'
                ),
        ),
    );
自定义排序功能

function custom_sort($a, $b) {
        if ( get_post_meta($a->ID, \'_town-board_position\', true) === \'Town Chairman\' ) {
            return -1;
        } else if ( strpos( get_post_meta($a->ID, \'_town-board_position\', true), \'Supervisor\' ) !== false and strpos( get_post_meta($b->ID, \'_town-board_position\', true), \'Supervisor\' ) !== false ) {
            return strcmp(get_post_meta($a->ID, \'_town-board_position\', true), get_post_meta($b->ID, \'_town-board_position\', true));
        } else {
            return 1;
        }
    }
现在,它按我想要的排序:镇主席>主管1>2>3>4

谢谢大家的建议。

相关推荐

sort items by randomness

我有一家电子商务商店。我是php和wordpress的新手。(虽然我有python和ruby的背景,但我不懂php)我有一个包含项目的页面。现在,最后20项显示在页面上(或类似的内容)。但我想显示的不是最后一个,而是这个类别中随机排列的项目。这是列出存档中的项目的代码。php文件:<?php echo category_description( get_category_by_slug(\'category-slug\')->term_id ); ?></div> &