知行合一

とか言ってみる

【Wordpress】WP-Membersで会員登録機能をつける

Wordpressで会員機能をつけた時のメモ
参考
WordPress 会員制サイトの作り方 WP-Members | hijiriworld Web

プラグインはこちら

「WP-Members」

(WP-Members: Membership Framework — WordPress Plugins)

退会機能をつけるなら

「Never Let Me Go」

(Never Let Me Go — WordPress Plugins)をインストール。(今回は説明しない)
間違って管理者アカウント消してしまった時はこちらへ。笑
【WordPress】adminの管理者アカウントの追加 - 知行同一


自分がしたかったのは

  • 基本的に会員じゃないと記事は見れない。たまに1つくらい会員じゃなくても見れる。
  • 普通の投稿とカスタム投稿の両方
  • homeに投稿一覧とカスタム投稿の一覧を表示させるがそれもブロック

◼︎基本的にブロックするのかしないのか

WP-Membersのオプション設定のContent Blockingをブロックにする。
同じ画面の一番下の辺のカスタム投稿タイプAdd to WP-Members Settingsに適用させたいカスタム投稿にチェックする。

◼︎シングルページ以外の制限のかけ方

参考サイトにもあるようにアクセス制限は、パーマリンクのURL単位で設定される。
なので、シングルページには制限をかけられるが、homeの記事一覧とかに制限をつけるならちょっとソース弄るよということです。

今回はhomeに記事一覧を表示させたかったので、以下のように分岐した。

<?php if (get_post_meta($post->ID, 'unblock', true)) : ?>
		<?php the_excerpt(); ?>
	<?php else : ?>
		<?php if (is_user_logged_in()) : ?>
			<?php the_excerpt(); ?>
		<?php else : ?>
			<p>こちらの記事は会員限定の記事になります。ログインまたは会員登録をしてからお楽しみください。</p>
		<?php endif; ?>
<?php endif; ?>

シングルページはこんな感じ。

<?php if (get_post_meta($post->ID, 'unblock', true)) : ?>
		<?php echo get_the_content(); ?>
	<?php else : ?>
		<?php if (is_user_logged_in()) : ?>
			<?php echo get_the_content(); ?>
		<?php else : ?>
			<p>こちらの記事は会員限定の記事になります。ログインまたは会員登録をしてからお楽しみください。</p>
	<?php endif; ?>
<?php endif; ?>

カスタムフィールドに値を設定するのだが、毎回入力するのは面倒なので「Advanced Custom Fields」Advanced Custom Fields — WordPress Pluginsというプラグインを利用した。
新しくフィールドグループを作り、フィールド名に「unblock」、フィールドタイプ「真 / 偽」にして全員に公開するときにチェックを入れるようにした。
この設定後に新規で作成した記事から反映されるっぽいので(?)注意した方がよいかも。

これでログインしてるかどうかで記事の表示を切り替えることができる。