「ログイン状況によって、表示するカテゴリー項目を制御する その1」で、表示するカテゴリーを制御しました。しかし、これは特定のカテゴリーを非表示にしただけです。つまり、非表示にしたカテゴリーのURLを打ちこむと、表示されてしまい、存在する事が分かってしまいます。
そのような設計では、セキュリティ上よくありませんよね。
その2では、上記のような問題に対処するプログラムを紹介していきます。
1.404エラーページを表示させる
見られたくないカテゴリーのURLを入力されたとき、404エラーページを表示したいので、カテゴリー内を表示しているテンプレートにプログラムを追加します。カテゴリー内を表示しているテンプレート名は、archive.phpです。(テーマを自作している場合などは、テンプレート名が異なる場合があるので注意して下さい。)
さっそくプログラムを追加していきましょう。下記のプログラムは、ログインしていない場合、404エラーページを表示するというプログラムです。
<?php if (!is_user_logged_in()) { include (TEMPLATEPATH . '/404.php'); return; } ?>
上記のプログラムだと、ログインしていない場合、全てのカテゴリーが存在しないことになり、カテゴリー内を見る事ができません。それだと今回の趣旨と異なるので、次のステップに進みましょう。
2.ユーザが開こうとしているカテゴリーのIDを取得する
ユーザが開こうとしているカテゴリーが、見られたくないカテゴリーでなければ、表示してもかまいませんよね?つまり、ユーザが開こうとしているカテゴリーが、見られたくないカテゴリーであれば表示しないようにすればいいので、先程のプログラムに赤い部分のプログラムを追加します。
<?php
$cat = get_the_category(); $cat_now = $cat[0]; $now_id = $cat_now->cat_ID; if ( $now_id == 4 ) {
if (!is_user_logged_in()) { include (TEMPLATEPATH . '/404.php'); return; }
}
?>
$now_idに、ユーザが開こうとしているカテゴリーIDが入っています。今回は、見せたくないカテゴリーのIDを4と仮定します。赤い部分のプログラムを加える事で、「$now_idが4で、なおかつログインしていな場合は、404エラーページを表示する」というプログラムにまります。
これで隠しカテゴリーの完成です。しかし、サイト内検索機能がある場合、検索結果に表示されないようになどの対策も必要になってくるので、まだ完璧という訳ではありません。大切なデータなどの管理には、注意して下さい。
※コードを使うことは、問題ありませんが、全て自己責任でお願いします。