web-dev-qa-db-ja.com

管理者に追加の役割を追加する

ユーザー19はWP Adminです。

$user = new WP_user( 19 );
$user->add_role( 'custom_role' );

上記のコードは動作し、custom_roleロールを追加します。

しかし、personal_options_updateフックとedit_user_profile_updateフックで同じコードを実行すると、実行されません。

ユーザープロファイルページにチェックボックスを追加しました。その後、上記の両方のフックから呼び出された関数...

if( user_can( $user_id, 'administrator' ) ) {
    $user = get_user_by( 'id', $user_id );      
    if( ! empty( $_POST['my_checkbox'] ) )  {

        update_user_meta( $user_id, 'my_checkbox', true );
        $user->add_cap( 'one_cap' );
        $user->add_cap( 'two_cap' );
        $user->add_role( 'custom_role' );

    }
}

one_captwo_capはどちらもユーザーに対して正しく設定されていますが、custom_roleの符号はなく、デバッグログには何も書き込まれていません。

この原因は何でしょうか。

1
Mike

profile_updateフックを使用し、フックされた関数で、更新時に以前のデータをユーザープロファイルに追加していることを確認するためにこのチェックを実行します。

if ( $update ){
        do_action('profile_update', $user_id, $old_user_data);
}else{
        do_action('user_register', $user_id);
}
return $user_id;

この答えはあなたがそれを理解するのに役立ちます。 WordPressのedit_user_profile_update update secondary role

1
Nabeel Khan