我遇到了这个问题,下面的代码对于任何post ID
提供给它。
current_user_can(\'delete_posts\', $post_id);
通常,当用户不是帖子的作者或无法删除其他帖子时,上述代码应返回false。但是,对于任何post ID,它仍然返回true。
已为用户分配了自定义角色,定义如下。
$standard_role_capabilities = array (\'read\' => true,
\'delete_posts\' => true,
\'edit_posts\' => true,
\'delete_published_posts\' => true,
\'publish_posts\' => true,
\'edit_published_posts\' => true,
\'comment\' => true
);
add_role(\'standard\', \'Standard\', $standard_role_capabilities);
这不起作用的原因是什么?
最合适的回答,由SO网友:John 整理而成
经过数小时的斗争,这项工作终于开始了,这只是一个改变的问题delete_posts
到delete_post
.
因此,总体而言,这将是:
current_user_can(\'delete_posts\', $post_id);
到
current_user_can(\'delete_post\', $post_id);
current_user_can
接受第二个参数。虽然函数声明在
capabilities.php
没有定义@amit指出的第二个参数。也许有人能澄清为什么会这样。
SO网友:amit
编辑-
还有另一个功能
author_can() 它将接受post ID。
current_user_can()
函数仅接受one parameter, 我们无法将post id传递给它。
参数-
$capability
(string) (required) capability
Default: None
示例-
May be this is not the best way to achieve what you\'re looking for - 我猜在下面的代码中,if块只会在当前用户
author
并具备以下能力——
delete_posts
<?php
$current_user = wp_get_current_user();
$author = get_the_author_meta(\'ID\');
if ( current_user_can(\'delete_posts\') && ( $current_user->ID == $author ) ) {
// when current user is author with `delete_posts` capability
}
?>
更新-允许用户删除自己的帖子,但不允许删除其他帖子
如果删除基于帖子的作者,则管理员将无法删除帖子,即使管理员具有权限
将if语句更改为以下内容-
if ( current_user_can(\'activate_plugins\') || ( $current_user->ID == $author ) )
{
// when current user is author or admin
}