web-dev-qa-db-de.com

Entfernen einer von einem Drittanbieter-Plugin hinzugefügten Administrationsseite. In diesem Beispiel bildet sich die Schwerkraft

Ich versuche, eine Hilfeseite vor den Editoren zu verbergen, die vom gravity forms plugin hinzugefügt wurde. Ich glaube, ich bin bereits mit anderen Plugins auf dasselbe Problem gestoßen, daher würde ich gerne wissen, wie dies für Plugins von Drittanbietern richtig gemacht wird. Das habe ich bisher, was nicht funktioniert. Es funktioniert natürlich auch für andere WP Menüs, also frage ich mich, ob die Funktion nur auf WP Menüs beschränkt ist.

function remove_menu_links() {
  if( !current_user_can('manage_options') ) {
    remove_menu_page('admin.php?page=gf_help'); // this is the pages url
  }
}
add_action( 'admin_menu', 'remove_menu_links');
3
Andrew

Ok, Eugenes Antwort funktioniert im Fall eines Plugins, das sich nicht mit benutzerdefinierten Funktionen befasst.

http://codex.wordpress.org/Roles_and_Capabilities
Mit der WordPress Plugin API können Rollen und Funktionen hinzugefügt, entfernt und geändert werden. Da Plugins möglicherweise Rollen und Funktionen ändern, werden in diesem Artikel nur die Standardfunktionen behandelt.


Wenn sein Code funktioniert, ohne die Fähigkeit zu überprüfen, müssen wir uns ansehen, wie GravityForms seine add_submenu_page -Aktion ausführt.
Und dafür legen wir den gesamten Plugin-Ordner in einem guten Code-Editor (NotePad ++, TextMate usw.) ab und führen eine globale Suche durch, um unsere Inhalte zu finden.

// wp-content/plugins/gravityforms/gravityforms.php
// all parameters removed from the original code, except $page_title and $capability
add_submenu_page( 
    $parent_slug, 
    __("Help", "gravityforms"),
    $menu_title,
    $has_full_access ? "gform_full_access" : $min_cap, 
    $menu_slug, 
    $function 
);

Und ein paar Zeilen, bevor wir sehen:

$has_full_access = current_user_can("gform_full_access");
$min_cap = GFCommon::current_user_can_which(GFCommon::all_caps());
if(empty($min_cap))
    $min_cap = "gform_full_access";

Jetzt fahren wir mit Members plugin fort, das btw GF erkennt, und wir haben das folgende in seinem Konfigurationsbildschirm für die Editorrolle.
ABER NICHT, DASS gform_full_access nicht in dieser Liste erscheint. Es muss manuell über die Plugin-Schnittstelle hinzugefügt werden ...

enter image description here

Danach und durch Markieren der vollständigen Zugriffsfähigkeit funktioniert der remove_submenu_page erwartungsgemäß für die Rolle des Editors.



Referenzcode für alle Untermenüs (Erinnerung an das erste ist das oberste Menü).

function remove_menu_links() {
    if( !current_user_can( 'manage_options' ) ) {
        // remove_submenu_page( 'gf_edit_forms', 'gf_edit_forms' ); 
        // remove_submenu_page( 'gf_edit_forms', 'gf_new_form' ); 
        // remove_submenu_page( 'gf_edit_forms', 'gf_new_formf_help' ); 
        // remove_submenu_page( 'gf_edit_forms', 'gf_entries' ); 
        // remove_submenu_page( 'gf_edit_forms', 'gf_settings' ); 
        // remove_submenu_page( 'gf_edit_forms', 'gf_export' ); 
        // remove_submenu_page( 'gf_edit_forms', 'gf_update' ); 
        // remove_submenu_page( 'gf_edit_forms', 'gf_addons' ); 
        remove_submenu_page( 'gf_edit_forms', 'gf_help' ); 
    }
}
add_action( 'admin_menu', 'remove_menu_links', 9999 );

Plugin von Interesse

Adminimize macht diese versteckende Magie im Handumdrehen und ist komplett PRO.

3
brasofilo

Sie müssen Ihren Hook am Ende der Warteschlange hinzufügen und dann das Menü per Slug entfernen:

function remove_menu_links() {
    if( !current_user_can( 'manage_options' ) ) {
        remove_menu_page( 'gf_edit_forms' ); // this is the pages url
    }
}
add_action( 'admin_menu', 'remove_menu_links', 9999 );

Wenn Sie das Untermenü entfernen möchten, müssen Sie das folgende Snippet verwenden:

function remove_menu_links() {
    if( !current_user_can( 'manage_options' ) ) {
        remove_submenu_page( 'gf_edit_forms', 'gf_help' ); 
    }
}
add_action( 'admin_menu', 'remove_menu_links', 9999 );
8
Eugene Manuilov

Das hat mich verrückt gemacht. Die Antworten, die ich hier erhalten habe, haben mich am meisten beschäftigt, aber dieser verdammte Menüpunkt in Gravity Forms ist ein bisschen seltsam.

Ich habe es geschafft, die Wurzel zu finden, indem ich die globale Variable $ submenu analysierte, die alle Menüdaten enthält. Das folgende Snippet sollte das Update-Untermenüelement für Sie beenden, wenn Sie wie oben aufgeführt in admin_menu () eingebunden sind :)

remove_submenu_page( 'gf_edit_forms', 'gf_update' ); 
1
user14386

Das GravityForms-Plugin benennt das Menüelement der obersten Ebene so um, dass es mit dem ersten des Untermenüs übereinstimmt.

Zum Beispiel; Wenn Sie der Editor-Rolle nur die Funktion gravityforms_view_entries hinzugefügt haben, lautet der erste Untermenüpunkt "Entries", das übergeordnete Menü also "gf_entries" und nicht "gf_edit_forms". Mit dem folgenden Code wird das Element "Hilfe" aus dem Untermenü für Editoren mit genau dieser Funktion entfernt:

function remove_menu_links() {
    remove_submenu_page( 'gf_entries', 'gf_help' );
}
add_action( 'admin_menu', 'remove_menu_links', 9999 )
;

Hoffe das hilft.

1
D-B