我试图在前端输出一个“删除评论”链接。以下是我迄今为止的尝试:
printf(
\'<a href="%s">%s</a>\',
wp_nonce_url(
admin_url( "comment.php?c=$comment_id&action=deletecomment" ),
\'delete-comment_\' . $comment_id
),
__( \'Delete comment\', \'text-domain\' )
);
我添加了
edit_comment
cap到作者角色。然而,当我以作者身份登录并单击“删除评论”时,我会在一个白色的死亡屏幕上看到以下消息:
抱歉,您不允许编辑此帖子的评论。
感谢您使用WordPress创建。
版本4.7.4
如何输出有效的永久删除注释链接?
最合适的回答,由SO网友:birgire 整理而成
经过短暂测试后,OP中的代码片段似乎可以正常工作:
printf(
\'<a href="%s">%s</a>\',
wp_nonce_url(
admin_url( "comment.php?c=$comment_id&action=deletecomment" ),
\'delete-comment_\' . $comment_id
),
esc_html__( \'Delete comment\', \'text-domain\' )
);
但看起来我们必须确保作者
deleting comments on hir own post, 否则它将查找
edit_others_posts
和
edit_published_posts
基本功能。这个edit_comment
不是一种基本功能,因此我们必须查看map_meta_cap()
函数查看它所依赖的基本功能。我们可以看到edit_comment
是一种元功能,它使用:
$caps = map_meta_cap( \'edit_post\', $user_id, $post->ID );
对于非孤立注释。然后我们要看看edit_post
元功能映射到其他基本功能。那里几乎没有可能的映射,例如到edit_others_posts
和edit_published_posts
基本功能。Jean Galea写了一本很棒的书article 关于角色和能力,其中指出:
基本功能分配给用户角色绝不应将元功能分配给角色