Heim > CMS-Tutorial > WordDrücken Sie > Mastering von WordPress -Rollen und -funktionen beherrschen

Mastering von WordPress -Rollen und -funktionen beherrschen

Christopher Nolan
Freigeben: 2025-02-16 11:49:08
Original
360 Leute haben es durchsucht

WordPress-Benutzerverwaltung: Eingehende Analyse von Rollen und Berechtigungen

Das Benutzerverwaltungssystem von

WordPress basiert auf Rollen und Berechtigungen. Eine Rolle ist ein Unternehmen, das einen eindeutigen Namen und eine Reihe von Berechtigungen enthält, von denen jedes den Zugang zu plattformspezifischen Merkmalen dieser Rolle definiert. Lassen Sie uns in die Arbeitsmechanismen von WordPress -Rollen und -Trägen eingraben.

Schlüsselpunkte

    Die Benutzerverwaltung von
  • WordPress basiert auf Rollen und Berechtigungen. Eine Rolle hat einen einzigartigen Namen und eine Reihe von Berechtigungen, die den Zugriff auf verschiedene Merkmale der Plattform durch eine Rolle definieren.
  • WordPress bietet eine umfassende API, um Rollen und ihre Berechtigungen anzupassen. Funktionen wie add_role(), remove_role(), add_cap() und remove_cap() können verwendet werden, um Rollen und Berechtigungen zu verwalten. Sie müssen jedoch bei Verwendung dieser Funktionen auf den Zugriff und die Leistung des Datenbanks achten.
  • Es gibt verschiedene Möglichkeiten, Datenbankprobleme im Umgang mit Rollen und Berechtigungen zu vermeiden. Eine Möglichkeit besteht darin, den Code nur auszulösen, wenn das Plugin aktiviert ist. Sie können die Funktion register_activation_hook() verwenden. Eine andere Möglichkeit besteht darin, die WordPress -Datenbank zu umgehen, indem die globale Variable $wp_user_roles festgelegt wird.

Zurück zum Szenen -Mechanismus

Rollenspeicher

Die Standardrolle und Berechtigungsliste finden Sie in WordPress Codex.

Die

-Datenbank speichert diese Liste in der Tabelle wp_options.

Es verwendet die serialisierte wp_user_roles -Taste.

Mastering WordPress Roles and Capabilities Die Deserialisierten sind wie folgt:

<code>array(
    'administrator' => array(
        'name'         => '管理员',
        'capabilities' => array(
            'switch_themes'          => true,
            'edit_themes'            => true,
            'activate_plugins'       => true,
            'edit_plugins'           => true,
            'edit_users'             => true,
            // [...]
        )
    ),
    'contributor' => array(
        'name'         => '投稿者',
        'capabilities' => array(
            'delete_pages'           => true,
            'delete_others_pages'    => true,
            'delete_published_pages' => true,
            'delete_posts'           => true,
            // [...]
        )
    ),
    // [...]
);</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Diese Metadaten werden automatisch festgelegt, wenn eine neue WordPress -Site installiert ist.

Wenn WordPress beginnt, lädt die

-Klasse die Liste aus der Datenbank. WP_Roles

Dies geschieht zwischen

und plugins_loaded Haken. init

Verknüpfung Benutzer mit der Rolle

WordPress verwendet

in der Tabelle wp_usermeta gespeichert, um Benutzer mit ihren Rollen zu verknüpfen. meta_key

Nach der Deserialisierung lautet die Metadaten wie folgt: Mastering WordPress Roles and Capabilities

<code>array(
    'administrator' => true
)</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Beachten Sie, dass WordPress Arrays verwendet, obwohl Benutzer jeweils nur eine Rolle spielen können. Wir werden später sehen, warum.

Denken Sie auch daran,

ist das Präfix des aktuellen Blogs. wp_

(Wir können es mit der Funktion

erhalten). $GLOBALS['wpdb']->get_blog_prefix()

In einer Installation mit mehreren Standorten können Benutzer in verschiedenen Instanzen unterschiedliche Rollen verwenden:

  • = & gt; wp_capabilities a:1:{s:13:"administrator";b:1;}
  • = & gt; wp_10_capabilities a:1:{s:11:"contributor";b:1;}
  • = & gt; wp_15_capabilities a:1:{s:10:"subscriber";b:1;}
  • [...]
Diese Regel gilt auch für den

-Intrag, den wir in der Tabelle wp_options gesehen haben. wp_user_roles

Schließlich können wir sowohl die wp_user_level Metadaten als auch die Rolle sehen.

Es wird verwendet, um mit Zeichen in älteren Versionen von WordPress umzugehen, und ist jetzt veraltet.

