ユーザー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_cap
とtwo_cap
はどちらもユーザーに対して正しく設定されていますが、custom_role
の符号はなく、デバッグログには何も書き込まれていません。
この原因は何でしょうか。
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