web-dev-qa-db-fra.com

Interroger les utilisateurs par taxonomie personnalisée et rôle d'utilisateur

J'essaie de créer une requête pour les utilisateurs utilisant WP_User_Query(). Je dois filtrer les utilisateurs par rôle shop_manager et par une taxonomie personnalisée appelée shop-category et par l'ID du terme de taxonomie actuelle.

Le code que j'ai jusqu'à présent:

<?php 

// WP_User_Query arguments
$args = array (
    'role'           => 'shop_manager',
    'order'          => 'DESC',
    'orderby'        => 'user_registered',
    'tax_query' => array(
    array('taxonomy' => 
    'shop-category', 
    'field' => 'id', 
    'terms' => $term_id ) ) 
);

// The User Query
$user_query = new WP_User_Query( $args );

// The User Loop
if ( ! empty( $user_query->results ) ) {
    foreach ( $user_query->results as $user ) {
        echo '<li><span>' . esc_html( $user->shop_name ) . '</span></li>';
    }
} else {
    // no users found
}

?>

Pour obtenir le terme ID, j'utilisais ce code

<?php $queried_object = get_queried_object();
$term_id = $queried_object->term_id; 

echo 'ID = '. $term_id;?>

Maintenant, il montre tous les utilisateurs avec le rôle shop_manager. On dirait que la taxonomie ne fonctionne pas.

5
Erik

Apparemment, il n'y a pas encore d'implémentation principale de 'tax_query' dans WP_User_Query.

Vérifiez le billet ici pour plus d'informations -> https://core.trac.wordpress.org/ticket/31383

Néanmoins, il existe une autre façon d'utiliser get_objects_in_term

$taxonomy = 'shop-category';
$users = get_objects_in_term( $term_id, $taxonomy );    

if(!empty($users)){

    // WP_User_Query arguments
    $args = array (
        'role'           => 'shop_manager',
        'order'          => 'DESC',
        'orderby'        => 'user_registered',
        'include'        => $users
    );

    // The User Query
    $user_query = new WP_User_Query( $args );

    // The User Loop
    if ( ! empty( $user_query->results ) ) {
        foreach ( $user_query->results as $user ) {
            echo '<li><span>' . esc_html( $user->shop_name ) . '</span></li>';
        }
    } 
    else {
        // no shop_manager found 
    }
}
else {
    // no users found
}
4
RafaSashi

Il n'y a pas de paramètre tax_query pour la classe WP_User_Query. Puisque vous avez marqué la question avec user-meta, je ne peux que supposer que vous stockez la ID (ou même le nom du terme lui-même?) D'un terme shop-category particulier en tant que méta-entrée d'utilisateur.

Dans ce cas, vous auriez besoin de quelque chose comme ceci:

// The 'WP_User_Query' arguments array
$args = array(
    'role'          => 'shop_manager',
    'order'         => 'DESC',
    'orderby'       => 'user_registered',
    'meta_key'      => 'shop_name', // Is this the meta key you are using?
    'meta_value'    => 'the_term_name_or_term_id', // Based on however you store your meta data
    'meta_compare'  => '=',
);
2
webtoure