Yoast seo插件-从非管理员删除批量标题和描述编辑器菜单

时间:2014-03-27 作者:gurung

有没有办法从非管理员中删除yoast seo插件的批量标题和描述编辑器菜单。这是一个很棒的功能,但我希望我的用户远离它。我正在使用最新版本的wp和插件。

enter image description here

我正在尝试此代码的一些变体,但似乎不起作用。

if ( ! current_user_can(\'create_users\') ) {

add_action( \'admin_menu\', \'nonadmin_remove_bulk_menu\', 999 );

    function nonadmin_remove_bulk_menu() {
    remove_menu_page(\'page=wpseo_bulk-title-editor.php\');
  }
} 

2 个回复
最合适的回答,由SO网友:engelen 整理而成

Yoast SEO使用功能(WordPress docs on roles and capabilities) 确定是否允许用户批量编辑互动程序和说明。用于此操作的功能的名称为wpseo_bulk_edit.

默认情况下,Yoast SEO将此功能添加到管理员、编辑、作者和贡献者角色中。要从除管理员角色以外的所有角色中删除此功能,只需调用remove_cap 在所有其他角色上。要从角色中删除功能,首先需要获取角色对象:

 $role = get_role( $rolename );
 $role->remove_cap( $cap );
remove_cap 只需调用一次:角色的功能设置保存到选项表中。

因此,一次调用此命令就意味着:

$roles = array(
    \'editor\',
    \'author\',
    \'contributor\'
);

foreach ( $roles as $rolename ) {
    $role = get_role( $rolename );

    if ( $role ) {
        $role->remove_cap( \'wpseo_bulk_edit\' );
    }
}

EDIT

在(手动)激活插件时,该功能将自动添加到这些用户角色中。因此,使用wpseo_bulk_edit_roles (在@fischi的回答中解释)除了调用上面的代码片段一次之外:

function myplugin_wpseo_bulk_edit_roles( $roles ) {
    return array( \'administrator\' );
}

add_filter( \'wpseo_bulk_edit_roles\', \'myplugin_wpseo_bulk_edit_roles\' );

SO网友:fischi

您可以使用过滤器wpseo_submenu_pages 为此。该插件提供了array ,并列出访问特定页面所需的功能。

Submenupageitemwpseo_bulk-title-editor 具有以下值(例如):

[7] => Array
    (
        [0] => wpseo_dashboard //parentmenupage
        [1] => Yoast WordPress SEO: Bulk Title Editor // Page Title
        [2] => Bulk Title Editor // Menu Title
        [3] => wpseo_bulk_edit // Capability needed
        [4] => wpseo_bulk-title-editor // Page to load
        [5] => Array  // some other stuff, did not check by now.
            (
                [0] => WPSEO_Admin Object
                    (
                    )

                [1] => load_page
            )

        [6] => Array
            (
                [0] => Array
                    (
                        [0] => WPSEO_Admin Object
                            (
                            )

                        [1] => bulk_edit_options
                    )

            )

    )
从中,您可以看到两种不同的可能性:

用户管理

removing the capability wpseo_bulk_edit from non-admins

具有此功能的标准角色包括:

$roles = array(
    \'administrator\',
    \'editor\',
    \'author\',
    \'contributor\',
);
您可以将函数筛选为wpseo_submenu_pages:

function f711_add_WPSEO_bulk_capabilities( $roles ) {
    return array( \'administrator\' ); // skip all other roles
}

add_filter( \'wpseo_bulk_edit_roles\', \'f711_add_WPSEO_bulk_capabilities\', 999999, 1 );
遗憾的是,此筛选器仅用于activatedeactivate 插件,所以您必须这样做仅在激活插件时挂接该功能-否则您将从筛选的角色中删除该功能

之后,过滤器必须保持活动状态,因为每次激活插件时都需要过滤角色。

更改批量编辑所需的功能这是另一个解决方案,尽管第一个更好,IMO。

您可以循环浏览菜单页,并设置wpseo_bulk-title-editormanage_options.

function f711_remove_WPSEO_admin_pages( $adminpages ) {

    foreach( $adminpages as &$thispage ) {

        if ( $thispage[4] == \'wpseo_bulk-description-editor\' || $thispage[4] == \'wpseo_bulk-title-editor\' ) { // check the page
            $thispage[3] = \'manage_options\'; // set the needed capability
        }

    }
    return $adminpages;

} 
add_filter( \'wpseo_submenu_pages\', \'f711_remove_WPSEO_admin_pages\', 999999, 1 );
两者都很好——第二个解决方案的好处是它是能力驱动的,而第一个解决方案取决于角色。第一种解决方案的好处是,您只需运行一次函数,而不是每次调用admin,因此在考虑性能时会更好。

EDIT

当然,正如@engelen所提到的,您也可以删除该功能,但每次手动激活插件时,它都会再次添加。

结束

相关推荐