如何不允许用户创建新标签,但允许他们使用现有标签


9

我希望某个角色能够添加新标签,但是其他用户应该只能够使用文本栏搜索现有标签。

我知道我可以将标签栏隐藏在侧边栏中,但是我不想要那样。我只想说“对不起,该标签不存在”或有人输入不存在的标签时显示的内容。

有插件或函数可以帮我吗?

Answers:


10

您可以挂钩pre_insert_term,检查分类以及用户是否具有指定角色,如下所示:

function disallow_insert_term($term, $taxonomy) {

    $user = wp_get_current_user();

    if ( $taxonomy === 'post_tag' && in_array('somerole', $user->roles) ) {

        return new WP_Error(
            'disallow_insert_term', 
            __('Your role does not have permission to add terms to this taxonomy')
        );

    }

    return $term;

}

add_filter('pre_insert_term', 'disallow_insert_term', 10, 2);

这样可以防止用户插入新词条,但允许他们搜索新词条并将其添加到帖子中。

请注意,在后期编辑屏幕上,用户可以输入不存在的术语名称,然后按Enter或单击添加按钮,这会将术语添加到DOM,但是,在此之前,术语不会添加到数据库中。用户发布或更新帖子,届时该词将被禁止。


嗨,谢谢您的帮助:)我已经尝试过了,但是似乎没有做任何事情。老实说,这可能是我自己的错。我将粘贴的代码复制到函数中,并且当然更改了“ somerole”位。该角色仍然可以添加标签。
乔恩·鲁弗斯

您要阻止的用户角色是什么?您是否还在尝试防止标签用于正确的分类法(在这种情况下,post_tag而不是其他某些分类法,例如categories或某些自定义分类法)?
亚当

我正在尝试阻止编辑者角色当前执行此操作。这是标准分类法(因此应为post_tag),我仍在测试中,因此我还没有创建其他任何内容。
Jorn Reuvers,2015年

然后开始调试。在wp-config.php设置以下常量,define('WP_DEBUG', true);define('WP_DEBUG_LOG', true);,并 define('WP_DEBUG_DISPLAY', false);随后在功能上面的代码中,登录到一个呼叫error_log($taxonomy);,另一呼叫error_log(implode(', ', $user->roles));,然后再添加一个标签更新帖子,这将然后创建一个debug.log在文件wp-content目录。您需要确定是否正在调用此函数,以及是否正确输入了条件语句,因为此回调对我有用。
亚当

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.