web-dev-qa-db-fra.com

Liste des utilisateurs par meta_key et meta_value

La fonction suivante affichera une liste d'utilisateurs en fonction de leurs métadonnées:

<?php function get_users_by_meta_data( $meta_key, $meta_value ) {

    $user_query = new WP_User_Query(
        array(
            'meta_key'    =>    $meta_key,
            'meta_value'    =>  $meta_value
        )
    );

    $users = $user_query->get_results();

    return $users;

} ?>

J'utilise la fonction comme celle-ci, où "school_division" est la méta_key et "Richmond" est la meta_value:

<h2>REGION 2</h2>
<ul>
    <?php foreach( get_users_by_meta_data( 'school_division', 'Richmond') as $user ) { ?>

        <li><?php echo $user->first_name; ?> <?php echo $user->last_name; ?></li>  

    <?php } ?>
</ul>

Ceci répertorie correctement tous les utilisateurs de la division scolaire de Richmond. Mais je ne veux pas avoir à spécifier "Richmond" (la meta_value). Je veux parcourir chaque méta_value dans la méta_key "school_division", puis répertorier les utilisateurs associés. Donc, le résultat serait quelque chose comme:

Richmond

  • Jane Doe
  • John Doe

Chicago

  • Julie Doe
  • Jim Doe
  • Jeff Doe

New York

  • Joe Doe
  • Jenny Doe

Je pense que je dois ajouter une autre boucle foreach. Mais je ne sais pas comment réécrire la fonction pour faire tout ça. Peut-être que la fonction que j'utilise est inversée à cette fin. Merci pour toute aide!

****** METTRE À JOUR *********

J'ai apporté des modifications qui sont, espérons-le, plus efficaces (?). Voici donc mon code mis à jour. Il renvoie tous les utilisateurs de la région 2, regroupés par ville de division scolaire.

<?php function get_users_by_meta_data( $region, $division ) {

$user_query = new WP_User_Query( 
    array(
        'meta_query'    => array(
            'relation'  => 'AND',
            array( 
                'key'     => 'REGION',
                'value'   => $region,
            ),
            array(
                'key'     => 'SCHOOL_DIVISION',
                'value'   => $division
            )
        )
    ) 
);

// Get the results from the query
    $users = $user_query->get_results();

    return $users;
}
?>

<h1> REGION 2</h2>
<?php 

$cities = $wpdb->get_col("SELECT DISTINCT meta_value FROM $wpdb->usermeta WHERE meta_key = 'SCHOOL_DIVISION'" );

foreach ( $cities as $city ) { ?>

    <h2><?php echo $city; ?></h2>
    <ul><?php
    foreach ( get_users_by_meta_data( '2', $city ) as $user ) { ?>
        <li><?php echo $user->first_name; ?> <?php echo $user->last_name; ?></li>  
    <?php } ?>
    </ul><?php
}
?>    
1
LBF

Qu'en est-il de mettre la ville/les régions/ce que vous voulez dans un tableau que vous pouvez parcourir? Quelque chose comme ça:

$cities = array( 'Richmond', 'Chicago', 'New York' );
foreach ( $cities as $city ) { ?>

    <h2><?php echo $city; ?></h2>
    <ul><?php
    foreach ( get_users_by_meta_data( 'school_division', $city ) as $user ) { ?>
        <li><?php echo $user->first_name; ?> <?php echo $user->last_name; ?></li>  
    <?php } ?>
    </ul><?php
}
0
butlerblog