我有一个自定义的帖子类型guest_blog
注册于\'capability_type\' => \'guest_blog\'
和\'map_meta_cap\' => true
. 我想限制没有publish_guest_blogs
编辑功能guest_blog
具有pending
地位以下是我使用的代码,但它不起作用:
add_filter( \'user_has_cap\', \'wpse_user_has_cap\', 100, 3 );
function wpse_user_has_cap( $allcaps, $caps, $args ) {
if( in_array( $args[0], array(\'edit_guest_blogs\', \'delete_guest_blogs\') )
&& empty( $allcaps[\'publish_guest_blogs\'] ) //user can not publish guest blogs
&& ! empty( $allcaps[\'edit_guest_blogs\'] ) ) //user can edit guest blog
{
// Load the post data:
$post = get_post( $args[2] );
if( $post->post_status == \'pending\' )
$allcaps[$caps[0]] = FALSE;
}
return $allcaps;
}
我是根据Codex中的例子写的(
user_has_cap) 还有WPSE上的一些答案(
1,
2).
然后我发现$args[0]
正在请求edit_posts
而不是edit_guest_blogs
虽然我有\'map_meta_cap\' => true
和$caps[0]
具有实际所需的功能(edit\\u guest\\u blogs)。所以我改了第一行来对照$caps[0]
而不是$args[0]
然后它成功了:
//...
if( in_array( $caps[0], array(\'edit_guest_blogs\', \'delete_guest_blogs\') )
问题是这样做是否正确,以及为什么所有样本都使用
$args[0]
而不是
$caps[0]
? 这两个参数之间有什么区别?