web-dev-qa-db-ja.com

Meta_keyとmeta_valueでユーザーを一覧表示する

次の関数は、メタデータに基づいてユーザーのリストを表示します。

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

} ?>

私はこのような関数を使っています。ここで、 "school_division"はmeta_key、 "Richmond"は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>

これは、Richmond学区のすべてのユーザーを正しくリストします。しかし、「Richmond」(meta_value)を指定する必要はありません。私は "school_division" meta_keyの各meta_valueを反復処理してから、関連するユーザーをリストしたいと思います。そのため、出力は次のようになります。

リッチモンド

  • ジェーン・ドウ
  • ジョン・ドウ

シカゴ

  • ジュリードゥー
  • ジム・ドウ
  • ジェフドゥ

ニューヨーク

  • ジョードゥー
  • ジェニードゥ

私は別のforeachループを追加する必要があると思います。しかし、それをすべて行うように関数を書き換える方法がわかりません。おそらく私が使っている関数はこの目的のために逆向きです。助けてくれてありがとう!

****** UPDATE *********

私は、おそらくもっと効率的な(?)いくつかの変更を加えたので、以下は私の最新のコードです。それは、その学区都市によってグループ化された、地域2のすべてのユーザーを返します。

<?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

市区町村をループに並べて配列することはできますか。このようなもの:

$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