Wordpress - user_has_cap挂钩导致提交访问被拒绝以供审核

时间:2014-09-23 13:51:27

标签: php wordpress hook

我有以下过滤器,除了那些用户是作者的帖子和另一个特定的自定义帖子之外,应删除所有帖子的特定用户角色的编​​辑功能。

function allow_user_to_edit_cpt_filter( $capauser, $capask, $param){

if ( $user->roles[0] == 'aamrole_53e5009d7c32d' ) { 

        // code to get the id of the organisation post 
        $organisation_post = get_field('select_organisation', "user_$user_id") ;

        $user_posts = $wpdb->get_results( "SELECT id, FROM wp_posts  WHERE post_author = " . $user_id , ARRAY_B );
        $allowed_posts = array();

        $user_posts = get_posts( $args );

        if( !empty($user_posts) ){
            foreach($user_posts as $post){
                $allowed_posts[] = $post->ID;
            }
        }
        $allowed_posts[] =  $organisation_post;

        //$allowed_posts = array(2376, 3091);
        $post = get_post( $param[2] );

        //If  post isn't allowed then remove edit capabilities on that post
        if( !in_array( $post->ID, $allowed_posts ) ){
            if( ( $param[0] == "edit_post" ) || ( $param[0] == "edit_published_posts" ) || ( $param[0] == "edit_others_posts" ) ) {
                foreach( (array)$capask as $capasuppr ) {
                   if ( array_key_exists($capasuppr, $capauser) ) {
                        $capauser[$capasuppr] = 0;
                   }
                }
            }
        }
    }  
  return $capauser;
}
add_filter('user_has_cap', 'allow_user_to_edit_cpt_filter', 100, 3 );

此代码的问题在于它拒绝用户提交帖子以供审核。我还安装了AAM(高级访问管理器),我用它来更改不同用户角色的权限。以下是分配给上述代码的角色的功能列表。

  • upload_files
  • edit_posts
  • edit_others_posts
  • edit_published_posts
  • 1级
  • 等级0
  • create_users
  • list_users
  • add_users

我很想知道为什么此过滤器拒绝用户提交帖子以供审核。确切地说,在access denied

的请求期间会出现post.php错误

1 个答案:

答案 0 :(得分:1)

对于任何可能遇到这种情况的人,我当然不确定这是否是正确的方法,但我设法做了我想做的事情。

基本上我在删除功能之前添加了一个if语句

if ( (( 'publish' != $post->post_status ) || ( 'pending' != $post->post_status ) || ( 'auto-draft' != $post->post_status )) && ($post->post_author == $user_id) ) { 
     return $capauser;
}

检查帖子是否已发布待处理或草稿,以及该帖子是否属于该用户。如果这些条件成立,则按原样返回功能。

文档非常similar example