
Webサイトでログインした人だけに見せるページを作る、というテーマで「WordPressでログインしたユーザーにしか見えないページを作る方法」、「ログイン画面の変更、ログインログアウト後の画面変更」の2つの記事を書きました。今回は見るだけのユーザー購読者がログインしたらツールバーを表示しないようにしたり、購読者がログイン中にログアウトやプロフィールを編集へのリンクを表示する方法について書きたいと思います。
購読者がログインしたときはツールバーを表示しない
前回、見るだけのユーザー「購読者」がログインしたときはダッシュボードに移動しないカスタマイズをしました。ログインするとトップページに移動するのですが、

このように上部にツールバーが表示されてしまいます。管理者はこれで良いのですがただ見るだけのユーザーにとって、このツールバーはあまり必要ないので表示しないようにしたいと思います。
この方法についてもググって調べたところ、
WordPressのログイン後にユーザーの権限によって表示されるページを変更する方法
こちらのページを見つけました。こちらのコードを使わせていただきました。
if(current_user_can('subscriber')){
add_action( 'after_setup_theme', 'subscriber_hide_toolbar' );
}
function subscriber_hide_toolbar() {
show_admin_bar( false );
}
このコードを使っている子テーマのfunctions.phpに追加します。
ちょっと気になったのは、
if(current_user_can('subscriber')){
ここです。字義通り受け止めると 現在のユーザーは購読可能か? のように思えてしまいました。ということは管理者も当然購読可能なので true が返ってきてしまいそう…なので確認してみました。functions.phpに
echo "<pre>";var_dump(current_user_can('subscriber'));echo "</pre>";
こんな感じに current_user_can(‘subscriber’) としたらどのように返ってくるか見てみると、
購読者の場合、

このように true が、
管理者の場合、

このように false が返りました。ということは購読者の時だけ true のようなのでこのif文で購読者かどうかということが確認できることがわかりました。
購読者がログインすると

このようにツールバーが表示されなくなりました。
念のため、管理者がログインすると

ちゃんとツールバーが出ています(^^)/
ログインやログアウト、プロフィール変更へのリンクを表示するウィジェット
このようにツールバーを表示しなくした場合ですが、購読者がログインした後…ログアウトができない(>_<)、ということになってしまいました。ウィジェットで メタ情報 を表示していればできるのですが、メタ情報には他にもいろいろリンクがあるのでなるべくならそれは使いたくありません。
ということで ログインやログアウト、プロフィールを編集へのリンク をサイドバーに表示してみたいと思います。
ウィジェットのテキストでやってみようと思ったのですが、ログアウトするときにURLだけでなくnonce という値が必要だったりするため、ウィジェットを作ることにしました。
WordPress Codexの WordPress ウィジェット API を参考に書いてみます。
class Subscriber_User_Widget extends WP_Widget {
/**
* ウィジェット名などを設定
*/
public function __construct() {
// widget actual processes
parent::__construct(
'foo_widget', // Base ID
__( '購読者ウィジェット'), // Name
array( 'description' => __( '購読者用のログイン、ログアウト、プロフィール変更を表示するウィジェットです。' ), ) // Args
);
}
/**
* ウィジェットの内容を出力
*
* @param array $args
* @param array $instance
*/
public function widget( $args, $instance ) {
// outputs the content of the widget
echo $args['before_widget'];
if (is_user_logged_in()){
if(current_user_can('subscriber')){
// ログアウト、プロフィールを編集表示
echo '<p><a href="'. wp_logout_url(). '">ログアウト</a></p>';
echo '<p><a href="/wp-admin/profile.php">プロフィールを編集</a></p>';
}
} else {
// ログイン表示
echo '<p><a href="'. wp_login_url(). '">ログイン</a></p>';
}
echo $args['after_widget']; }
/**
* 管理用のオプションのフォームを出力
*
* @param array $instance ウィジェットオプション
*/
public function form( $instance ) {
// 管理用のオプションのフォームを出力
}
/**
* ウィジェットオプションの保存処理
*
* @param array $new_instance 新しいオプション
* @param array $old_instance 以前のオプション
*/
public function update( $new_instance, $old_instance ) {
// ウィジェットオプションの保存処理
}
}
add_action( 'widgets_init', function(){
register_widget( 'Subscriber_User_Widget' );
});
このコードを使っている子テーマの functions.php に追加します。
ちょっと長いのですが、Codexからコピーしたものに追加したり変更したりした箇所はわずかです。
function名を My_Widget から Subscriber_User_Widget に変更しました。
ウィジェットの定義の部分を public function __construct() に記述しました。
ウィジェットで表示したい内容を public function widget( $args, $instance ) に記述しました。
add_action の register_widget( ‘My_Widget’ ) を register_widget( ‘Subscriber_User_Widget’ ) に変更しました。
これだけです。
ウィジェットの追加をする

ダッシュボード 外観>ウィジェット をクリック
利用できるウィジェット に

今追加した 購読者ウィジェット が表示されているのでこれをクリックして、

表示したい場所にドロップします。
これで準備はOKです。
ログイン表示の確認
ログアウトしている状態でサイトを見ると、

ログイン が表示されるようになりました。クリックして、

ログインします。
ログイン後の表示の確認

ログインすると ログアウト と プロフィールを編集 リンクに変わりました。

プロフィールの編集 をクリック

プロフィールだけが編集できる管理画面に移動します。

ログアウト をクリックすると、

ログアウトして、また ログイン が表示されました。
管理者でログインした状態だと

このウィジェットは表示されません。
まとめ:ほぼだいたいログインした人にだけに見せるサイトづくりが完成しました
これでほぼだいたい、ログインした人だけに見せるサイト作りが完成しました。あと懸案事項としては、
・ユーザーの新規登録ができるようにしたいけど、自動認証ではなく一旦管理者が確認して承認したい
が残っています。これについてはまだうまくできるかどうか分かっていないので(^_^;、試してみてうまくできるようでしたらそれについてまた書きたいと思います!
[amazon_searchlink search=”WordPressデザイン”]



コメント