1. まとめトップ

WordPress > ログインしないと見れないカテゴリの作り方

WordPressで、あるカテゴリだけログインしていないと見れないようにする方法です。

更新日: 2012年04月18日

3 お気に入り 4362 view
お気に入り追加

この記事は私がまとめました

mam3さん

WordPressで、あるカテゴリだけログインしていないと見れないようにする方法です。

以下の説明では、staffカテゴリ(slug='staff', id=13)をログインしないと見れなくします。
phpファイルはすべて、テーマフォルダ内に置いてください。(/wp-content/themes/hoge/)

1.header.php

<?php
/* staffカテゴリでログインしていない場合、ログイン画面にリダイレクト*/
if (!is_user_logged_in()) {
if (is_category('staff')) {
auth_redirect();
}
elseif (is_single()) {
$cat = get_the_category();
$cat = $cat[0];
if ($cat->category_nicename == 'staff') {
auth_redirect();
}
}
}
?><!DOCTYPE html>
<html <?php language_attributes(); ?>>

<!DOCTYPE html>より前に入れること。

2.loop-index.php

global $wp_query;
$args = array_merge( $wp_query->query, array('category__not_in' => array(13)) ); /*array('staff')*/
query_posts( $args );
while ( have_posts() ) : the_post();

メインのループで staffカテゴリを除外します。

3.style.css

.cat-item-13 {
display:none;
}

「カテゴリ一覧」ウィジェットから staffカテゴリ(id=13)を消しておきます。(本当は自分でウィジェットを作るべきですが、簡易対策として)

4.RSSテンプレートプラグインの導入

5.feed-rss.php / feed-rss2.php

<?php while (have_posts()) : the_post();
$cat = get_the_category();
$cat = $cat[0];
if ($cat->category_nicename == 'staff')
continue;
?>

カテゴリが staffだったら内容を展開しないようにします。
feed-rdf.php, feed-atom.php も必要に応じて、同様の修正を行います。

6.Ktai Style

ガラケーのために、Ktai Styleプラグインを入れている場合、前述の対策はすべて無効になってしまいますので、Ktai Styleは無効化してください。

追記:対応できました。
Ktai Styleのテンプレートの改造(http://wppluginsj.sourceforge.jp/ktai_style/customize/)のところをよく読んで、wp-content/ktai-themes/ディレクトリーを作ってください。

その中の index.php の先頭あたりに以下のコードを追加します。

} else {
if (is_category('staff') && !is_user_logged_in()) { /* このブロックを追加 */
auth_redirect();
}
?><hr color=<?php echo $ks_settings['hr_color']; ?> /><?php

あと、ループのところにも以下のコードを追加します。

while (have_posts()) : the_post();
if (!is_user_logged_in()) { /* このブロックを追加 */
$cat = get_the_category();
$cat = $cat[0];
if ($cat->category_nicename == 'staff')
continue;
}

あと、WP Super Cacheなどを使用している場合は、「除外するユーザーエージェント」をちゃんと登録して、Ktai Styleを外しておくこと。

7.参考リンク

1