活用ガイドの内容はWordPressのテーマとテンプレートについてご存知の方を対象に説明いたします。またテンプレートを操作するにはPHPプログラムを利用したWordPressの関数を使うため、PHP言語について知識があると理解しやすいです。
ログインユーザーのみ閲覧できるようにするには
テンプレートには必ず本文を表示する部分があります。仕掛けはその表示手前でログインユーザーか確認し、ログインユーザーならそのまま本文を表示、ログインしていなければ非表示メッセージを表示するようにテンプレートを作る事です。
以下WordPress Codex 日本語版のページのテンプレートの説明ページを元に追加方法を説明します。先ずはWordPressのループの部分だけ以下に抜き出して表示します。
<?php if (have_posts()) : while(have_posts()) : the_post(); ?> <div class="post"> <h2 id="post-<?php the_ID(); ?>"><?php the_title(); ?></h2> <div class="entrytext"> <?php the_content('<p class="serif">このページの続きを読む »</p>'); ?> </div> </div> <?php endwhile; endif; ?>
ログインユーザーの確認は「is_user_logged_in()」関数を使います。それではログインユーザーのみ内容を表示、それ以外のアクセスは非表示メッセージを表示するように、上記のソースを変更してみます。
<?php if (have_posts()) : while(have_posts()) : the_post(); ?> <div class="post"> <?php if (is_user_logged_in()) : ?> <h2 id="post-<?php the_ID(); ?>"><?php the_title(); ?></h2> <div class="entrytext"> <?php the_content('<p class="serif">このページの続きを読む »</p>'); ?> </div> <?php else : ?> <h2>ログインして下さい</h2> <p>登録ユーザーのみ閲覧可</p> <?php endif; ?> </div> <?php endwhile; endif; ?>
さて、このままではログインしていないと全てのページが表示されなくなります。表示ページにより誰でも閲覧できるものと、ログインユーザーのみのページと分けたいものです。それにはWordPressの持つ機能をもう少し使います。
WordPressにはご存知のように「カスタムフィールド」と呼ばれる、管理者が自由に設定できる項目を投稿データに付加する事ができます。
既にお気付きいただいたように、ログインユーザーのみ表示したいページにカスタムフィールドにデータを設定し、上の方法を組み合わせて表示を制限するようにします。次がそのサンプルです。ここではカスタムフィールドに「customer_page」という名前を使い、数字の「1」を登録しておくとします。
<?php if (have_posts()) : while(have_posts()) : the_post(); ?> <div> <?php $post_meta = get_post_meta($post->ID, 'customer_page', true); if (is_user_logged_in() && 1 <= $post_meta) : ?> <h2 id="post-<?php the_ID(); ?>"><?php the_title(); ?></h2> <div> <?php the_content('<p>このページの続きを読む »</p>'); ?> </div> <?php else : ?> <h2>ログインして下さい</h2> <p>登録ユーザーのみ閲覧可</p> <?php endif; ?> </div> <?php endwhile; endif; ?>
ログインユーザーの登録情報の参照方法
MTS Customer プラグインによりユーザーに追加された項目のフィールド名は以下の通りです。
- 会社名:mtscu_company
- 氏名フリガナ:mtscu_furigana
- 郵便番号:mtscu_postcode
- 住所1:mtscu_address1
- 住所2:mtscu_address2
- 電話番号:mtscu_tel
次のようにPHPでプログラムを組み込めば参照できるようになります。なおデータは扱い易いように配列にセットします。
$customer = array(); if (is_user_logged_in()) { global $current_user; get_currentuserinfo(); $customer['company'] = get_the_author_meta('mtscu_compnay', $current_user->ID); $customer['name'] = (empty($current_user->last_name) ? '' : "$current_user->last_name ") . $current_user->first_name; $customer['furigana'] = get_the_author_meta('mtscu_furigana', $current_user->ID); $customer['email'] = $current_user->user_email; $customer['postcode'] = get_the_author_meta('mtscu_postcode', $current_user->ID); $customer['address1'] = get_the_author_meta('mtscu_address1', $current_user->ID); $customer['address2'] = get_the_author_meta('mtscu_address2', $current_user->ID); $customer['tel'] = get_the_author_meta('mtscu_tel', $current_user->ID); $customer['user_id'] = $current_user->ID; }
となります。
「顧客」ロールを確認したいときは「$current_user->roles」を参照しますが、「array(‘customer’)」のように配列にセットされているので注意して下さい。