wake-up-neo.net

Wie kann ich die Fähigkeit ändern, den Zugriff auf die Optionen eines Plugins erforderlich ist?

Ich habe die folgenden 3 verschiedenen Rollen : Admin, Editor und SEO. Ich habe WordPress SEO von Yoast installiert und möchte Folgendes erhalten:

  • Ich möchte nicht, dass die Redakteure die SEO-Optionen sehen , weil sie nur Beiträge schreiben und nichts über SEO wissen. Es gibt eine Person mit der Rolle SEO, die die Optimierung vornimmt.
  • Ich möchte nicht, dass die SEO-Person andere Plugins-Optionen sieht . Ich möchte nur die gleichen Funktionen wie die Editoren haben, aber mit aktivierten SEO-Funktionen.

Ich habe versucht, mit einigen Ausschnitten von dieser Site, und ich bin in der Lage, die Meta-Box für die Editors zu verstecken, aber nicht die kleine 'Bewertungsbox' über der Veröffentlichen Schaltfläche .

Außerdem weiß ich nicht, wie ich mit dem zweiten Punkt umgehen soll, da alle Plugins dieselbe manage_options -Funktion verwenden, sodass ich diese Funktion der SEO-Rolle nicht zuweisen kann. Und Ich weiß nicht, wie ich die benötigten Funktionen ändern soll ohne die Plugin-Dateien zu ändern (was beim Plugin-Update verloren geht).

Danke im Voraus.

5
EliasNS

Dies ist möglicherweise nicht die beste Methode, da ein Editor Zugriff auf Einstellungen und Optionen erhält. Dadurch erhält jedoch ein bestimmter Editor (basierend auf der Benutzer-ID) die Berechtigung zum Bearbeiten von Optionen. Wir testen dann, ob wir eine der Optionsvorlagen laden, ob wir es sind UND die Benutzer-ID dieselbe ist, für die wir Berechtigungen vergeben haben, brechen den Prozess ab und spucken eine Nachricht aus.

1) Erstellen Sie als erstes Ihren SEO-Benutzer und weisen Sie ihm eine Editor-Rolle zu.

2) Als nächstes müssen wir diesem Benutzer die Möglichkeit geben, manage_options. Sie finden dies, indem Sie den Benutzer bearbeiten und sich die URL ansehen. Dies sollte einer der letzten Parameter in der URL sein.

/** Give our SEO Guy Permissions **/
function give_seo_yoastToast() {
    $user = new WP_User( $seo_user_id );
    $user->add_cap( 'manage_options');
}
add_action( 'admin_init', 'give_seo_yoastToast');

3) Jetzt müssen wir sicherstellen, dass alle unsere SEO-Dudeski auf keine der kritischen Optionen zugreifen können. Meines Wissens sind die folgenden Seiten die einzige Möglichkeit für diesen Benutzer, wichtige Informationen zu bearbeiten. Wenn sie diese Seiten sehen, töten wir sie und spucken eine Nachricht aus. Sie können die Nachricht jederzeit ändern.

/** Remove Access to Certain Pages **/
add_action( 'load-options-general.php', 'prevent_seoguy_access' );
add_action( 'load-options-writing.php', 'prevent_seoguy_access' );
add_action( 'load-options-reading.php', 'prevent_seoguy_access' );
add_action( 'load-options-discussion.php', 'prevent_seoguy_access' );
add_action( 'load-options-media.php', 'prevent_seoguy_access' );
add_action( 'load-options-permalink.php', 'prevent_seoguy_access' );
add_action( 'load-options.php', 'prevent_seoguy_access' );
function prevent_seoguy_access(){
    $currID = is_user_logged_in() ? get_current_user_id() : 0;

    if($currID == $seo_user_id ){
        wp_die("There was a hole here once, it's gone now.");
        exit();
    }
}

4) Im Moment kann er die Seiten im Menü anzeigen, aber wenn er darauf zugreift, sieht er die Nachricht oben. Entfernen wir diese Seite als zusätzlichen Schritt aus unserem Menü. Bitte beachten Sie, dass ein erfahrener Benutzer, wenn Sie die Menüseite ohne die oben genannte Funktion entfernen, über eine URL direkt zu einer der Optionsseiten gelangen kann.

