只有管理员才能运行WordPress插件快捷码

时间:2016-07-08 作者:Terungwa

我创建了一个简单的插件,它可以锁定未登录用户的内容,并且工作正常。然而,多作者网站上的任何用户也可以在其帖子中使用相同的短代码来锁定内容。我不想发生这种事。

如何将此功能仅限于管理员?此当前代码出现致命错误:致命错误:调用未定义的函数wp\\u get\\u current\\u user()

public function check_user_role() {
  if(current_user_can( \'activate_plugins\' )) {
        return true;
    }
}
然后,我打算在类构造函数中使用此方法来确定add\\u shortcode()函数是否应该运行。任何关于我应该如何实施这一点的线索都将不胜感激。

2 个回复
SO网友:Ismail

致命错误:调用未定义的函数wp\\u get\\u current\\u user()

可以通过声明check_user_role 仅当WP准备就绪时,连接到wp (使用WordPress函数和方法)或执行其他解决方法。

只需检查manage_options 用户也有相应的功能(或验证管理员是否在角色列表中in_array( "administrator", $current_user->roles ) ):

add_action("wp", function() { 
    function check_user_role() {
        return current_user_can( "manage_options" ) && current_user_can( \'activate_plugins\' );
    }
});
希望这有帮助。

SO网友:Terungwa

为了限制仅在管理员创建的帖子上使用快捷码,我需要检查查看帖子的作者是否是管理员,如代码所示if ( user_can( $post->post_author, \'activate_plugins\' ) ). 如果不是,则返回内容,而不执行do_shortcode($content) 作用

这个current_user_can() 函数不合适,因为它检查的是当前用户,而不是文章作者。

public function check_login($atts, $content = null)
{         
    if (is_user_logged_in() && !is_null($content) && !is_feed())
    {             
        return do_shortcode($content);         
    }
    else
    {
        global $post;           
        if ($post instanceof \\WP_Post) {
            if ( user_can( $post->post_author, \'activate_plugins\' ) ) {
                return \'<p>You must be logged in to view this post..</p>\';   
            }
            return $content; 
        }           
    }
}
我希望这对其他人有帮助。

相关推荐