我有一个自定义的帖子类型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]? 这两个参数之间有什么区别?