ワードプレスで会員用ページを作る
「WP自体を会員用として使う」
「シングル記事だけ会員用にする」
「特定カテゴリーの記事のみ会員用にする」
この3つ
まずはじめに、管理人はPHPが読めないので質問は受け付けておりません。
記載されてるコードは、全角文字が含まれてるかもしれないのでコピペの際は要確認
「WP自体を会員専用で使う」
静的サイトに会員専用ページとしてワードプレスを設置した時にログインしないとアクセスできないようにしたりとか
URL/index.html
ホームページはアクセスできるが
URL/member/index.php
ワードプレスのディレクトリからはログインしないとアクセスできない
方法は、wordpress本体の中の「wp-blog-header.php」をエディタで開き、
if (is_user_logged_in()){}else {auth_redirect();}; wp();
を挿入する
Google調べではwp();
の前に挿入するといいとの事
「記事だけ会員専用」
使用コード
<?php if (is_user_logged_in()) { ?>
会員に見せる部分
<? } else { ?>
非会員に見せる部分
<? } ?>
single.phpの中身(テンプレタグは抜粋してます)
<?php get_header(); ?>
<div id="content">
<?php if (is_user_logged_in()) { ?>
<?php if(have_posts()): ?>
<?php while(have_posts()):the_post(); ?>
<div class="post">
<h2><?php the_title(); ?></h2>
<div class="entry">
<?php the_content(); ?>
</div>
</div>
<?php endwhile; ?>
<?php endif; ?>
<? } else { ?>
<div class="post">
<h2>会員専用です</h2>
<div class="entry">
このページは会員専用となっております。閲覧するには会員登録が必要です。
</div>
</div>
<? } ?>
</div>
<?php include (TEMPLATEPATH . '/left.php'); ?>
<?php include (TEMPLATEPATH . '/right.php'); ?>
<?php get_footer() ?>
※テーマスタイルはご自信のに直して下さい
div contentの中に会員用と非会員用の両方を用意する事で、ログインしてない人には「会員専用です」と表示され、ログインすると記事が閲覧できる。
「特定カテゴリーの記事だけ会員専用」
この方法は、管理人がPHPが読めないので、上記の方法とin categoryを組み合わせた結果です。
右脳で組み合わせたので合ってるかどうかは分かりませんが、テストではうまく動作してます。
が、自信は無いのでテーマのバックアップ等は忘れずに
内容としては
「会員にはsingle.phpを表示させるが、非会員にはsingle.phpと同様内容のsingle1.phpを表示し、更に特定カテゴリーに属する記事にアクセスした場合はsingle2.phpを表示させる」といったもの
使用コード
<?php if (is_user_logged_in()) { ?>
会員に見せる部分
<? } else { ?>
非会員に見せる部分
<?php
$post = $wp_query->post;
if ( in_category('カテゴリID') ) {
include(TEMPLATEPATH . '/single2.php');
} else {
include(TEMPLATEPATH . '/single1.php');
} ?>
<? } ?>
single.phpの中身
<?php get_header(); ?>
<div id="content">
<?php if (is_user_logged_in()) { ?>
<?php if(have_posts()): ?>
<?php while(have_posts()):the_post(); ?>
<div class="post">
<h2><?php the_title(); ?></h2>
<div class="entry">
<?php the_content(); ?>
</div>
</div>
<?php endwhile; ?>
<?php endif; ?>
<? } else { ?>
<?php
$post = $wp_query->post;
if ( in_category('5') ) {
include(TEMPLATEPATH . '/single2.php');
} else {
include(TEMPLATEPATH . '/single1.php');
} ?>
<? } ?>
</div>
<?php include (TEMPLATEPATH . '/left.php'); ?>
<?php include (TEMPLATEPATH . '/right.php'); ?>
<?php get_footer() ?>
非会員がカテゴリーID5に属する記事にアクセスしたらsingle2.phpを表示し
非会員がカテゴリーID5以外の記事にアクセスしたらsingle1.phpを表示する
single1.phpとsingle2.phpの中は
single.phpのdiv id=”content”の中に呼び出すので、div id contentや、ヘッダー、フッターなどは外しておく
非会員でも閲覧できる記事を表示させる
single1.phpの中身
<?php if(have_posts()): ?>
<?php while(have_posts()):the_post(); ?>
<div class="post">
<h2><?php the_title(); ?></h2>
<div class="entry">
<?php the_content(); ?>
</div>
</div>
<?php endwhile; ?>
<?php endif; ?>
single2.phpの中身
<div class="post">
<h2>会員専用ページです</h2>
<div class="entry">
このページは会員専用です。
閲覧するには登録が必要です。
</div>
</div>
これで、特定カテゴリーの記事は閲覧できないが、それ以外の記事は閲覧できるようになる。
あとは、用途に応じ
トップページに会員用記事の表示をさせない
カテゴリーリストから会員カテゴリーの除外
検索結果やアーカイブからも除外させた方がいいが、やり方を勉強中なので今回は
例として、ログインした時にだけサーチボックスや月間アーカイブを表示させるのもありかと
検索エンジンにキャッシュさせないや、フィードからも除外とか色々ありそうです
ついでに、ログインフォーム
スタイルシートははお好みで
<div id="userlogin">
<?php
global $user_ID, $user_identity;
get_currentuserinfo();
if (!$user_ID):
?>
<form name="loginform" id="loginform" action="<?php echo get_settings('siteurl'); ?>/wp-login.php" method="post">
<h2>ようこそゲスト</h2>
<p>
投稿するには登録が必要です。
>><?php wp_register('', ''); ?><input type="hidden" name="redirect_to" value="<?php echo $_SERVER['REQUEST_URI']; ?>"/>
</p>
<h2>メンバーログイン</h2>
<label><?php _e('Login') ?>:
<br />
<input type="text" name="log" class="log" value="" size="20" tabindex="7" /></label>
<br />
<label><?php _e('Password') ?>:
<br />
<input type="password" name="pwd" class="pwd" value="" size="20" tabindex="8" /></label>
<div id="remenb">
<input class="checkbox" name="rememberme" type="checkbox" value="forever" tabindex="9" checked="checked" />
記憶する</div>
<input class="submit" type="submit" name="submit" value="<?php _e('Login'); ?> »" tabindex="10" />
<br />
>>パスワードを忘れた
</form>
<?php else:?>
ログイン時表示ここから
<div id="conpane">
<h2>コントロールパネル</h2>
<ul>
<li>Hello! <あ href=”/wp-admin/profile.php”><?php echo $user_identity; ?>
[<あ href="<?php echo get_settings('siteurl') . '/wp-login.php?action=logout&redirect_to=' . $_SERVER['REQUEST_URI']; ?>”><?php _e(’Logout’); ?>]</li>
<li><?php wp_register(); ?>
</li>
<li><あ href=”ドメイン/wp-admin/post-new.php“>新規投稿</li>
</ul>
</div>
<?php endif;?>
</div>
ログインと非ログインでの表示非表示のメモ
その1
<?php if (is_user_logged_in()){ ?>
ログイン時に表示
<?php } else { ?>
非ログイン時に表示
<?php } ?>
その2
<?php
global $user_ID, $user_identity;
get_currentuserinfo();
if (!$user_ID):
?>
非ログイン時に表示
<?php else:?>
ログイン時に表示
<?php endif;?>
参考
Members only sections
テンプレートタグ in category
PR
ログイン前
ログイン後