Verwenden Sie Berechtigungen im Kerncode

Wir haben gelernt, wie Rollen geladen und mit Benutzern verknüpft werden.

Einige Standardberechtigungen sind im WordPress -Kerncode festcodiert.

Wenn der Plugin -Bildschirm beispielsweise geladen ist, wird beispielsweise geprüft, ob der aktuelle Benutzer das Plugin verwalten kann, indem Sie den folgenden Code ausführen:

<code>array(
    'administrator' => array(
        'name'         => '管理员',
        'capabilities' => array(
            'switch_themes'          => true,
            'edit_themes'            => true,
            'activate_plugins'       => true,
            'edit_plugins'           => true,
            'edit_users'             => true,
            // [...]
        )
    ),
    'contributor' => array(
        'name'         => '投稿者',
        'capabilities' => array(
            'delete_pages'           => true,
            'delete_others_pages'    => true,
            'delete_published_pages' => true,
            'delete_posts'           => true,
            // [...]
        )
    ),
    // [...]
);</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Rollen sind niemals festcodiert.

Verwenden von Rollen und Berechtigungen: WordPress -API

Zugriff auf API

WordPress bietet die folgenden globalen Funktionen, mit denen wir mit Rollen umgehen können.

current_user_can()

Überprüfen Sie, ob der aktuelle Benutzer über die erforderlichen Berechtigungen verfügt.

<code>array(
    'administrator' => true
)</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

WP_User::has_cap

Überprüfen Sie, ob ein bestimmter Benutzer die Berechtigung verfügt.

<code>if (!current_user_can('activate_plugins'))
{
    wp_die(__('您没有足够的权限来管理此站点的插件。'));
}</code>
Nach dem Login kopieren
Nach dem Login kopieren

Wir können feststellen, dass current_user_can diese Funktion verwendet.

get_editable_roles()

kehrt zu bearbeitbaren Rollen zurück.

<code>add_action('init', function()
{
    if (current_user_can('install_plugins'))
    {
        echo '您可以安装插件';
    }
    else
    {
        echo '您不能安装插件';
    }
});</code>
Nach dem Login kopieren
Nach dem Login kopieren

Diese Liste kann durch editable_roles Filter überschrieben werden, daher sollten wir uns nicht auf diese Funktion verlassen, um die vollständige Liste der Rollen auf der Website zu erhalten.

Bitte beachten Sie die Verwendung des admin_init -Hakens, da die Funktion noch nicht in den init -Haken geladen wurde.

get_role()

Get WP_Role Objekt basierend auf seiner Schnecke.

<code>add_action('init', function()   
{
    $user = get_user_by('slug', 'admin');
    if ($user->has_cap('install_plugins'))
    {
        echo '管理员可以安装插件';
    }
    else
    {
        echo '管理员不能安装插件';
    }
});</code>
Nach dem Login kopieren
Nach dem Login kopieren

WP_Role::has_cap()

Überprüfen Sie, ob die Rolle die erforderlichen Berechtigungen hat.

<code>add_action('admin_init', function()
{
    $roles = get_editable_roles();
    var_dump($roles);
});</code>
Nach dem Login kopieren
Nach dem Login kopieren

benutzerdefinierte API

WordPress bietet auch eine vollständige API, um Rollen und ihre Berechtigungen anzupassen.

add_role()

Registrieren Sie eine neue Rolle in der Datenbank.

<code>add_action('init', function()
{
    $role = get_role('administrator');
    var_dump($role);
});

// 这将打印:
// WP_Role 对象
// (
//     [name] => administrator
//     [capabilities] => Array
//         (
//             [switch_themes] => 1
//             [edit_themes] => 1
//             [activate_plugins] => 1
//             [edit_plugins] => 1
//             [...]</code>
Nach dem Login kopieren
Nach dem Login kopieren

remove_role()

Wenn vorhanden, löschen Sie die erforderliche Rolle aus der Datenbank.

<code>add_action('init', function()
{
    $role = get_role('administrator');
    var_dump($role->has_cap('install_plugins')); // 打印 TRUE
});</code>
Nach dem Login kopieren
Nach dem Login kopieren

WP_Role::add_cap()

Berechtigungen zur Rolle hinzufügen.

<code>add_action('init', function()
{
    add_role('plugins_manager', '插件管理员', array(
        'install_plugins',
        'activate_plugins',
        'edit_plugins'
    ));
});</code>
Nach dem Login kopieren

Dies können Kernberechtigungen (install_plugins, edit_posts…) oder eine benutzerdefinierte Zeichenfolge (my_awesome_plugin_cap) sein.

