web-dev-qa-db-fra.com

WP_User_Query

Pour une raison quelconque, lors d’une requête utilisateur avec un méta filtre, j’ai un utilisateur qui, lorsque je print_r, les résultats apparaissent deux fois dans la liste ...

J'ai vérifié la base de données, juste au cas où il semblerait y avoir des entrées en double mais il n'y a qu'une seule valeur pour l'utilisateur. De plus, sans la méta-requête, l'utilisateur n'apparaît qu'une seule fois.

Code:

$user_query = new WP_User_Query( 
    array(
        'role'       => 'member',
        'orderby'    => 'registered',
        'order'      => 'DESC',
        'meta_query' => array(
             array(
                 'key'   => 'onTrial',
                 'value' => '1',
             ),
        ),
    )
);
echo '<pre>';
print_r($user_query->results);
echo '</pre>';

Sorties (avec beaucoup d'autres):

[54] => WP_User Object
    (
        [data] => stdClass Object
            (
                [ID] => 10410
                [user_login] => [email protected]
                [user_pass] => $P$XXXXXXX
                [user_nicename] => XXXXXXX-XXXXXXX
                [user_email] => [email protected]
                [user_url] => 
                [user_registered] => 2016-02-15 10:52:57
                [user_activation_key] => 
                [user_status] => 0
                [display_name] => XXXXXXX XXXXXXX
            )

        [ID] => 10410
        [caps] => Array
            (
                [member] => 1
            )

        [cap_key] => wp_capabilities
        [roles] => Array
            (
                [0] => member
            )

        [allcaps] => Array
            (
                [read] => 
                [no_admin_bar] => 1
                [member] => 1
            )

        [filter] => 
    )

[55] => WP_User Object
    (
        [data] => stdClass Object
            (
                [ID] => 10410
                [user_login] => [email protected]
                [user_pass] => $P$XXXXXXX
                [user_nicename] => XXXXXXX-XXXXXXX
                [user_email] => [email protected]
                [user_url] => 
                [user_registered] => 2016-02-15 10:52:57
                [user_activation_key] => 
                [user_status] => 0
                [display_name] => XXXXXXX XXXXXXX
            )

        [ID] => 10410
        [caps] => Array
            (
                [member] => 1
            )

        [cap_key] => wp_capabilities
        [roles] => Array
            (
                [0] => member
            )

        [allcaps] => Array
            (
                [read] => 
                [no_admin_bar] => 1
                [member] => 1
            )

        [filter] => 
    )

Maintenant, je ne peux évidemment pas vous montrer les détails, mais notez l'ID et le temps d'enregistrement ainsi que les numéros de tableau dans lesquels ils apparaissent, [54] et [55]

Personne d'autre n'apparaît deux fois.

Merci d'avance - toute contribution appréciée, petite ou grande.

3
Bysander

Essayez ceci pour des coups de pied ...

Solution 1

Remarque: Ne fonctionne pas avec WP_User_Query (?)

add_filter('posts_distinct', 'user_meta_query_distinct');

//your query here...

remove_filter('posts_distinct', 'user_meta_query_distinct');

function user_meta_query_distinct() { 
    return "DISTINCT"; 
}

Solution 2

Pouvez-vous essayer d'ajouter 'relation' => 'OR' à votre meta_query:

$user_query = new WP_User_Query( 
    array(
        'role'       => 'member',
        'orderby'    => 'registered',
        'order'      => 'DESC',
        'meta_query' => array(
             'relation' => 'OR', //should result in a DISTINCT query
             array(
                 'key'   => 'onTrial',
                 'value' => '1',
             ),
        ),
    )
);

Voir ce diff:

https://core.trac.wordpress.org/attachment/ticket/17582/17582.4.diff

if ( 'OR' == $meta_query->relation ) { 
    $this->query_fields = 'DISTINCT ' . $this->query_fields; 
}

Dépisté avec la permission de ce billet trac .

Voyez si ça marche ...

3
userabuser