
WordPressには、固定ページ、投稿ページにパスワード保護できる機能がついています。
特定のユーザーにだけ見せたいコンテンツがあるときにライトな使い方として便利です。
ただ、2つ難点があって、まずひとつが、投稿のカテゴリーページ(アーカイブページ)はパスワード保護できないという点。
どうなるかというと、詳細ページではコンテンツを隠しても一覧では表示されてしまうことになります。
タイトルぐらいなら見せても問題ない、というコンテンツならそれでも構わないのですが、なんにも見せたくない、という場合、アーカイブページにもパスワードロックが必要になります。
2つ目の難点が、パスワード保護は1ページ1ページに設定しなければならないという点。
数十数百ページがあるような場合、1ページずつパスワードを入力していくのは大変な作業ですよね。
これらを同時に解決する方法を今回はご紹介します。
ポイントは2つ。
アーカイブページにパスワードをかけられないなら、詳細ページをアーカイブページにしてしまってそれにパスワードをかけてやれ、ということです。
さて、手順です。
過去の事例もフル活用します。
<?php get_header(); ?>
<div>
<?php
while(have_posts()) {
the_post();
the_content(); //コンテンツ入力フォームには何も入っていなくても、パスワード入力フォームを出すためだけにこの宣言が必要です
if (!post_password_required()) { // パスワード認証済みなら
if (is_single('XXX')){ // xxx は第一階層(アーカイブページとする)のページのページID
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$post_id = get_the_ID();
$the_query = new WP_Query( array(
'post_status' => 'publish',
'post_type' => 'post',
'paged' => $paged,
・・・
'post_parent__in' => array($post_id,)
) );
if ($the_query->have_posts()) :
$html = '';
while ($the_query->have_posts()) : $the_query->the_post();
//一覧に表示する処理を書きます
endwhile;
$html .= '</ul></div>';
else :
$html = '<div><p>ありません。</p></div>';
endif;
echo $html;
?>
<div class="pnavi">
<?php //ページリスト表示処理
global $wp_rewrite;
$paginate_base = get_pagenum_link(1);
if(strpos($paginate_base, '?') || ! $wp_rewrite->using_permalinks()){
$paginate_format = '';
$paginate_base = add_query_arg('paged','%#%');
}else{
$paginate_format = (substr($paginate_base,-1,1) == '/' ? '' : '/') .
user_trailingslashit('page/%#%/','paged');
$paginate_base .= '%_%';
}
echo paginate_links(array(
'base' => $paginate_base,
'format' => $paginate_format,
'total' => $the_query->max_num_pages,
'mid_size' => 1,
'current' => ($paged ? $paged : 1),
'prev_text' => '< 前へ',
'next_text' => '次へ >',
)); ?>
</div>
<?php
wp_reset_query();
}else{ // 第二階層(詳細ページとなる)のページなら
//普通の投稿ページの処理なので省略
}
}
}
?>
</div>
<?php get_footer(); ?>
内容は参考にしてもらって、あとはご自身のやりたい処理を書くようにしてください。
これで処理そのものは完成です。
処理はできましたので、最後にパスワードを1つ1つの記事に入れていく作業を削減するためにプラグインを導入します。
このプラグインを有効にして親記事にパスワードを入れると、自動で子記事も同じパスワードで設定することができます。
ふぅ。
案外長くなりましたが、これで、商品の情報を業者のみに見せ、通常のユーザーには一切の情報を伏せる(一覧すらも見せない)ようなサイトができますね。
WordPressカスタマイズ事例やウェブ制作ノウハウの新着情報、お役立ち情報を
リアルタイムにメルマガ配信!