「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」の続編にあたり、PHPの「データ構造」(配列とオブジェクト)について解説します。
配列やオブジェクトは、頭の中で考えるだけでは、イメージがつかみにくいです。本書では図を多用して、配列やオブジェクトをなるべく分かりやすく解説することを心がけました。
Kindle本で、定価250円です。
ユーザーのカスタムフィールドの値でダッシュボードウィジェットの表示を変える
ダッシュボードウィジェットを、ユーザーのカスタムフィールド(チェックボックス)のチェックのあり・なしによって表示・非表示を切り替えたいと思っています。
この質問に答えます。
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.関連記事
ダッシュボードウィジェットの作り方は、以下の記事をご参照ください。