<?php
$blogusers = get_users('include=5,6,2,7,12,8');
foreach ($blogusers as $user) {
...
}
?>
今のところ、これらのユーザーはファーストネームでソートされます。
これを番号がinclude=...
にある順に並べ替えるにはどうすればよいですか?
例:
ユーザー5が最初、ユーザー6が2、ユーザー2が3など.
@Warfaceによる方法よりも簡単で速い方法があります。これは@SyHollowayの拡張です。
ここでの概念は、 get_users()
をinclude
を使用してusort
パラメーターでget_users()
からの結果をソートしてから結果の配列を返すことができる新しい関数でラップすることですinclude
でソート
この関数は、fields
パラメータが設定されているときに使用されるinclude
引数を提供しません。 all
が機能する唯一の値です。 fields
が使用されているときに、include
パラメーターの他の値で機能するように関数を拡張することができます。それ以外の場合、include
が設定されていないと、fields
パラメーターは通常どおりに機能します。
当然、orderby
とorder
は、include
が使用されている場合は機能しません。
この新しい関数は、上記の規則を除いて、get_users()
とまったく同じように動作し、使用されます。
これが関数です
function get_users_by_include( $args = array() ) {
$blogusers = get_users( $args );
if( isset( $args['include'] ) ){
$include = $args['include'];
usort($blogusers, function ($a, $b) use( $include ){
$q = array_flip( $include );
return $q[$a->ID] - $q[$b->ID];
});
}
return $blogusers;
}
次のようにテンプレートでこれを使うことができます
$users = get_users_by_include(array( 'include' => array(2,5,1,10,45,32,66) ) );
foreach ( $users as $user ) {
echo $user->ID . '</br>';
}
Wordpressはオブジェクトの配列を返します。
追加のパラミッターとして 'orderby'を使用してみましたか?例えば
<?php
$blogusers = get_users('include=5,6,2,7,12,8&orderby=id');
foreach ($blogusers as $user) {
//This will loop in the order of id 2,5,6,7,12
}
?>
これで、どんなIDがどんな順序で並んでいるかがわかりました。いくつかのphp配列ソート関数を使うことができます。
また、 php maunual でもう少し
それは完全な解決策ではありませんが、あなたのやり方にあなたをうまく乗せるべきです。
WPはinclude
配列に挿入された配列の順序を尊重しないので、私はそれを達成するための小さなスクリプトを作りました。
$user_id = array(2,5,1,10,45,32,66);
foreach($user_id as $uid):
$user_query = get_users(array('role'=>'member', 'number' => 1,'include' => $uid));
echo $user_query[0]->ID // or display_name like you like...
endforeach;
私はそれがデータベースを検索するたびにちょっとラメであることを知っています、しかしそれはうまくいきます。