检查用户是否可以删除给定的帖子

时间:2012-08-22 作者:John

我遇到了这个问题,下面的代码对于任何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);
这不起作用的原因是什么?

3 个回复
最合适的回答,由SO网友:John 整理而成

经过数小时的斗争,这项工作终于开始了,这只是一个改变的问题delete_postsdelete_post.

因此,总体而言,这将是:

current_user_can(\'delete_posts\', $post_id);

current_user_can(\'delete_post\', $post_id);

current_user_can 接受第二个参数。虽然函数声明在capabilities.php 没有定义@amit指出的第二个参数。也许有人能澄清为什么会这样。

SO网友:Mamaduka

如果要检查用户是否可以删除其他作者的帖子,则需要使用适当的功能-delete_others_posts.

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
    }

结束

相关推荐

PHP致命错误:无法为wp-includes/capabilities.php中的非对象调用重载函数

我在apache日志中遇到了太多以下错误。PHP Fatal error: Cannot call overloaded function for non-object in wp-includes/capabilities.php on line 1187这是函数current\\u user\\u can($capability)的内部,第1187行如下所示:$current_user = wp_get_current_user(); 我不知道问题出在哪里?