WordPressの特定の記事だけパスワードを設定する

WordPress

一般的なテーマを利用している場合は投稿画面の公開情報でパスワード保護をするだけで簡単に設定できます。

ただ、特殊なテーマだったり特定のプラグインを導入している場合パスワード保護をしていてもページが表示されてしまう場合があります。

今回はsingle.phpに数行追加してパスワードページごと非表示にする方法。

一番上の

<?php
  get_header();
?>

の次の行に

<?php if( !post_password_required( $post->ID ) ) : ?>

一番下の

<?php
  get_footer();
?>

のすぐ上に

<?php else: ?>
<?php echo get_the_password_form(); ?>
<?php endif; ?>

これだけ!

後はパスワード設定したページは一覧からも見えなくしたい&パスワード入力のテキストを変えたいという場合は、functions.phpに以下を追加。

/* PASS */
function my_password_form() {
  return
    '<center><p>パスワードを入力してください</p>
    <form class="post_password" action="' . home_url() . '/wp-login.php?action=postpass" method="post">
    <input name="post_password" type="password" size="22" />
    <input type="submit" name="Submit" value="' . esc_attr__("パスワード送信") . '" />
    </form></center>';
}
add_filter('the_password_form', 'my_password_form');

function customize_main_query ( $query ) {
  if ( ! is_admin() || $query->is_main_query() ) { 
    if ( $query->is_archive() ) {
      $query->set( 'has_password', false );
    }
  }
}
add_action( 'pre_get_posts', 'customize_main_query' );

タイトルとURLをコピーしました