【问题标题】:add_menu_page item show to Editor Role Wordpressadd_menu_page 项目显示到编辑角色 Wordpress
【发布时间】:2018-11-28 16:33:09
【问题描述】:

我一直在尝试向我已经完成的 WP 仪表板添加一个菜单。但现在我想向编辑角色和管理员显示这个菜单。

这是我的代码

add_action( 'admin_menu', 'register_my_custom_menu_page' );
function register_my_custom_menu_page() { 
 add_menu_page( 'Instagram test', 'Instagram test', 'read', 'admin.php?page=sb-instagram-feed', '', 'dashicons-welcome-widgets-menus', 90 );
}

到目前为止,它有效,但仅适用于我的管理员用户,不适用于我的编辑用户。

我已经了解了这些功能,这就是为什么我将read 值放在上面的函数上。

我如何也可以向我的编辑器用户显示此菜单?

这是一个截图,我的自定义菜单是 Instagram 测试

管理员仪表板

编辑仪表板

【问题讨论】:

    标签: wordpress function menuitem roles capability


    【解决方案1】:

    虽然我无法证明为什么 read 不起作用 - 通常如果您想通过用户角色来限制某些内容,您可以为角色添加 slug。如果您阅读了add_menu_page() 的源代码,它实际上将通过current_user_can 运行该功能,它也接受角色slug。

    我会将read 替换为editor,看看会怎样。它也适用于管理员,因为它会沿列表向下传播,administrators 都具有editorcontributor 等“功能”。

    编辑:您似乎安装了Instagram Feed 插件,这将与您的自定义插件冲突。该插件的代码显示sb-instagram-feed 页面属于该插件:

    function sb_instagram_menu() {
        add_menu_page(
            __( 'Instagram Feed', 'instagram-feed' ),
            __( 'Instagram Feed', 'instagram-feed' ),
            'manage_options',
            'sb-instagram-feed',
            'sb_instagram_settings_page'
        );
        add_submenu_page(
            'sb-instagram-feed',
            __( 'Settings', 'instagram-feed' ),
            __( 'Settings', 'instagram-feed' ),
            'manage_options',
            'sb-instagram-feed',
            'sb_instagram_settings_page'
        );
    }
    add_action('admin_menu', 'sb_instagram_menu');
    

    并且该插件需要manage_options,这是一个administrator 唯一的功能。您不需要链接到其他插件创建的页面,也不需要停用该插件。

    编辑 2:请注意,直接编辑插件文件通常不是一个好习惯,因为您所做的任何更改都会在插件更新时被覆盖。您可能能够为其取消当前管理菜单的挂钩并挂钩您的自定义菜单。

    // Remove Existing Menu
    remove_action( 'admin_menu', 'sb_instagram_menu' );
    
    // Add Custom Menu
    add_action( 'admin_menu', 'custom_sb_instagram_menu');
    function custom_sb_instagram_menu() {
        add_menu_page(
            'Instagram Test',
            'Instagram Test',
            'editor',
            'sb-instagram-feed',
            'sb_instagram_settings_page'
        );
        add_submenu_page(
            'sb-instagram-feed',
            'Test Settings',
            'Test Settings',
            'editor',
            'sb-instagram-feed',
            'sb_instagram_settings_page'
        );
    }
    

    【讨论】:

    • 感谢您的建议。我尝试从管理员更改为编辑,但没有成功。我也检查了 current_user_can 但没有做任何事情。 if (current_user_can('editor')) { my code } 我真的很想知道为什么它只显示在我的管理员而不是其他编辑器上
    • 我使用 edit_pages 而不是 editor 并且它有效。但是当我进入那个菜单时,它会告诉我:对不起,你不允许
    • 更新了答案,你和 Instagram Feed 插件有冲突。
    • 感谢您的反馈!我看到。好吧,我无法停用,因为我想显示该插件。我想做的只是向我的 Editor 用户显示该菜单(instagram)。
    • 非常感谢您的帮助!我将您刚刚上传的代码中的那部分:manage_options 更改为 edit_pages,现在编辑器可以转到该插件。非常感谢!
    【解决方案2】:

    这对于管理员和编辑角色都是正确的。

    add_menu_page( 'Transcoding Mp3', 'Transcoding Mp3', 'edit_pages', 'transcoding_mp3', 'transcoding_mp3_fun',  '',  90 );
    function transcoding_mp3_fun() {    
     $currentusr = wp_get_current_user();
     $idcur = $currentusr->data->ID;
     $namecur = $currentusr->data->user_login;
     echo 'This is editor id = '. $namecur;          
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-13
      • 2011-08-19
      • 1970-01-01
      • 2016-10-21
      • 2014-09-23
      • 2016-01-10
      • 1970-01-01
      相关资源
      最近更新 更多