Ermöglicht es uns, für unser Plugin so viele benutzerdefinierte Berechtigungen wie möglich zu registrieren.

WP_Role::remove_cap()

Wenn es existiert, löschen Sie Berechtigungen aus der Rolle.

<code>add_action('init', function()
{
    remove_role('plugins_manager');
});</code>
Nach dem Login kopieren

WP_User::add_role()

Fügen Sie einem bestimmten Benutzer Rollen hinzu.

<code>add_action('init', function()
{
    $role = get_role('contributor');
    $role->add_cap('install_plugins');
});</code>
Nach dem Login kopieren

Mit dieser Funktion können Sie theoretisch mehrere Rollen für denselben Benutzer festlegen.

Da das WordPress -Backend nur eine Rolle pro Benutzer anzeigt und verwaltet, sollten wir nicht mehrere Rollen für Benutzer hinzufügen und immer WP_User::remove_role() verwenden, bevor wir eine neue Rolle hinzufügen.

WP_User::remove_role()

Entfernen Sie die Rollen vom gegebenen Benutzer.

<code>add_action('init', function()
{
    $role = get_role('contributor');
    $role->remove_cap('install_plugins');
});</code>
Nach dem Login kopieren

WP_User::add_cap()

Berechtigungen zu einem bestimmten Benutzer hinzufügen.

<code>array(
    'administrator' => array(
        'name'         => '管理员',
        'capabilities' => array(
            'switch_themes'          => true,
            'edit_themes'            => true,
            'activate_plugins'       => true,
            'edit_plugins'           => true,
            'edit_users'             => true,
            // [...]
        )
    ),
    'contributor' => array(
        'name'         => '投稿者',
        'capabilities' => array(
            'delete_pages'           => true,
            'delete_others_pages'    => true,
            'delete_published_pages' => true,
            'delete_posts'           => true,
            // [...]
        )
    ),
    // [...]
);</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Mastering WordPress Roles and Capabilities Dies ist sehr nützlich, wenn wir dem Benutzer eine einzige Berechtigung hinzufügen möchten, ohne eine vollständige Rolle zu erstellen.

WP_User::remove_cap()

Berechtigungen vom gegebenen Benutzer entfernen.

<code>array(
    'administrator' => true
)</code>
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Einige Probleme mit WordPress API

Abgesehen von einer Frage sehen die Funktionen, die wir sehen, gut aus: Datenbankzugriff und Leistung.

worauf konzentrieren wir uns hauptsächlich beim Umgang mit Rollen und Berechtigungen, wenn sollte unser Code ausgelöst werden?

Um dies zu erklären, werfen wir einen Blick auf den WordPress -Kerncode.

Erstens möchten wir ein neues leeres Zeichen hinzufügen:

<code>if (!current_user_can('activate_plugins'))
{
    wp_die(__('您没有足够的权限来管理此站点的插件。'));
}</code>
Nach dem Login kopieren
Nach dem Login kopieren
Folgendes sind die ersten Zeilen der

-Funktion (tatsächlich um add_role umgeleitet): WP_Roles::add_role

<code>add_action('init', function()
{
    if (current_user_can('install_plugins'))
    {
        echo '您可以安装插件';
    }
    else
    {
        echo '您不能安装插件';
    }
});</code>
Nach dem Login kopieren
Nach dem Login kopieren
Wenn wir eine neue Rolle hinzufügen, läuft die

-Funktion einmal und macht dann nichts. add_role

Nehmen wir als nächstes an, wir möchten unserer neu erstellten Rolle Berechtigungen hinzufügen:

<code>add_action('init', function()   
{
    $user = get_user_by('slug', 'admin');
    if ($user->has_cap('install_plugins'))
    {
        echo '管理员可以安装插件';
    }
    else
    {
        echo '管理员不能安装插件';
    }
});</code>
Nach dem Login kopieren
Nach dem Login kopieren
Die

-Funktion in WordPress 4.2.2 lautet wie folgt: WP_Role::add_cap()

<code>add_action('admin_init', function()
{
    $roles = get_editable_roles();
    var_dump($roles);
});</code>
Nach dem Login kopieren
Nach dem Login kopieren
Es aktualisiert das

-Objekt, aber wir können auch sehen, dass die Datenbank jedes Mal aktualisiert wird, wenn unser Code ausgeführt wird, auch wenn unsere neuen Berechtigungen bereits registriert sind! $this->roles Dies bedeutet, dass, wenn wir uns um die Leistung kümmern, alle Code, die wir für benutzerdefinierte Rollen und Berechtigungen schreiben, nicht ausgeführt werden sollten, wenn jede Seite geladen wird.

