为非管理员隐藏Meta框

时间:2013-10-26 作者:Aidan Knight

我有一个基于评论的wordpress网站,我为每个不同的公司都有一个页面,用户可以在那里查看它们。我使用的主题添加了一个名为“review”的自定义帖子类型,我使用Press Permit创建了有限的用户帐户,可以修改这些评论页面的某些部分。

我想隐藏一些他们不应该访问的元框,如Yoast SEO、GD Star Ratings等。我遵循了该网站上其他一些帖子的指示,但它并没有像应该的那样隐藏元框。

我已经按照中的说明在主题目录的“functions.php”末尾添加了以下代码WordPress SEO by Yoast: Hide Meta boxes in posts for non-admins

add_action(\'add_meta_boxes\', \'hide_yoastseo_metabox\', 99);

function hide_yoastseo_metabox()
{
    if (!current_user_can(\'activate_plugins\'))
    {
        remove_meta_box(\'wpseo_meta\', \'review\', \'normal\');
    }
}

2 个回复
SO网友:George G.

降低您的add_action() 打电话来帮忙?这是由Kid SlimmerPiet 在你链接到你的帖子中,在这条评论中→ https://wordpress.stackexchange.com/a/91184/33604

他们的代码示例使用的优先级为10000 而不是99, 就像您正在使用的一样–尝试将您的优先级更新为5001000 或者从什么开始,看看是否有什么变化。

您还可以在添加操作本身之前检查用户功能,这也可以在我上面链接的评论中得到证明。

因此,例如,像这样的事情可能会更好一些:

if( ! current_user_can(\'activate_plugins\') ) {
    add_action(\'add_meta_boxes\', \'hide_yoastseo_metabox\', 1000);
}

function hide_yoastseo_metabox() {
    remove_meta_box(\'wpseo_meta\', \'review\', \'normal\');
}
除了这些建议之外,我唯一能想到的另一件事就是再次检查您的所有值remove_meta_box() – 确保\'wpseo_meta\' 是要删除的Yoast元数据库的正确元数据库id,\'review\' 是要在其上隐藏metabox的正确帖子类型,并且\'normal\' 是您所针对的元数据库的适当优先级。您可以阅读更多关于remove_meta_box() here.

Also, 这不是在侮辱你的智慧,但我很好奇:你是否在不同的能力级别访问“评论”帖子类型的编辑屏幕?如果您只从完全功能的superadmin帐户查看管理中的内容,那么仅适用于有限功能帐户的代码将不会为您运行。确保您有一个测试帐户,该帐户的测试功能有限,并尝试从该帐户中查看内容。

SO网友:Owais Alam
function your_function() {
    global $current_user;
    if($current_user->roles[0] == \'administrator\') {
        add_meta_box(your parameters);
        // fill in your parameters
    }
}
add_action(\'admin_init\',\'your_function\');
结束

相关推荐

有关保存动态Metabox的问题

因此,我对动态待办事项列表元框存在问题。它应该很简单,除了储蓄,其他一切都在起作用。我已经看了5个小时了,需要一些新鲜的眼睛。 function webm_todo_box(){ global $post; ?> <div id=\"meta_inner\"> <?php //get the saved meta as an arry $TodoList = get_po