Rollen-Dropdown-Auswahl in alphabetischer Reihenfolge im Dashboard

7

Die Site, an der ich arbeite, wird über ein Mitglieder-Plugin eine sehr große Anzahl eindeutiger Benutzerrollen haben. Aus diesem Grund möchte ich, dass die Dropdown-Auswahl Rolle auf der Seite Neuen Benutzer hinzufügen die Rollen alphabetisch anzeigt und nicht in absteigender Reihenfolge der Erstellung.

Gibt es eine Möglichkeit, dies zu tun?

Chirico
quelle

Antworten:

7

Fast der gleiche Ansatz, den One Trick Pony gewählt hat, aber ich verwende übersetzte Namen und uasort()(um die Schlüssel zu erhalten):

add_filter( 'editable_roles', 't5_sort_editable_roles' );

/**
 * Array of roles.
 *
 * @wp-hook editable_roles
 * @param   array $roles
 * @return  array
 */
function t5_sort_editable_roles( $roles )
{
    uasort( $roles, 't5_uasort_editable_roles' );
    return $roles;
}
/**
 * Compare translated role names.
 *
 * @param  array $a First role
 * @param  array $b Second role
 * @return number
 */
function t5_uasort_editable_roles( $a, $b )
{
    return strcasecmp(
        translate_user_role( $a['name'] ),
        translate_user_role( $b['name'] )
    );
}

Als Plugin auf GitHub .

Fuxia
quelle
@Chirico Siehe mein Update, die erste Version war fehlerhaft.
Fuxia
Nochmals vielen Dank, ich habe gerade Probleme mit der ersten Version. Es sieht so aus, als wären die Dinge so, wie sie jetzt sein sollten.
Chirico
3

Anscheinend gibt es einen Filter, den Sie in der get_editable_rolesFunktion verwenden können (die auf dieser Seite aufgerufen wird):

add_filter('editable_roles', function($roles){

  // sort alphabetically (ignores case)
  usort($roles, function($a, $b){
    return strcasecmp($a["name"], $b["name"]);
  });   

  return $roles;
});
Onetrickpony
quelle