次の関数は、メタデータに基づいてユーザーのリストを表示します。
<?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
}
?>
市区町村をループに並べて配列することはできますか。このようなもの:
$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
}