owned mediaウェブ制作に役立つコンテンツを発信中!

WordPressでパスワード保護投稿を扱う時に使える処理やカスタマイズいろいろ

WordPressにはデフォルトで投稿ごとにパスワードを設定し閲覧を制限させる機能が用意されています。使われることは少ない印象ですが要件によっては必要となったり、提案の1つとしてとても有効ですので積極的に活用していきたいですね。今回はこのパスワード保護機能を実装するときに使える処理の例やカスタマイズを色々とまとめていきたいと思います。  
パスワード保護が有効状態での条件分岐
パスワードで保護している場合と保護していない、あるいは解除されている状態で処理を分ける方法です。下記のように「post_password_required()」関数を使うことで、パスワード保護が有効かどうかをチェックすることができますのでこれを利用します。
<?php if( have_posts() ): ?>
  <?php if( post_password_required( $post->ID ) ): ?>

    <!-- パスワード保護中のコンテンツが入る -->
    <?php echo get_the_password_form(); ?>

 <?php else: ?>

    <!-- パスワード解除後のコンテンツが入る -->
    <?php while(have_posts()): the_post(); ?>
    <?php endwhile; ?>

  <?php endif; ?>
<?php else: ?>
  <!-- 投稿がない場合の記述 -->
<?php endif; ?>
  また「get_the_password_form()」関数を使うことで、パスワード保護を解除するためのフォーム要素のHTML一式が出力されます。この関数を使うことで様々な場所にフォームを設置することができますね。  
パスワード保護中の投稿タイトルのプレフィックスをカスタマイズする
パスワード保護状態の投稿にはデフォルトで「保護中:」という文字が自動的に付与されてしまいますが、この文字を変更もしくは削除することができます。下記のように「protected_title_format」のフィルターフックで、挿入するテキストをreturnすることで指定できます。
function prefix_password_protected() {
  return '<span>【パスワード保護】</span>%s';
}
add_filter('protected_title_format', 'prefix_password_protected');
  「%s」はそのままタイトルの文字列になりますので、プレフィックスが不要な場合はこの文字だけ返すようにするとOKです。  
パスワード保護中の投稿抜粋文をカスタマイズする
タイトルと同じく、パスワード保護中の投稿では抜粋文も「この投稿はパスワードで保護されているため抜粋文はありません。」という内容に自動的に変更されてしまいます。こちらもフィルターフックで上書きすることができます。その際には「the_excerpt」のフィルターフックを使うことで、「the_excerpt()」関数を実行した際に書き出される抜粋文に反映されるようになります。
function excerpt_password_protected($excerpt) {
  if(post_password_required()) {
    $excerpt = 'この投稿はパスワードで保護されています';
  }
  return $excerpt;
}
add_filter('the_excerpt', 'excerpt_password_protected');
  上記のようにパスワード保護が有効状態の場合のみ、抜粋文を上書きするようにします。パスワード保護が無効の場合はそのまま抜粋文を出力されるようになっています。  
パスワード保護中の場合に出力されるフォームHTML内のテキストをカスタマイズする
パスワード保護が有効な場合にはパスワード解除用のフォームと説明文などのテキスト要素が一式出力されるようになっています。こちらもデフォルトで表記が決まっているため、テキスト置換を行うことで変更することができます。
function description_password_protected($text) {
  $data_set = array(
    'このコンテンツはパスワードで保護されています。閲覧するには以下にパスワードを入力してください。' => 'このコンテンツの閲覧はパスワードが必要です。',
    'パスワード: ' => '【パスワード】',
    '確定' => '送信'
  );
  $search = array_keys($data_set);
  $replace = array_values($data_set);
  $text = str_replace($search, $replace, $text);
  return $text;
}
add_filter('the_password_form', 'description_password_protected');
  説明文の他にもインプット要素のラベルや送信ボタンの文字など複数箇所存在するので、配列型にしてまとめて置換できるようにしておくと便利ですね。その際にキーには「置換対象となる文字」を、値には「置換後のテキスト」を指定しておきます。  
  今回はWordPressでパスワード保護中の投稿に使えるいろんな処理やカスタマイズ方法についてまとめてみました。フィルターフックも用意されているため、ある程度柔軟に対応できるようですね。パスワード保護が有効な場合にデザインを変えたいというケースには使えるのではないでしょうか。   (参考にさせて頂いたサイト) 【PHP】複数文字列の置換(str_replace) パスワード保護機能をカスタマイズ post_password_required()
  • はてなブックマーク
  • Pocket
  • Linkedin
  • Feedly

この記事を書いた人

Twitter

sponserd

    keyword search

    recent posts

    • Twitter
    • Github
    contact usscroll to top
      • Facebook
      • Twitter
      • Github
      • Instagram