「WordPressで学ぶPHP(4)通信編」を発売しました。
本書は、「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造編」「WordPressで学ぶPHP(3)関数編」の続編にあたり、Webブラウザとサーバー(PHP)との通信と、PHPから他のサーバーに通信することについて解説します。
ユーザーのカスタムフィールドの値でダッシュボードウィジェットの表示を変える
ダッシュボードウィジェットを、ユーザーのカスタムフィールド(チェックボックス)のチェックのあり・なしによって表示・非表示を切り替えたいと思っています。
この質問に答えます。
1.ユーザーの情報を得る
ダッシュボードウィジェットのテンプレートの中で、ユーザーの情報を得るには、MTAuthorsタグでユーザーの情報をすべて読み込んだ上で、現在ログイン中のユーザーかどうかを調べるようにします。
また、現在ログイン中ユーザーのIDは、変数author_idに代入されています。
なお、MTAuthorsタグでユーザーを読み込む際には、「need_entry="0"」と「role="ロール名"」のモディファイアを指定して、ブログ記事がないユーザーも含み、かつ特定のロールを持つユーザーを読み込むようにします。
たとえば、「ブログ管理者」か「ライター」か「ユーザー」のロールがあるユーザーを読み込み、その中で現在ログイン中のユーザーだけ何かを表示するようにするには、テンプレートに以下のような部分を入れます。
<mt:Authors need_entry="0" role="ブログ管理者 OR ライター OR ユーザー"> <mt:If tag="AuthorID" eq="$author_id"> 表示する内容 </mt:If> </mt:Authors>
2.特定のユーザーだけダッシュボードウィジェットを追加できるようにする
1.で挙げた方法を使うと、ユーザーに応じてダッシュボードウィジェットの表示内容を変えることはできます。
ただ、今のままだと、ダッシュボードウィジェットを選択するドロップダウンで、どのユーザーでもダッシュボードウィジェットを追加することができます。
特定のユーザーだけダッシュボードウィジェットを追加できるようにしたいとなると、1.だけでは不十分です。
ダッシュボードウィジェットを追加できるかどうかを指定するには、テンプレートではなく、config.yamlにPerlのコードを書く必要があります。
質問の例では、チェックボックスのカスタムフィールドのオン/オフで、表示するかどうかを変えたいということでした。
この場合、config.yamlの「widgets:」以下を以下のように書きます。
「カスタムフィールドのベースネーム」の部分は、実際のベースネームに置き換えます。
widgets: ウィジェット名: label: ウィジェットの名前 (途中略) condition: > sub { use CustomFields::Util qw( get_meta ); my $app = MT->instance; my $author = $app->user; my $meta = get_meta($author); return $meta->{カスタムフィールドのベースネーム}; }
3.関連記事
ダッシュボードウィジェットの作り方は、以下の記事をご参照ください。