web-dev-qa-db-fra.com

Commande avancée avec plusieurs méta_query

Je suis sur la dernière version de WordPress. J'ai parcouru le codex concernant wp_query et meta_query. J'ai aussi lu ces:

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/

Voici mes $ args pour la requête:

$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',
            ),
    );

J'ai bricolé avec différentes configurations orderby, mais cela ne semble pas produire les résultats souhaités.

Avec les arguments ci-dessus, le président apparaît en premier, mais les superviseurs sont énumérés à l'envers. Donc, ça va président, superviseur 3, superviseur 2, superviseur 1.

Je veux trier ceci de sorte que le président soit le premier, suivi du superviseur 1, du superviseur 2, etc., dans l'ordre indiqué sous le président.

Je n'arrive tout simplement pas à comprendre ce que je pense.

Toute entrée serait appréciée. Si plus de détails sont nécessaires s'il vous plaît faites le moi savoir.

2
Champeau

J'ai essayé tout ce que je pouvais pour essayer de trier dans les fonctions WordPress, mais j'étais incapable d'obtenir ce que je voulais. J'ai fini par suivre les conseils de PieterGoosen et faire un usort (). Voici ce que j'ai maintenant:

WP_Query $ args

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

Fonction de tri personnalisée

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

Maintenant, ça se passe comme je voulais Président de la ville> Superviseur 1> 2> 3> 4

Merci à tous pour vos suggestions.

0
Champeau