Yoast的WordPress SEO:在非管理员帖子中隐藏元框


Answers:


19

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

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

它钩在add_meta_boxes同一文件第32行的钩子上,

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

当然,您可以从帖子编辑屏幕上的meta框本身获取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或自定义帖子类型一个或多个!

应该做到的。

更新:manage_plugins应该已经activate_plugins-修改。


16
为+1 yoast_is_toast()
kaiser 2012年

@Ahmad M感谢您建议的编辑,但$post_type在此实例中不需要var和action参数,并且不会引发通知/错误。另外,如果您包含$post_typevar,则需要在函数中其他您未定义的地方定义帖子类型,因此用户可能会运行它以使其无法正常工作!在这种情况下,将帖子类型名称(即'post'直接传递给remove_meta_box函数)传递是完全可以接受的。无论如何,谢谢你的建议。
亚当

@userabuser:谢谢您的澄清,但是$post_type已经定义好并且可以由add_meta_boxes动作钩子函数使用,请查看该动作钩子的Adam Brown源视图。利用$post_type在这种情况下,将会使代码独立的post_type编辑画面,这意味着它会删除wpseo_meta从元框被上发现的文章类型,并且将返回任何结果的情况下,wpseo_meta没有找到。
艾哈迈德M

@AhmadM谢谢队友。我知道已经定义了var,但是这并没有成为传递给hook / function的必要条件。在这种情况下,OP希望从postpost_type中删除元框,这就是为什么初始解决方案允许进行粒度控制的原因。但是,如果要针对所有帖子类型删除它,则使用已经定义的var $post_type是令人满意的。我要做的是编辑我的答案,以使用您的其他示例来使用该$post_type变量,以防有人可能希望将此变量应用于所有已注册的post_type。
亚当

5

根据Yoastfunctions.phpWordPress SEO插件API Docs),尝试将其粘贴到插件或主题文件中。

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

4

您可以使用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元框之后完成此操作。


2

您可以使用Adminimize插件根据用户的角色向用户隐藏项目。自己用这个来向客户隐藏一些Yoast SEO东西,并简化后端。

http://wordpress.org/extend/plugins/adminimize/

通过为要隐藏的项目添加css选择器,可以很直接地使用它。用它来隐藏SEO页面分析选项卡(#linkdex)


0

好吧,Yoast在WordPress SEO上有一个设置选项,用于为非管理员禁用WordPress SEO设置的高级部分。如果要完全禁用该框,则可以使用其他插件删除非管理员的帖子编辑器页面元素,例如,从非管理员的帖子编辑器中删除WordPress SEO框。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.