it-swarm.com.de

Sortieren Sie Benutzer in get_users () in benutzerdefinierter Reihenfolge

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

Im Moment werden diese Benutzer nach dem Vornamen sortiert.

Wie sortiere ich das in der Reihenfolge, in der die Zahlen in include=... sind?

Beispiel:

Erster Benutzer 5, zweiter Benutzer 6, dritter Benutzer 2 usw.

3
nicolas

Es gibt eine einfachere und schnellere Methode als die von @Warface. Dies ist eine Erweiterung von @SyHolloway

Das Konzept hier besteht darin, get_users() in eine neue Funktion einzufügen, in der Sie das Ergebnis von get_users() nach dem Parameter include mit usort sortieren und dann das resultierende Array sortiert nach include zurückgeben können.

Diese Funktion sieht nicht vor, dass das Argument fields verwendet wird, wenn der Parameter include festgelegt wurde. all ist der einzige Wert, der funktioniert. Sie können die Funktion so erweitern, dass sie mit den anderen Werten des Parameters fields funktioniert, wenn include verwendet wird. Andernfalls funktioniert der Parameter include wie gewohnt, wenn fields nicht festgelegt ist.

Natürlich funktionieren orderby und order nicht, wenn include verwendet wird

Diese neue Funktion funktioniert und wird genau wie get_users() verwendet, mit Ausnahme der oben genannten Regeln

Hier ist die Funktion

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

Sie können dies nun wie folgt in Ihrer Vorlage verwenden

$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 gibt ein Array von Objekten zurück.
Haben Sie versucht, 'orderby' als zusätzlichen Parameter zu verwenden? z.B

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

Jetzt wissen Sie, welche IDs in welcher Reihenfolge sind. Sie können einige Sortierfunktionen für PHP-Arrays verwenden

Auch noch ein paar mehr bei php maunual

Es ist keine Komplettlösung, sollte Sie aber gut auf den Weg bringen.

0
Sy Holloway

Da WP die in das include-Array eingefügte Array-Reihenfolge nicht berücksichtigt, habe ich ein kleines Skript erstellt, um dies zu erreichen.

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

Ich weiß, es ist ein bisschen lahm, jedes Mal die Datenbank abzufragen, aber hey, es funktioniert.

0
Warface