web-dev-qa-db-ja.com

Get_users()内のユーザーをカスタムの順序で並べ替える

<?php
$blogusers = get_users('include=5,6,2,7,12,8');
foreach ($blogusers as $user) {
...         
}
?>

今のところ、これらのユーザーはファーストネームでソートされます。

これを番号がinclude=...にある順に並べ替えるにはどうすればよいですか?

例:

ユーザー5が最初、ユーザー6が2、ユーザー2が3など.

3
nicolas

@Warfaceによる方法よりも簡単で速い方法があります。これは@SyHollowayの拡張です。

ここでの概念は、 get_users()includeを使用してusortパラメーターでget_users()からの結果をソートしてから結果の配列を返すことができる新しい関数でラップすることですincludeでソート

この関数は、fieldsパラメータが設定されているときに使用されるinclude引数を提供しません。 allが機能する唯一の値です。 fieldsが使用されているときに、includeパラメーターの他の値で機能するように関数を拡張することができます。それ以外の場合、includeが設定されていないと、fieldsパラメーターは通常どおりに機能します。

当然、orderbyorderは、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>';
}
3
Pieter Goosen

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 でもう少し

それは完全な解決策ではありませんが、あなたのやり方にあなたをうまく乗せるべきです。

0
Sy Holloway

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;

私はそれがデータベースを検索するたびにちょっとラメであることを知っています、しかしそれはうまくいきます。

0
Warface