Advanced orderby with multiple meta_query

I tried everything I could to try sorting within the WordPress functions, but was unable to get what I wanted. I ended up following PieterGoosen’s advice and do a usort(). Here is what I have now:

WP_Query $args

$args = array (
        'post_type'              => array( 'member' ),
        'tax_query'              => array(
            array(
                    'taxonomy'   => 'group',
                    'field'      => 'slug',
                    'terms'      => 'town-board'
                ),
        ),
    );

Custom sort function

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;
        }
    }

Now, it sorts as I wanted Town Chairman > Supervisor 1 > 2 > 3 > 4

Thank you everyone for your suggestions.

Leave a Comment