‘super_user’というユーザメタに格納する場合、使い方としてはadd_user_meta($user_id, 'super_user', true, true)
のようにして、特権をはく奪する際はdelete_user_meta($user_id, 'super_user')
で行けるかと。
特権かどうかを把握するにはget_user_meta($user_id, 'super_user', true)
で。
カスタムフィールドを追加するよりは、すべてのユーザについて一元で管理できるような管理画面を管理者向けに作らないと1000人規模は管理できないと思います。
Daisukeさん、お世話になります。
とりあえず、add_user_meta()について理解しようと思いまして、functions.phpに追加してみたり、author.phpに追加してみたりしたのですが、うまくいきません。
テスト的に、ユーザーIDが1のユーザーを特権ユーザーにするとして、functions.phpに下記コードを追加しました。
//▼ユーザー特権の追加
add_user_meta(1, 'super_user', true, true);
そして、author.phpには、下記を追加しました。
<?php //特権ユーザーテスト ?>
<?php If(get_user_meta($user_id, 'super_user', true) ) { ?>
特権ユーザーです
<?php } else { ?>
一般ユーザーです
<?php } ?>
しかし、一般ユーザーとしか表示されずうまくいきません。
何が間違っているのかご教示のほどよろしくお願いいたします。
author.phpには
<?php if(get_user_meta($author, 'super_user', true) ) { ?>
特権ユーザーです
<?php } else { ?>
一般ユーザーです
<?php } ?>
として、ユーザIDを正しく渡してあげれば動くかと。
あ、すみません、authorページのユーザーより、ログインユーザーのidを渡すほうが良いと思ってましたので、
<?php $user_id = get_current_user_id(); ?>
としています。
これでは、うまくいかないのでしょうか?
ログインユーザのIDを渡しているのであれば、それで大丈夫です。
データがうまく取得できないときは、var_dump()を使用してみてください。
今回の場合はvar_dump(get_user_meta($author, 'super_user', true));
ですね。
var_dump()で試してみましたが、やはり、正常に取得できません。
functions.phpで、どのユーザーIDにsuper_userを与えても、author.phpでは、「一般ユーザーです」となってしまいますので、functions.phpでうまくメタ情報が追加されていないような気がしています。
何か記述が間違っているのでしょうか?
functions.phpに直接書いたことがないので断言できませんがadd_user_metaを呼び出すタイミングの問題かもしれません。
こんな感じで、add_actionを通してみてはどうでしょう?
Daisukeさん、ありがとうございます。
私が特権付加のテスト時に、functions.phpから正しくdelete_user_meta()を行っていなかったのが原因でした。
正しく行えば、上記でも、もとの形でもうまくいきました。お騒がせいたしました。
次はこれを実際にどう管理するか…なのですが、私は、ユーザープロフィールにカスタムフィールドを追加するくらいしか思いつきませんでした(そういうプラグインがあるかどうかは分かりませんが)。
Daisukeさんの仰る、すべてのユーザについて一元で管理できるような管理画面とは、どのようなイメージでしょうか?
引き続き、ご指導のほどよろしくお願い申し上げます。
プロフィールにフィールドを追加する方がコードとしては簡単なのですが、1000人いると誰がどのグループの特権管理者なのかが一度わからなくなると、それを探すことが大変になってしまい、プロフィールページを一人一人見ていったら、単なる時間の無駄です。
ですので、イメージとしては
- ユーザグループのリストがずらーっと並んでいて
- それをクリックすると、そのグループのユーザのリストが1行1ユーザの形式で出てきて
- 各ユーザの横のチェックボックスを入れるか外すかだけで特権ユーザの指定ができる
みたいな感じです。
なるほど、理想的な形ですね。
ご紹介いただいたUser Groupsプラグインで、グループごとにユーザーリストを表示することは出来ております。
ですので、問題は、ご提案の3番「各ユーザの横のチェックボックスを入れるか外すかだけで特権ユーザの指定ができる」を実現する方法ですね。
そういったプラグインでもなければ難しいように思うのですが、プラグインなしでも可能なことなのでしょうか?
よろしくお願いいたします。
一番早いのは現在functions.phpに書いているコードもまとめて、自分でプラグインを作って、User Groupsプラグインのデータを読み込んで使うことでしょうか。
他にも、User Groupsプラグインの管理画面を書き換えることなども可能ですがアップデート時に何が起こるかわからないため、お勧めはできません。
ユーザープロフィールページに項目を追加して、それらを一覧にも表示させるには、
//▼ユーザープロフィールに項目追加
function custom_user_meta($custom_field) {
//項目追加
$custom_field['user_authority'] = '特権有無';
return $custom_field;
}
add_filter('user_contactmethods', 'custom_user_meta', 10, 1);
//▼ユーザー一覧に項目追加
function custom_users_columns( $columns ) {
$columns['user_authority'] = '特権有無';
return $columns;
}
function custom_users_custom_column( $dummy, $column, $user_id ) {
if ( $column == 'user_authority' ) {
$user_info = get_userdata($user_id);
return $user_info->user_authority;
}
}
add_filter( 'manage_users_columns', 'custom_users_columns' );
add_filter( 'manage_users_custom_column', 'custom_users_custom_column', 10, 3 );
で出来そうなのですが、その項目をチェックボックスにする方法が分かりません。
何か方法があるのでしょうか?よろしくお願いいたします。
お世話になります。
Advanced Custom Fieldsというプラグインを試してみました。
ユーザープロフィールにチェックボックスは追加できますが、ユーザー一覧にチェックボックスを表示させることは出来ないようです。
やはり、ユーザー一覧表示でチェックボックスを操作することは不可能なのでしょうか。
Daisukeさん、ありがとうございました。
とりあえず、Advanced Custom Fieldsでユーザープロフィールに真偽判定のチェックボックスを追加して、それで対応することとしました。
ご紹介いただいたUser Groupsでグループごとのユーザー一覧表示は可能ですので、その中から特権を与えるユーザーのプロフィールを開いてもらってチェックしてもらうという仕様にします。
一覧表示では、チェックボックスの判定が真の場合は1となりますので、確認は出来る仕様です。
いろいろとご教示くださり、ありがとうございました。
問題は山積で、別のスレッドもたてましたので、今後ともよろしくお願いいたします。