web-dev-qa-db-ja.com

サードパーティのプラグインによって追加された管理ページを削除する。この例では重力の形

私は gravityフォーム pluginによって追加されたエディタからヘルプページを隠そうとしています。私は以前に他のプラグインで同じ問題に遭遇したと思うので、私はサードパーティ製プラグインのためにそれをする正しい方法を知りたいです。これは私がこれまで持っていたもので、うまくいかないものです。もちろん他のWPメニューでも動作するので、その機能がWPメニューに限定されているのではないかと思いますか?

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

わかりました、Eugeneの答えはカスタム機能を扱わないプラグインの場合にはたらきます。

http://codex.wordpress.org/Roles_and_Capabilities
WordPressプラグインAPI を使用すると、役割と機能を追加、削除、および変更できます。プラグインは役割と機能を変更する可能性があるので、この記事ではデフォルトのものだけを取り上げます。


そのため、彼のコードが機能をチェックせずに機能する場合は、GravityFormsがadd_submenu_pageアクションをどのように実行するかを調べなければなりません。
そして、そのために、プラグインフォルダー全体を優れたコードエディタ(NotePad ++、TextMateなど)の中にドロップし、グローバル検索を行って自分のものを見つけます。

// 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 
);

私たちが見る前の数行:

$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";

それでは、btw GFが認識する Members pluginに進んでください。編集画面の設定画面には、次のように表示されています。
ただし、このリストには gform_full_accessは表示されません。それは手動でプラグインインターフェースを通して追加されなければなりません...

enter image description here

その後、フルアクセス機能をマークすると、remove_submenu_pageは編集者の役割に対して期待どおりに機能します。



すべてのサブメニューの参照コード(最初のものを覚えているのが一番上のメニューです)。

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 );

興味のあるプラグイン

Adminimize この瞬く間に隠れる魔法をして完全にPROです。

3
brasofilo

フックをキューの最後に追加してから、slugでメニューを削除する必要があります。

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 );

サブメニューを削除したい場合は、次のスニペットを使用する必要があります。

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

これは私を非常識に駆り立てていました。ここで提供された答えは私にほとんどの方法をもたらしました、しかしその特定の暗い重力フォームメニュー項目は少し奇妙です。

私は、すべてのメニューデータを含む$ submenuグローバル変数を分析することによって、その根本的な部分にたどり着きました。上記のようにadmin_menu()にフックされると、以下のスニペットはあなたのために更新サブメニュー項目を殺すべきです:)

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

GravityFormsプラグインは最上位メニュー項目をサブメニューの最初の項目と一致するように名前変更します。

例えば; Editorロールに gravityforms_view_entries の機能だけを追加した場合、最初のサブメニュー項目は "Entries"になるため、親メニューは "gf_edit_forms"ではなく "gf_entries"になります。そのため、次のコードでは、その機能を持つエディタのサブメニューから「ヘルプ」項目を削除します。

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

お役に立てれば。

1
D-B