Lösung

Es gibt verschiedene Möglichkeiten, diese Datenbankprobleme zu vermeiden.

mit Plug-in

aktivieren

WordPress ermöglicht Plugin -Autoren, die Funktion

zu verwenden, um Code zu auslösen, wenn das Plugin im Backend aktiviert ist.

Erstellen wir ein Beispiel -Plugin: register_activation_hook()

Dieser Code wird nur einmal ausgeführt, wenn das Plugin auf der Website aktiviert ist.

<code>add_action('init', function()
{
    $role = get_role('administrator');
    var_dump($role);
});

// 这将打印:
// WP_Role 对象
// (
//     [name] => administrator
//     [capabilities] => Array
//         (
//             [switch_themes] => 1
//             [edit_themes] => 1
//             [activate_plugins] => 1
//             [edit_plugins] => 1
//             [...]</code>
Nach dem Login kopieren
Nach dem Login kopieren
Jetzt müssen wir uns daran erinnern, dass diese Lösung von der Aktivierung und Deaktivierung des Plugins abhängt.

Was passiert, wenn sich das Plugin bereits in der Produktion befindet oder wenn das Reaktivieren beim Drücken des Updates weggelassen wird?

In der Tat stützt sich diese Lösung auch auf der Datenbank und erfordert einen zusätzlichen Schritt, wenn Sie den Code drücken.

WordPress -Datenbank bypass

Es gibt auch eine unbekannte Lösung, die in einigen Fällen gut funktioniert.

Schauen wir uns den WordPress -Kerncode am Ende an, wenn das Objekt

die Rolle aus der Datenbank lädt, wenn WordPress startet:

WP_Roles WordPress prüft die

globale Variablen, bevor Daten aus der Datenbank abgerufen werden.
<code>add_action('init', function()
{
    $role = get_role('administrator');
    var_dump($role->has_cap('install_plugins')); // 打印 TRUE
});</code>
Nach dem Login kopieren
Nach dem Login kopieren

Wenn WordPress festgelegt ist, verwendet WordPress den Inhalt und blockiert die Datenbankverwendung, indem die $wp_user_roles -Variable auf False festgelegt wird.

Probieren wir es aus und führen Sie nur eine neue, eingeschränkte Administratorrolle: $this->use_db

Beim Laden des Backends können wir sehen, dass es die Definition unserer benutzerdefinierten Rolle behält:

Mastering WordPress Roles and Capabilities Diese Lösung löst das Datenbankproblem, kann jedoch einige andere Probleme einführen:

  • Plugins mit nativen APIs funktionieren möglicherweise nicht ordnungsgemäß.
  • Wir müssen die Definition jeder Rolle manuell festlegen, selbst für die Rolle, die wir nicht ändern wollen.

Dies kann jedoch eine praktikable Lösung beim Erstellen einer benutzerdefinierten WordPress -Anwendung sein, die eine benutzerdefinierte Liste statischer Rollen erfordert:

  • Rollendefinitionen können mit dem Code versioniert werden.
  • Neuen Code in die Umgebung aktualisieren automatisch die Definition.
  • Sie müssen keine Datenbankprobleme mehr berücksichtigen.

Schlussfolgerung

In diesem Artikel stelle ich einen Überblick über Rollen und Berechtigungen in WordPress ein.

Obwohl die vollständige API es uns ermöglicht, fast alles zu tun, was wir wollen, sind Beziehungen zu Datenbanken immer noch das Hauptproblem.

Wir müssen dies bei der Entwicklung unserer Plugins und Themen berücksichtigen.

Was denkst du über die Art und Weise, wie WordPress Rollen verwaltet? Ich freue mich auf Ihr Feedback!

häufig gestellte Fragen zur Meisterung von WordPress -Rollen und -Trägen

Was spielt die Standardbenutzerrolle in WordPress? Was sind ihre Berechtigungen?

WordPress hat sechs Standardbenutzerrollen: Super Administrator, Administrator, Herausgeber, Autor, Mitwirkender und Abonnent. Jede Rolle hat einen bestimmten Satz von Berechtigungen. Beispielsweise kann ein Superadministrator auf alle administrativen Funktionen mehrerer Websites zugreifen. Administratoren können alle Verwaltungsaufgaben auf einer einzelnen Site ausführen. Redakteure können Beiträge veröffentlichen und verwalten, einschließlich der anderen Benutzer. Autoren können ihre eigenen Beiträge posten und verwalten. Mitwirkende können ihre eigenen Beiträge schreiben und verwalten, aber sie können nicht veröffentlicht werden. Abonnenten können ihr Profil nur verwalten.

