motoyamayuki.com

Blog

WordPressでパスワード保護している投稿ページの本文以外も非表示にする方法

2015.08.02

クライアントへの確認などでパスワード保護を利用することがありますが、その際に困る点として

・the_content 以外の部分は表示されてしまう
・記事一覧ではパスワード保護されている投稿も表示される

この2点があります。
今回は、前者の問題を解決する方法をご紹介します。
後者のカスタマイズは「WordPressでパスワード保護している投稿を一覧から除外する方法」をご覧ください。

やりたいこと

WordPressの設定で、公開状態を「パスワード保護」にした記事の記事ページで、the_content以外の部分も非表示にしたい。

 

解決方法

下記のようなコードでタイトルと本文を表示させているとします。

<article>
  <header>
    <h1><?php the_title(); ?></h1>
  </header>
  <div><?php the_content(); ?></div>
</article>

それを、下記のように書き換えます。

<?php if( !post_password_required( $post->ID ) ) : //パスワードが不要、あるいはパスワードが正しいとき ?>
  <article>
    <header>
      <h1><?php the_title(); ?></h1>
    </header>
    <div><?php the_content(); ?></div>
  </article>
<?php else: //パスワードが必要あるいはパスワードが間違っているとき ?>
  <?php echo get_the_password_form(); ?>
<?php endif; //パスワードチェック終了 ?>

すると、タイトルと本文がともに非表示になります。

順番に説明していきます。
post_password_required関数は、投稿がパスワードを必要としているかどうかをチェックします。必要としている場合にtrueを返すので、それを利用して、パスワードが必要な投稿と不要な投稿を分岐させます。

本来であれば、the_contentがパスワード保護かどうかをチェックしているので、パスワードが必要なときはパスワード入力フォームが表示されるのですが、今回はパスワードが必要なときはthe_contentを呼び出していないので、パスワード入力フォームを表示させる必要があります。
get_the_password_formは、パスワード入力フォームのHTMLテキストを返しますので、それをechoして表示させます。

上記のコードではタイトルと本文を非表示にしますが、もうページごと表示させなくてもいいよ!という場合は、

<?php if( !post_password_required( $post->ID ) ) : //パスワードが不要、あるいはパスワードが正しいとき ?>
  <?php get_header(); ?>
  <div id="main">
    <div class="content">
      <?php while ( have_posts() ) : the_post(); ?>  
        <article>
          <header>
            <h1><?php the_title(); ?></h1>
          </header>
          <div><?php the_content(); ?></div>
        </article>
      <?php endwhile; ?>
    </div>
    <?php get_sidebar(); ?>
  </div>
  <?php get_footer(); ?>
<?php if( !post_password_required( $post->ID ) ) : //パスワードが不要、あるいはパスワードが正しいとき ?>
  <?php echo get_the_password_form(); ?>
<?php endif; //パスワードチェック終了 ?>

このようにしちゃえば、パスワード入力フォーム以外は何も表示されなくなります。

パスワード保護された投稿のページで本文以外にも非表示にしたい項目がある、というのはけっこう需要あるカスタマイズだと思うんですが、解説されているブログが少なかったので書いてみました。

どなたかのお役に立てれば幸いです。

  • このブログをはてなブックマークに追加

Contact

お仕事のご依頼、面白いことのお誘い、一度お話してみたい!などなど、完山祐毅へのお問い合わせは、下記のフォームよりお願いします。送信後、 info@motoyamayuki.com より確認のメールが届きます。
※多くのご相談・ご依頼をいただき誠にありがとうございます。当面のスケジュールが決まっているため、直近での作業が必要なご依頼についてはお請けいたしかねます。大変恐縮ではありますが、あらかじめご了承くださいませ。

お問い合わせフォーム
お名前
メールアドレス
メールアドレス(確認用)
内容
Treble