根据状态和用户权能限制对自定义帖子类型的编辑

时间:2014-01-26 作者:Parham

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

1 个回复
SO网友:Dave Warfel

还有一个很棒的article here. 他们会引导您完成他们用来设置它的4个步骤。

结束

相关推荐

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(); 我不知道问题出在哪里?