问题描述

我有 multi-author 网站,我不太舒服,允许所有成员在他们发布的帖子中输入 SEO 细节。我希望这只能看到网站的管理员。有任何想法吗?

最佳解决方案

它没有在 Yoast SEO 插件站点的 API 文档中说出 ID 是什么,我没有安装的 Yoast 的副本,但根据 yoas-plugin-dir/admin/class-metabox.php 第 144 行,注册的 meta_box 是;

add_meta_box( 'wpseo_meta', ...etc ); ...

哪个挂在同一个文件的第 32 行的 add_meta_boxes 钩上,

add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );

当然,你可以从编辑屏幕上的元框本身获取 ID … 无论如何。

您可以执行以下操作,

add_action('add_meta_boxes', 'yoast_is_toast', 99);
function yoast_is_toast(){
    //capability of 'manage_plugins' equals admin, therefore if NOT administrator
    //hide the meta box from all other roles on the following 'post_type' 
    //such as post, page, custom_post_type, etc
    if (!current_user_can('activate_plugins')) {
        remove_meta_box('wpseo_meta', 'post_type', 'normal');
    }
}

… 其中 post 类型是您要应用此限制的帖子类型,如 post 或自定义帖子类型一个或多个!

应该做的伎俩

更新:manage_plugins 应该是 activate_plugins – ammended 。

次佳解决方案

您可以使用 remove_meta_box 功能删除它。

if ( ! current_user_can( 'edit_pages' ) ) {
    add_action( 'add_meta_boxes', 'my_remove_wp_seo_meta_box', 100000 );
}

function my_remove_wp_seo_meta_box() {
    remove_meta_box( 'wpseo_meta', 'post', 'normal' );
}

请注意 add_action 中的 100000,这样可以确定 WP SEO metabox 已挂钩后完成。

第三种解决方案

尝试将其粘贴到插件或主题 functions.php 文件中,按照 WordPress SEO plugin(API Docs),由 Yoast

if(function_exists('wpseo_use_page_analysis') && !current_user_can('administrator')){
    add_filter('wpseo_use_page_analysis', '__return_false');
}

为了避免任何错误… 这将检查以确保该功能存在,然后尝试隐藏的东西,允许您停用插件,而不会抛出错误。

您可能需要挂接到 init 才能正常工作,可以这样做:

function wpse_init(){
    if(function_exists('wpseo_use_page_analysis') && !current_user_can('administrator')){
        add_filter('wpseo_use_page_analysis', '__return_false');
    }   
}
add_action('init', 'wpse_init');

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。