/** Remove Settings Menu Page from SEO Guy **/
function seo_guy_menu() {
    if(!current_user_can('administrator')){
        remove_menu_page('options-general.php');
    }
}
add_action('admin_menu', 'seo_guy_menu');

5) Und du bist fertig!

Wie Sie in Ihrer Frage betont haben, sieht Yoast leider nicht so aus, als ob es die Möglichkeit bietet, einem Benutzer eine bestimmte Berechtigung für alle SEO-Inhalte zu erteilen, ohne ihm unnötige zusätzliche Berechtigungen zu erteilen. Anstelle eines statischen $seo_user_id können Sie auch eine SEO-Rolle festlegen und diesem Rolleneditor die oben genannten Berechtigungen erteilen. Das ist ein bisschen mehr Arbeit (aber nicht zu viel), aber wenn Sie nur einen Mann haben, der für immer Ihre SEO macht, dann ist die obige Methode in Ordnung, denke ich.

4
Howdy_McGee

Der beste Weg, um die Funktionen zu ändern, die Benutzer zum Anzeigen der Yoast SEO-Einstellungsseiten benötigen, ist die Verwendung des Filters wpseo_manage_options_capability.

Hier ist ein Beispiel, wie dies verwendet wird (in Ihre functions.php-Datei eingefügt):

/**
 * Return the capability that users need to view the Yoast SEO settings pages.
 *
 * @return mixed|void
 */
function my_custom_wpseo_manage_options_capability() {

    $manage_options_cap = 'edit_others_posts';

    return $manage_options_cap;
}
add_filter( 'wpseo_manage_options_capability', 'my_custom_wpseo_manage_options_capability' );

Im obigen Beispiel wird die Funktion edit_others_posts verwendet, damit (in einer Standard-WordPress-Installation) sowohl Redakteure als auch Administratoren auf die Yoast-SEO-Einstellungen zugreifen können.

Wenn Sie nicht möchten, dass "normale" Editoren Zugriff haben, müssen Sie eine neue Rolle erstellen (z. B. "SEO"), die die gleichen Funktionen wie ein Editor hat, sowie eine zusätzliche benutzerdefinierte Funktion (z. B. "manage_wpseo_options") kann in der obigen Funktion anstelle von edit_others_posts verwendet werden.

Mit dem Members Plugin von Justin Tadlock können Sie auf einfache Weise neue Rollen und Funktionen dafür erstellen.

Hinweis: Dies funktioniert auf Multisite aufgrund von diesem Problem möglicherweise nicht.


Update: In Yoast SEO v5.5 + wurde der wpseo_manage_options_capability-Filter in wpseo_manage_options umbenannt.

4
Matt Sims

Ich habe gerade eine sehr einfache Lösung gefunden. Falls noch nicht geschehen, installieren Sie ein Capabilities Manager-Plugin. Erstellen Sie anschließend eine neue Funktion im Funktionsmanager. Nennen Sie sie "CUSTOM_CAPABILITY_NAME" oder eine beliebige andere Funktion. Weisen Sie es dann einer bestimmten Rolle oder einem bestimmten Benutzer zu.

Wichtig : Kopieren und Sichern von Dateien, die Sie ändern möchten, falls Sie Probleme haben. Sie können das Original jederzeit wiederherstellen.

Dann müssen Sie auf dem eigentlichen Server die Verzeichnisse in wp-content/plugins/ändern und dann alle Dateien mit 'manage_options' suchen.

Beispiel: grep 'manage_options' */*

Schwieriger Teil, Sie müssen die Hauptfunktion finden, die das Menü oder Untermenü zum Dashboard hinzufügt. Hier sind meine zwei Beispiele für den SEO-spezifischen Zugriff von Yoast.

$manage_options_cap = apply_filters( 'wpseo_manage_options_capability', 'CUSTOM_CAPABILITY_NAME' );


add_submenu_page( 'wpseo_dashboard', __( 'WooCommerce SEO Settings', 'yoast-woo-seo' ), __( 'WooCommerce SEO', 'yoast-woo-seo' ), 'CUSTOM_CAPABILITY_NAME', $this->short_name, array(

PS - ändere nichts, was mit einem '$' beginnt - das ist eine Variable. :)

1
Fabian