wp_dropdown_users の who が authors の 時 user_level が 0 以上じゃないと 表示されない
user_level は もう使われていないと思ったら まだ 使っているところがありました
wp_dropdown_users に 追加した ユーザ が 表示されずに 原因がわかるまでに 無駄に 時間を使ってしまいました
メンバー紹介ページを作りたい と思いまして
カスタム投稿 だけに アクセスできるユーザー を 作って
そのユーザは 自分の投稿だけを 修正できるようにしたいと 考えました
調べたら 多少古い記事でしたが 良さげな情報でしたので
カスタム投稿タイプと専用のユーザー権限(完結編) | Gatespace's Blogを参考にさせていただきました。
https://gatespace.jp/2012/05/24/custom-post-type-and-user-role-fix/
カスタム投稿タイプ と カスタム役割 の 作成
参考サイトを元に サクッと 作成します
カスタム投稿タイプ
カスタム投稿タイプ を 作る際の注意点としては
'capability_type' => POST_TYPE,
'map_meta_cap' => true,
の 2点です
最初 map_meta_cap
を 設定していなくて 正しく 権限を割り振れなかったので 注意が必要です
関数リファレンス/register post type - WordPress Codex 日本語版
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/register_post_type
カスタム役割
こちらに関しては 参考サイトの コードを 少しカスタマイズして 使いました
ここでは 注意する点は 特にないかと思います
wp_dropdown_users の who が authors の 時
カスタム投稿タイプ と カスタム役割 を 作成しましたが
管理ページ の 投稿者 の プルダウン に 追加した ユーザー が 表示されていないことに気が付きました
これでは 対象の投稿を 割り振ることができません
wp_dropdown_users
まずは /wp-admin/edit.php の ソースコード を 読んで
投稿者 の プルダウン は wp_dropdown_users を 呼び出していることがわかりました
なので wp_dropdown_users に ついて 調べました
wp_dropdown_users() | Function | WordPress Developer Resources
https://developer.wordpress.org/reference/functions/wp_dropdown_users/
get_users で データを 取得していることが わかりました
get_users
今度は get_users を 調べてみます
get_users() | Function | WordPress Developer Resources
https://developer.wordpress.org/reference/functions/get_users/
WP_User_Query で データを 取得していることがわかりました
WP_User_Query
さらに WP_User_Query を 調べてみます
WP_User_Query | Class | WordPress Developer Resources
https://developer.wordpress.org/reference/classes/wp_user_query/
ここで DBから データを 取得していることが わかりました
who が authors の 時は 何をしてるか
WP_User_Query の Who Parameter に 以下の様に 絞り込んでいる事が わかりました
$args = array(
'meta_key' => 'user_level',
'meta_value' => '0',
'meta_compare' => '!=',
'blog_id' => 0
)
$user_query = new WP_User_Query( $args );
user_level を 設定する
wp_dropdown_users の who が authors の 時でも
user_level が 0 以外であれば 表示されることがわかったので
user_level を 設定しようと思います
user_level
まずは user_level について 調べてみました
ユーザーの種類と権限 - WordPress Codex 日本語版
https://wpdocs.osdn.jp/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%81%A8%E6%A8%A9%E9%99%90#.E3.83.A6.E3.83.BC.E3.82.B6.E3.83.BC.E3.83.AC.E3.83.99.E3.83.AB
ユーザーレベルは最終的に、バージョン3.0で非推奨となりました。
と書いてありましたが どうやら まだ 使われている所は あるみたいです
update_user_level_from_caps
user_level は どの様に 設定するのか 調べていたら どうやら update_user_level_from_caps で 設定できることがわかりました
WP_User::update_user_level_from_caps() | Method | WordPress Developer Resources
https://developer.wordpress.org/reference/classes/wp_user/update_user_level_from_caps/
なので まずは add_role した後 add_cap で level_2 等 を 足してあげます
add_role( ROLE_TYPE, __( 'Member', 'translation' ) );
$role = get_role( ROLE_TYPE );
$role->add_cap( 'level_2' );
$role->add_cap( 'level_1' );
$role->add_cap( 'level_0' );
その後 update_user_level_from_caps を してあげます
$users = get_users();
foreach( $users as $user ) {
if( in_array( ROLE_TYPE, $user->roles ) ) {
$user->update_user_level_from_caps();
}
}
この方法で あっているかわかりませんが
これで 管理ページ の 投稿者 の プルダウン から 選択できるようになりました