Wie füge ich neue Benutzerrollen in WordPress hinzu?

add_role() Um eine neue Benutzerrolle in WordPress hinzuzufügen, können Sie die Funktion

verwenden. Diese Funktion akzeptiert drei Parameter: Rolle, Anzeigename und Berechtigungsarray. Um beispielsweise eine neue Rolle namens "Custom_Role" hinzuzufügen und die Erlaubnis zum Lesen und Bearbeiten von Beiträgen zu haben, können Sie den folgenden Code verwenden:

add_role( 'custom_role', __('自定义角色'), array( 'read' => true, // 可以读取帖子 'edit_posts' => true, // 可以编辑帖子 ) );

Wie lösche ich Benutzerrollen in WordPress?

remove_role() Um eine Benutzerrolle in WordPress zu löschen, können Sie die Funktion

verwenden. Diese Funktion akzeptiert einen Parameter: Rolle. Um beispielsweise das zuvor hinzugefügte "Custom_Role" zu löschen, können Sie den folgenden Code verwenden:

remove_role('custom_role');

Wie füge ich Benutzerrollen in WordPress Berechtigungen hinzu?

add_cap() Um Benutzerrollen in WordPress Berechtigungen hinzuzufügen, können Sie die Funktion

verwenden. Diese Funktion akzeptiert zwei Parameter: Erlaubnis und einen Booleschen Wert, der angibt, ob die Rolle die Genehmigung hat. Um beispielsweise "Publish_Posts" zu "Custom_Role" hinzuzufügen, können Sie den folgenden Code verwenden:

$role = get_role('custom_role'); $role->add_cap('publish_posts', true);

Wie entfernen Sie Berechtigungen von Benutzerrollen in WordPress?

Um Berechtigungen von Benutzerrollen in WordPress zu entfernen, können Sie die Funktion remove_cap() verwenden. Diese Funktion akzeptiert einen Parameter: Genehmigung. Um beispielsweise die Berechtigung "Publish_Posts" aus "Custom_Role" zu entfernen, können Sie den folgenden Code verwenden:

$role = get_role('custom_role'); $role->remove_cap('publish_posts');

Wie ändere ich die Standardbenutzerrolle in WordPress?

Um die Standardbenutzerrolle in WordPress zu ändern, navigieren Sie zu Einstellungen & GT; Wählen Sie unter neuen Benutzer-Standardrollen die Rolle aus, die Sie als Standardmenü im Dropdown-Menü festlegen möchten.

Wie kann ich Benutzern in WordPress mehrere Rollen zuweisen?

WordPress unterstützt nicht die Zuordnung mehrerer Rollen an Benutzer standardmäßig. Sie können dies jedoch mit Plugins wie mehreren Rollen tun. Nachdem Sie das Plugin installiert und aktivieren, können Sie dem Benutzer auf der Profilseite des Benutzers mehrere Rollen zuweisen.

Wie begrenzt ich den Inhaltszugriff basierend auf Benutzerrollen in WordPress?

Um den Inhaltszugriff basierend auf Benutzerrollen in WordPress einzuschränken, können Sie Plugins wie Mitglieder verwenden. Mit diesem Plugin können Sie steuern, welche Rollen auf bestimmten Inhalten auf Ihrer Website zugreifen können.

Wie erstelle ich benutzerdefinierte Berechtigungen in WordPress?

Um benutzerdefinierte Berechtigungen in WordPress zu erstellen, können Sie die Funktion add_cap() verwenden. Diese Funktion akzeptiert zwei Parameter: Erlaubnis und einen Booleschen Wert, der angibt, ob die Rolle die Genehmigung hat. Um beispielsweise eine benutzerdefinierte Berechtigte mit dem Namen "Management_Custom" zu "Custom_Role" hinzuzufügen, können Sie den folgenden Code verwenden:

$role = get_role('custom_role'); $role->add_cap('manage_custom', true);

Wie kann ich überprüfen, ob ein Benutzer in WordPress spezifische Berechtigungen hat?

Um zu überprüfen, ob ein Benutzer in WordPress über bestimmte Berechtigungen verfügt, können Sie die Funktion current_user_can() verwenden. Diese Funktion akzeptiert einen Parameter: Genehmigung. Um beispielsweise zu überprüfen, ob der aktuelle Benutzer die Berechtigung "verwalten" hat, können Sie den folgenden Code verwenden:

if (current_user_can('manage_custom')) { // 当前用户具有“manage_custom”权限 }

Alle Bilder behalten ihr ursprüngliches Format und ihre Lage.

Das obige ist der detaillierte Inhalt vonMastering von WordPress -Rollen und -funktionen beherrschen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage