web-dev-qa-db-ja.com

add_capは、配列内の最初の2つだけを追加します

コード内の問題を追跡しようとした数日後、add_capは配列内の最初の2つだけを取得していることがわかりました。最初のもの(エディタ)はデータベースにdelete_others_pagesとdelete_others_postsを追加するだけです。 add_capを繰り返す2番目の方法を使用すると、すべての機能をデータベースに取り込むことができます。

誰かがこのコードを見て何が悪いのかを知ることができますか?配列の最初の2項目だけがデータベースに入るのはなぜですか?

        if( $new_roles == 'editor' ) {

            $user = new WP_User( $user_id );

            $user->add_cap(
                'delete_others_pages','delete_others_posts','delete_pages','delete_posts','delete_private_pages','delete_private_posts','delete_published_pages','delete_published_posts','edit_others_pages','edit_others_posts','edit_pages','edit_posts','edit_private_pages','edit_private_posts','edit_published_pages','edit_published_posts','manage_categories','manage_links','moderate_comments','publish_pages','publish_posts','read','read_private_pages','read_private_posts');

        }

        elseif( $new_roles == 'author' ) {

            $user_id = $XF->visitor->get('user_id');

            $user = new WP_User( $user_id );

            $user->add_cap(
                'delete_posts', 'delete_published_posts'
            );

            $user->add_cap(
                'edit_posts', 'edit_published_posts'
            );

            $user->add_cap(
                'publish_posts', 'read', 'upload_files'
            );

            $user->add_cap(
                'upload_files'
            );

        }

完全な機能を配置するためのUPDATE CODE:私の最初の質問には答えますが間違ったユーザーに追加されるように配列を追加します。

public static function set_user_roles( &$classObj, $user_group_id, $secondary_group_ids ) {
    /**
     * Function set_user_roles(&$classObj, $user_group_id, $secondary_group_ids)
     * 
     * This function sets the current user role based on the secondary group
     */
    global $XF, $wp_roles;
    $user_groups = explode( ',', $secondary_group_ids );
    $user_groups[] = $user_group_id;

    /**
     * Loop through the user_roles and find the WP role equivalent for each
     */
    $user_roles = array();
    foreach( $user_groups as $user_group ) {
        $user_roles[] = $XF->options['xf_user_role'][$user_group];

        /**
         * wp_die( 'This is the role:' . var_dump( $XF->options['xf_user_role'] ) );
         * 
         * Returns:
         *
         * array(7) { [3]=> string(13) "administrator" [4]=> string(6) "author" [2]=> string(10) "subscriber" [1]=> string(10) "subscriber" [5]=> string(6) "author" [7]=> string(11) "contributor" [6]=> string(6) "editor" }
         */

        /**
         * wp_die( var_dump( $XF->options['xf_user_role'][$user_group] ) ); 
         *
         * Returns for user Ellie who has secondary group related to author
         * string(6) "author"
         * 
         * Returns Albert who has secondary group set to editor
         * string(6) "editor"
         *
         * Returns Pascal who has secondary group related to contributor
         * string(11) "contributor"
         *
         * Returns Gracie NO secondary group for registered members.
         * NULL
         *           
         */


        $new_roles =  $XF->options['xf_user_role'][$user_group];

        if( $new_roles == '' || $new_roles == null) {

            $user_id = $XF->visitor->get('user_id');

            $caps = array( 'read' );

            $user = new WP_User( $user_id );

            foreach ( $caps as $cap ) {

                $user->add_cap( $cap ); 

            }
            break;

        }

        elseif( $new_roles == 'subscriber' ) {

            $user_id = $XF->visitor->get('user_id');

            $caps = array( 'read' );

            $user = new WP_User( $user_id );

            foreach ( $caps as $cap ) {

                $user->add_cap( $cap ); 

            }
            break;

        }

        elseif( $new_roles == 'contributor' ) {

            $user_id = $XF->visitor->get('user_id');

            $caps= array( 'delete_posts', 'edit_posts', 'read' );

            $user = new WP_User( $user_id );

            foreach ( $caps as $cap ) {

                $user->add_cap( $cap ); 

            }
            break;

        }

        elseif( $new_roles == 'author' ) {          

            $user_id = $XF->visitor->get('user_id');

            $caps = array(
                'delete_posts', 'delete_published_posts','edit_posts', 'edit_published_posts','publish_posts', 'read', 'upload_files','upload_files'
                );

            $user = new WP_User( $user_id );

            foreach ( $caps as $cap ) {

                $user->add_cap( $cap ); 

            }
            break;

        }           

        elseif( $new_roles == 'editor' ) {

            $user_id = $XF->visitor->get('user_id');

            $caps = array ( 
                'delete_others_pages','delete_others_posts','delete_pages','delete_post','delete_private_pages','delete_private_posts','delete_published_pages','delete_published_posts','edit_others_pages','edit_others_posts','edit_pages','edit_posts', 'edit_private_pages','edit_private_posts','edit_published_pages','edit_published_posts','manage_categories','manage_links','moderate_comments','publish_pages','publish_posts','read','read_private_pages','read_private_posts'
            );

            $user = new WP_User( $user_id );

            foreach ( $caps as $cap ) {

                $user->add_cap( $cap ); 

            }
            break;

        }

        elseif( $new_roles == 'administrator' ) {

            $user_id = $XF->visitor->get('user_id');

            $caps = array ( 
                'activate_plugins', 'delete_others_pages','delete_others_posts','delete_pages','delete_plugins','delete_posts','delete_private_pages','delete_private_posts','delete_published_pages','delete_published_posts','edit_dashboard','edit_files','edit_others_pages','edit_others_posts','edit_pages','edit_posts','edit_private_pages','edit_private_posts','edit_published_pages','edit_published_posts','edit_theme_options','export','import','list_users','manage_categories','manage_links','manage_options','moderate_comments','promote_users','publish_pages','publish_posts','read_private_pages','read_private_posts','read','remove_users','switch_themes','upload_files','create_product'
            );

            $user = new WP_User( $user_id );

            foreach ( $caps as $cap ) {

                $user->add_cap( $cap ); 

            }
            break;

        }


    }

}

更新:機能は追加されていますが、現在すべてのアカウントは管理者機能を取得しています。これは今尋ねられています: 編集者と貢献者の役割は関数を追加した後正しくありません

1
LPH

あなたのコードを見て、私はあなたが既存の役割の機能を変更しようとしていると思います。私は正しいですか?

そのためには、ユーザーオブジェクトではなくロールオブジェクトに対してadd_capを実行する必要があります。また、add_capは文字列として1つの機能しか受け付けないことを知っておく必要があります。

 $role = get_role( 'editor' );
 $role->add_cap( 'the_capability' );

複数の機能を追加したい場合は、ループを実行できます。例えば:

$capabilities = array( 'cap_1', 'cap_2', 'cap_3' );
$role = get_role( 'editor' );

foreach( $capabilities as $cap ) {
        $role->add_cap( $cap );
}

ユーザーオブジェクトに対してadd_capを実行する場合も同様です。

//example of user ID
$user_id = 25
$capabilities = array( 'cap_1', 'cap_2', 'cap_3' );
$user = new WP_User( $user_id );

foreach( $capabilities as $cap ) {
        $user->add_cap( $cap );
}
3
cybmeta