WordPress-Benutzerrollen erweitern: Theme-Optionen für Redakteure

UserRoles_WordPress_1

Neulich habe ich für eine Freundin ein Blog aufgesetzt, und ich wollte ihr keine administrativen Rechte geben, also habe ich ihr die Rolle Redakteur zugewiesen. Freilich soll sie das Aussehen ändern können. Es ist schließlich ihre Seite, nicht meine.

In der Standardkonfiguration erlaubt WordPress Redakteuren keine Themeänderungen, deshalb habe ich diese Rolle ändern müssen.

Rollen und Rechte in WordPress

Was Benutzer tun dürfen, hängt von ihrer Rolle ab. Jede Rolle ist ein Name für eine Gruppe von Rechten.

Die Rolle Administrator hat die Rechte delete_users, update_core, edit_theme_options und viele andere.

Die Rolle Redakteur hat nicht das Recht edit_theme_options, daher dürfen Redakteure keine Theme-Optionen ändern.

Jede Rolle hat das Recht exist. Sehr freundlich von WordPress, oder?

Rollen sind nicht hierarchisch, sie funktionieren eher wie Taxonomien: Wir können jedem Benutzer mehrere Rollen zuweisen. Dafür gibt es keine visuelle Oberfläche, technisch ist es jedoch möglich. Wir können auch neue Rollen und Rechte anlegen, beispielsweise edit_pending_posts; und wir können bestehende Rollen auch entfernen.

Rollen und Rechte werden in der Optionstabelle gespeichert, im Eintrag $wpdb->prefix . 'user_roles'.

Es gibt auch eine nette Codex-Seite zum Thema: Roles and Capabilities.

Was ein Benutzer sehen und ändern kann, wird im Code mit einer Kontrolle auf current_user_can( $capability ) entschieden.

Wenn current_user_can( 'edit_theme_options' ) ein TRUE zurückgibt, zeigt WordPress die Theme-Optionen.
Und wenn current_user_can( 'install_themes' ) zu TRUE evaluiert, zeigt WordPress die Option zum Installieren neuer Themes.

Das Plugin

Meine Freundin hat die Rolle Redakteur, und ich habe mich dafür entschieden, diese Rolle um das Recht edit_theme_options zu erweitern. Es gibt bereits viele Plugins zum Verwalten von Nutzerrollen, aber alle haben irgendwelche Nebeneffekte. Ich habe noch keines ohne Bugs gesehen.

Da die Änderung permanent ist, muss das Plugin nur einmal laufen und kann deaktiviert werden, nachdem es den Datenbankeintrag für diese Rolle geändert hat.

Diese Änderung vollziehe ich während der Pluginaktivierung mit Hilfe der Funktion register_activation_hook().

Jetzt zur Deaktivierung. Ich könnte das Plugin stillschweigend deaktivieren, finde es aber besser, wenn ich dem Nutzer erkläre, was gerade passiert und warum das Plugin nicht in der Liste der aktiven Plugins auftaucht.

Und das war es schon. Redakteure können jetzt das Aussehen der Website anpassen, Widgets und Menüs hinzufügen, die Kopfzeile und den Hintergrund ändern und den Customizer benutzen.

Ihr bekommt den Quellcode als komplettes Plugin in unserem taufrischen Repository Mini Plugins, oder ihr ladet das ZIP-Archiv herunter: Theme options for editors.

Beitrag teilen

Author Avatar

Ich bin Entwickler und Autor für MarketPress. In meiner Freizeit moderiere ich mehrere WordPress-Communities.

Auch interessant:

woonews19

WooCommerce Wochenrückblick #19: Google Analytics, kostenlose Themes und neue Kennzeichnungspflicht

von Michael Firnkes

Die Shop-Analyse ist wichtig, muss aber rechtlich abgesichert werden. Für WooCommerce gibt es neue Theme-Inspirationen und ein neues German Market. Dies u ...

