MTS Customer活用ガイド

活用ガイドの内容は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">このページの続きを読む &raquo;</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">このページの続きを読む &raquo;</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>このページの続きを読む &raquo;</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’)」のように配列にセットされているので注意して下さい。