Wie füge ich einer Benutzerrolle eine Funktion hinzu?

14

Ich verwalte ein Wordpress-Netzwerk und möchte der bereits vordefinierten Benutzerrolle des Administrators die Benutzerfunktion "unfiltered_html" hinzufügen. In einer Standardinstallation von Wordpress verfügt das Administratorkonto bereits über diese Funktion, in einer MU-Installation wird diese Funktion jedoch nur Super-Admins gewährt. Wordpress- Rollen und -Funktionen .

Wie kann ich die Administratorrolle innerhalb eines Themas oder Plugins erweitern?

Jonnybojangles
quelle
1
wordpress.org/extend/plugins/unfiltered-mu scheint zu helfen. Aber es funktioniert für Administratoren und Redakteure. Wenn das nicht gewünscht ist, kann der Code vielleicht ein wenig verändert werden?
Rev. Voodoo
@Rev. Voodoo Danke für den Vorschlag. Dies trug dazu bei zu dem Thema etwas Licht als Zugabe die Fähigkeit unfiltered_html nicht genug, um eine andere Rolle als Admin oder Super - Administrator die Möglichkeit, Post bettet zu ermöglichen, usw. Der Schlüssel war un - Filterung / Einhaken Wordpress KSES: kses_remove_filters ()
Jonnybojangles
Ein detaillierter Blog: goo.gl/xNuafH
Suresh Kamrushi

Antworten:

14

Sie können WP_Role Klasse verwenden,

// get the the role object
$role_object = get_role( $role_name );

// add $cap capability to this role object
$role_object->add_cap( $capability_name );

// remove $cap capability from this role object
$role_object->remove_cap( $capability_name );

Um Ihre ursprüngliche Frage zu beantworten, wie Admins SCRIPT- und IFRAME-Tags in Post-Content eingeben können, suchen Sie nach der Funktion "ungefiltert_html", die in Multisite nur Super-Admins gewährt wird.

// get the the role object
$admin_role = get_role( 'administrator' );
// grant the unfiltered_html capability
$admin_role->add_cap( 'unfiltered_html', true );

oder Sie können dies einmal in Ihren Funktionen ausführen:

/* Roles & Capabilities */
add_role('professional', 'Professional User', array(
    'read' => true, // True allows that capability, False specifically removes it.
    'edit_posts' => true,
    'delete_posts' => true,
    //'edit_published_posts' => true,
    //'publish_posts' => true,
    //'edit_files' => true,
    'upload_files' => true //last in array needs no comma!
));
Philip
quelle
Vielen Dank, Philip. Wann sollte in Bezug auf die WP_Role-Klasse der Code ausgeführt werden? Ich vermute, dies wirkt sich auf das globale Rollenobjekt aus. Ich bin froh, dass Sie den zweiten Codeblock aufgerufen haben, in dem erwähnt wurde, dass ich ihn einmal in meiner Funktionsdatei ausführen könnte. Ich habe in einigen Wordpress-Supportforen ähnliche Lösungen gefunden, finde es aber seltsam, einmal Code in einem Theme oder Plug-in ausgeführt zu haben. Insbesondere ohne eine Überprüfung, ob die Änderung bereits vorhanden ist. Vielleicht ist das Rollenschreiben tatsächlich vernachlässigbar. Um die Fähigkeit zu überprüfen, schreiben Sie einfach die Fähigkeit in die Rolle, wie Ihr erstes Beispiel zeigt.
Jonnybojangles
Ich bin auch daran interessiert, wie Sie die WP_Role-Klasse ausführen, wenn Sie einen Moment Zeit haben, uns dies mitzuteilen. Vielen Dank
Osu
1
@Jonnybojagles & @Osu, sehen Sie sich das an: Ultimate Guide to Roles & Capabilities garyc40.com/2010/04/ultimate-guide-to-roles-and-capabilities
Philip
Ich habe diesen Artikel in meinem Streben bereits gelesen, aber ich habe die Gelegenheit genutzt, alles noch einmal durchzugehen, danke! Nachdem ich das ungefilterte mu-Plugin (oben von Rev. Voodoo erwähnt) analysiert hatte, stellte ich schließlich fest, dass ein Rollenwechsel durch Hinzufügen von Funktionen nicht ausreicht. Ich musste die KSES-Filter von Wordpress entfernen.
Jonnybojangles
Ich bevorzuge es, dem letzten Element in Arrays ein Komma hinzuzufügen. Auch wenn es irrelevant erscheint, da der Code nicht funktionieren muss oder Fehler verursacht werden, ist es hilfreich, wenn bei der Visualisierung von Änderungen eine Versionskontrolle verwendet wird. Sie würden nicht sehen, dass eine alte Zeile des Array-Elements gelöscht, neu hinzugefügt und als neu markiert wird, nur mit einem Komma als Ergänzung oder Änderung für diese Zeile. Es ist zwar wenig hilfreich, spart jedoch viel Zeit bei der Analyse von Änderungen.
Nyedidikeke
2

Damit eine andere Rolle als Super Admin oder Admin (abhängig davon, ob die Wordpress-Installation eine Netzwerk- / MU-Instanz ist oder nicht) einem Beitrag oder Kommentar ungefiltertes HTML hinzufügen kann, muss der KSES-Filter von Wordpress entfernt werden.

Überprüfen Sie, ob ein Benutzer eine bestimmte Funktion hat.

if ( current_user_can( 'unfiltered_html' ) ) {  }

Wenn ja, dann entfernen Sie KSES

kses_remove_filters();

Diese Funktionalität ist bereits in ungefiltert-mu integriert, sodass Administratoren und Redakteure ungefiltertes HTML hinzufügen können.

Jonnybojangles
quelle
Die Funktionalität ist auch in ein Plug-in-Register eingebunden und dessen Registrierung aufgehoben, damit die Logik nicht auf jeder WP-Instanz vorgeformt werden muss.
Jonnybojangles