Weiterlesen
woocommerce-themes-rabatt

Aktion: 20% Sommer-Rabatt auf unsere WooCommerce-Themes

von Michael Firnkes

Es wird Sommer, und da solltest du eigentlich nicht vor dem Rechner sitzen. Aber du kannst ab morgen bis Sonntag sparen: Mit 20 Prozent Discount auf unsere ...

Weiterlesen
slack-blog

Neues Plugin: Slack Connector - Verbinde WordPress, WooCommerce und Slack

von Michael Firnkes

Anfangs wollten wir lediglich unsere eigenen Slack-Prozesse optimieren. Mit automatisierten Benachrichtigungen aus dem MarketPress-Shop, dem Blog und unser ...

Weiterlesen
woo26

WooCommerce 2.6: Deutlich mehr Versandoptionen, bessere Bestellübersicht

von Michael Firnkes

WooCommerce 2.6 "Zipping Zebra" steht kurz vor der Veröffentlichung, das Release ist für kommenden Dienstag geplant. Wir zeigen dir, was sich für dich ...

Weiterlesen

Kommentare

31 Kommentare

  1. #1

    Grundsätzlich gefällt mir die hier gezeigte Lösung sehr gut 🙂

    Problem bei vielen Projekten ist nur:
    Man möchte nicht die ganze Berechtigung “edit_theme_options” an Redakteure/ Editors geben, sondern oft nur für Widgets und Menüs und alles andere weiterhin “gesperrt” lassen. Leider sind die Core-Entwickler seit Jahren uneinsichtig, mal eine Cap für Menüs und eine für Widgets reinzubringen. Was daran so schwer sein soll, verstehe ich seit Jahren nicht.

    Der gewöhnliche Redakteur braucht in aller Regel ab und an Menü-Zugriff und manchmal eine Handvoll Widgets, das ist alles. Rumbasteleien im Customizer sind nur für die erfahrenen Hände gewünscht… Ich möchte nicht, das meine Kunden ihr – eigenes – Design ständig “zerschiessen” und damit sich und mir mehr Arbeit bereiten…

    Ich weiß inzwischen, wie ich das hinbekomme, dennoch, die Hoffnung auf eine native Core-Lösung stirbt zuletzt… 🙂

  2. #2

    @David

    Ich weiß inzwischen, wie ich das hinbekomme

    Interessant, ist das irgendwo zu lesen? *freu*

  3. #3

    Man kann einzelne Menüpunkte separat rollenabhängig wegfiltern. Ich sehe eigentlich keinen Anlass, dazu noch mehr zusätzliche Hooks in den Core einzubauen. Das wird selten so granular gebraucht, und wenn doch mal sein muss, geht es jetzt schon.

  4. #4

    Würde eher ein

    bzw.

    benutzen, das

    enthält. Das macht mehr Sinn.

  5. #5

    @David Decker: Du kannst in Kombination mit dem

    dann noch sowas wie

    verwenden, dann kann der Redakteuer nur noch das Menü o.ä. ändern.

  6. #7

    Hi Thomas
    Besten Dank für das tolle Script. Genau das habe ich gesucht, um einem Kunden die Möglichkeit zu geben, das Menu ebenfalls als Redaktor zu bearbeiten. Ich habe dazu noch das PlugIn WP Admin UI Customize implementiert. Mit diesem lassen sich alle «überflüssigen» Berechtigungen auf Redaktor-Ebene entfernen.
    Liebe Grüsse
    Werner

  7. #8

    Hallo Thomas,

    das ist genau das, was ich benötige.

    Jetzt ist es so, dass meine Kundin das Menü usw. bearbeiten kann, die Änderungen am eigentlichen Theme (Mercina) aber nicht. Sie sieht die Einstellungen und kann sie verändern, aber beim Speichern kommt eine Fehlermeldung.

    Hast du da eine Idee?

  8. #10

    Hi,
    ich habe dir einen Screenshot gemacht:

    https://www.dropbox.com/s/f8mdes6cpabrtj2/wp-admin_admin_php_page-theme_options.jpg

    Aber damit wirst du nicht viel anfangen können oder? 😀

  9. #11

    Tatsächlich sagt mir der Screenshot, dass das Theme kaputt ist. 🙂

    Themeoption-Seiten gehören unter den Punkt Design, dort müssen sie mit der passenden Abfrage der Nutzerrechte eingebaut werden. Wenn der Themeautor das repariert, funktioniert auch mein Plugin.

  10. #12

    Danke Thomas,

    das hilft mir sehr weiter. Aber das Theme kaputt? Ich glaube, es ist vom Autor so gewollt…

    Schönen Abend.

    Nicole

  11. #13

    Nur wenige Autoren wissen, wie man ein Theme richtig schreibt. Dann wollen sie oft das Falsche. Dein Screenshot deutet beispielsweise an, dass das Theme selbst einen Custom Post Type portfolio registriert und ein Kontaktformular mitbringt. Wenn das stimmt, ist es inkompatibel mit vielen Plugins. So etwas käme bei uns nicht einmal durch den ersten groben Review.

  12. #14

    Hallo Thomas,
    ich arbeite noch nicht sehr lange mit den Themes von WordPress und möchte gern mehr darüber wissen. Was heißt denn “richtig”?

    Für mich als Template-Laie sah das Template auf den ersten Blick “ganz ordentlich” aus. Aber es ist schon bezeichnend, wenn das erste installierte Plugin – deins – schon nicht das macht, was es soll. *hmpf*

    Hast du zwei drei Tipps für mich, auf die ich das nächste Mal achten sollte?

    LG Nicole

  13. #15

    Das Plugin Theme-Check lässt ein paar rudimentäre Tests laufen. Ich stimme nicht allen zu, und in anderen Punkten geht es mir nicht weit genug. Aber für einen groben Überblick ist es schon ganz gut.

    Dann ist Where to put my code: plugin or functions.php? noch eine Lektüre wert, das verlangt freilich, dass man sich in den Code einliest und ihn auch versteht. Der Quellcode vieler Themes macht das manchmal recht schwer.

    Was im Detail in ein Theme gehört und was in ein Plugin – darüber könnte ich ein Buch schreiben.

  14. #16

    Danke für die Links.

    Das Buch ist doch eine hervorragende Idee… ;-D.

  15. #17

    @Webmasta: Die Idee das Plugin aktiv zu lassen und bei Deaktivierung/Uninstall die Capability wieder zu entfernen, halte ich für eine sehr gute Idee!

    Bei dem Entfernen der Unterseiten wäre mir das zu unsicher. Die Seiten sind doch dann trotzdem noch erreichbar, also nur ausgeblendet, oder? Wer also die URL kennt/errät, kommt trotzdem an die Einstellungen ran …

    • #18

      Ein Plugin weiß beim Deinstallieren nicht, ob eine Capability von ihm selbst oder von anderem Code erstellt wurde. Schließlich gibt es genug Leute, die etliche ähnliche Plugins nacheinander oder zugleich durchprobieren. Insofern würde ich das ohne Rückfrage (also UI) lieber nicht machen.

  16. #19

    Hallo Thomas,

    danke für dieses Plugin, eine tolle Sache!
    Eine Frage stellt sich mir aber noch (auf die Gefahr hin daß ich total auf dem Schlauch stehe): wie kann ich das rückgängig machen? Z.B. wenn ein Kunde das Feature doch nicht benötigt?

    Beste Grüße,
    Lars

  17. #21

    Hallo,

    gibt es eine Möglichkeit, den Benutzern, die sich neu registrieren, gleich automatisch durch das System die Rolle als Autor zuzuweisen?

    Vielen Dank für die Antwort.

    Ricco

  18. #23

    Guten Abend

    Sehr interessante Lektüre auch für einen Laien.

    Ich habe ein Theme sowie User Pro für die Fronten-Userverwaltung gekauft.
    Ich konnte das Menü “Registrieren” installieren. Wenn sich ein User registriert, muss ich ihn freischalten und gebe ihm dabei die Rolle “Author”.

    Wenn sich der User dann auf WP-Seite einloggt. Kann er Beiträge erstellen und sein Profil ändern, er hat aber aus irgend einem Grund auf Zugriff auf das Menü Optionen, was er gemäss WP-Rollenzuteilungen eigentlich nicht haben sollte.

    Ich habe obigen Artikel gelesen und im functions.php nach Rollen gesucht.

    Was ich aus obigen Erläuterungen nicht sehe und leider auch nicht weiss, wo im Menü man dies vornimmt.

    Danke im Voraus für die Antwort und die Unterstützung.

    Macht Ihr dies allenfalls auch als Auftragsarbeit?

    Danke und Grüsse

    Matthias

    • #24

      Hallo Matthias,

      ich kenne weder das Theme noch das Plugin, daher kann ich hier keine spezifische Antwort geben. Du solltest im Theme nach current_user_can() suchen, oder nach add_menu_page() oder nach add_theme_page(). In den beiden letztgenannten Funktionen kann man auch Capabilities angeben.

      Solch kleine Aufträge übernehmen wir eher selten, dafür findest du aber sicher jemanden.

  19. #25

    hallo thomas,
    vielen dank für den beitrag zum thema user roles. in diesem zusammenhang habe ich eine frage – geht aber nicht wirklich in richtung theme-anpassung, sondern eher in die bearbeitung einzelner bereiche in einer seite oder einem beitrag. wenn man für ein kundenprojekt inhalte per shortcode in eine seite integriert (nextgen zum beispiel o.ä.), dann besteht ja immer die gefahr, dass ein nutzer – der die passenden rechte hat (und auch haben soll) – die seite bearbeitet und somit den shortcode anpasst oder schlimmstenfalls weglöscht, obwohl der eigentlich nur den einfachen text darunter editieren können soll. gibt es eine möglichkeit, einen nutzer als editor auf eine seite loszulassen, aber bestimmte bereiche der seite eben schützen kann und nicht für diesen nutzer editierbar macht, damit der die inhalte nicht zerschiesst?
    danke und viele grüße
    andreas

    • #26

      Nein, das geht so nicht. Wenn der geschützte Inhalt nur vor oder nach dem Hauptinhalt stehen soll, würde ich diesen in eine Metabox packen, deren Inhalt in einem Postmetafeld gespeichert wird. Diese Box zeigt man dann den eingeschränkten Nutzern gar nicht erst an. Ihren Inhalt packt man per Filter auf the_content bei der Ausgabe wieder dazu.

  20. #27

    Hallo,
    ist dieses Plugin kompatibel mit der aktuellen WP 4.2.2 Version?

    Danke.

  21. #29

    Hallo Thomas,

    danke, funktioniert einwandfrei für Redakteure!

    Es wäre nicht schlecht, wenn es eine Option unter “Plugins” geben würde, mit der man es aktivieren und deaktivieren könnte. Es steht nämlich dauerhaft auf “Disable” obwohl es ja eigentlich aktiv ist.

    Ansonsten macht es was es soll 😉

    • #30

      Es ist eigentlich nicht aktiv. Es ändert beim Aktivieren einmalig einen Wert in der Datenbank. Beim nächsten Request gibt es aber keinen Weg herauszufinden, ob dieser Wert von diesem Plugin geändert wurde oder von einem anderen, deshalb tut es beim Deaktivieren auch nichts und wird daher sofort wieder abgeschaltet. Du kannst es auch löschen; die Rollen bleiben mit den erweiterten Rechten erhalten.

Ein Pingback

  1. Erweiterte Rolen für Wordpress - Netzlogbuch

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">