Untermenü-Link nur für Administratoren zu Editoren in WordPress anzeigen. Führt zu Fehlern

Lesezeit: 3 Minuten

Benutzer-Avatar
BIOSTALL

Ich verwende ein Plugin, das einem Admin-Menü ein Untermenüelement wie folgt hinzufügt:

add_submenu_page( 'propertyhive', 'Property Hive Settings', 'Settings', 'manage_options', 'ph-settings', 'callback_fn' );

Aufgrund seiner Angabe manage_options es erscheint nur für Administratoren. Ich muss es den Redakteuren zeigen. Folgendes habe ich in der Datei functions.php meines Themes ausprobiert:

add_action( 'admin_menu', 'custom_settings_menu', 99 );
function custom_settings_menu()
{
    // Remove the submenu item first
    remove_submenu_page( 'propertyhive', 'ph-settings' );

    // Add it again but with different role (manage_propertyhive)
    // This role does exist as other submenu items ue it
    add_submenu_page( 'propertyhive', 'Property Hive Settings', 'Settings', 'manage_propertyhive', 'ph-settings', 'my_theme_callback_fn' );
}

Obwohl dieses tut Untermenüpunkt korrekt anzeigen, erhalte ich folgende Fehlermeldung:

Sorry, you are not allowed to access this page.

Kann jemand etwas Offensichtliches sehen oder irgendwelche Neigungen haben, was dies verursachen könnte?

Notiz: Das manage_propertyhive Fähigkeit auf jeden Fall tut existieren

Ich glaube, dass dies geschieht, weil „manage_propertyhive“ keine definierte Fähigkeit ist, daher wird niemand Zugriff auf dieses Menü haben. Sie können entweder eine der vordefinierten WordPress-Funktionen verwenden, die Sie finden können hier oder Sie können Ihre eigene benutzerdefinierte Funktion wie „manage_propertyhive“ definieren, indem Sie den Anweisungen folgen hier.

Hoffe das hilft!

  • Danke, aber manage_propertyhive ist definitiv eine Fähigkeit. a) es ist mein Plugin und b) andere Untermenüpunkte verwenden es ohne Probleme. Danke aber für deine Antwort

    – BIOSTALL

    19. Oktober 2016 um 19:50 Uhr

1) Sind Sie sicher, dass add_submenu_page() Funktion aus dem Plugin wird korrekt kopiert? add_submenu_page() akzeptiert nur 6 Parameter – in Ihrer Frage hat es 7 Parameter mit propertyhive ist die Fähigkeit und manage_options das sein menu_slug (was verwirrend ist)

https://developer.wordpress.org/reference/functions/add_submenu_page/

2) Ich schätze, dass sowohl Administratoren als auch Redakteure die Fähigkeit haben manage_propertyhive ? Wenn nicht, stellen Sie sicher.

3) In Ihrem Beispielcode die Callback-Funktion für die neue propertyhive Untermenüseite ist my_theme_callback_fn – hast du hier die richtige Callback-Funktion eingefügt?

4) Die Tatsache, dass Sie die Untermenüseite Editoren hinzufügen, bedeutet nicht unbedingt, dass sie auf diese Seite zugreifen können – haben Sie das Plugin auf weitere Fähigkeitsprüfungen überprüft? Vielleicht werden im Code der Callback-Funktion oder in irgendeiner anderen Funktion des Plugins die Fähigkeiten noch einmal überprüft und Editoren fehlen einige Fähigkeiten.

Das muss funktionieren

function add_theme_caps() {
    $role = get_role( 'editor' );  
    $caps = (array)$role->capabilities;
    if(!array_key_exists('manage_propertyhive', $caps)) {
        $role->add_cap( 'manage_propertyhive' ); 
    }
}
add_action( 'admin_init', 'add_theme_caps');

Angenommen, Sie haben die Funktion richtig eingerichtet, vielleicht erlaubt die übergeordnete Seite keinen Zugriff auf die Untermenüseite, stellen Sie sicher, dass der Benutzer auf die übergeordnete Seite zugreifen kann …

Dies ist die Funktion, die prüft, ob der Benutzer auf die Seite zugreifen kann … Wenn sie falsch zurückgibt, wird der Fehler angezeigt …
https://github.com/WordPress/WordPress/blob/4.6.1/wp-admin/includes/plugin.php#L1697-L1763

Neben der Überprüfung verschiedener anderer Dinge wird auch überprüft, ob die übergeordnete Seite für den Benutzer zugänglich ist.

Wenn das nicht funktioniert, würde ich vorschlagen, dass Sie auf Ihrer lokalen Installation zu dieser Datei gehen und var_dump alle Variablen, die vor der Rückgabe überprüft werden falseso debuggen wir Entwickler die Fehler… 😉

Stellen Sie sicher, dass Sie die Datei in der Originaldatei wiederherstellen (ich aktualisiere nur WordPress erneut, das alle Kerndateien in ihren ursprünglichen Zustand zurückversetzt) ​​…

Ich hoffe, das hilft.

1369710cookie-checkUntermenü-Link nur für Administratoren zu Editoren in WordPress anzeigen. Führt zu Fehlern

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy