Wordpress Tips

2016.02.22

WP-Members -カスタムフィールドを含んだ記事を管理画面から制御-

カテゴリー:

こんにちは。
WP-Membersで会員非会員の記事を出し分けるのに困ったとき、対処した方法を書きます。
WP-Membersではデフォルト機能として、記事編集画面のチェックボックスにチェックを入れることで、会員ユーザーにしか記事を読めないようにすることが可能です。

ただし、表示・非表示にできる部分はあくまでthe_content()で出力される内容ですので、ブロックにチェックを入れても、カスタムフィールドはどのユーザーにも表示されてしまいます。

カスタムフィールドしか使っていない投稿だとチェックしたのに、全部でてる!!!という現象に陥ります。

そこで、チェックボックスの値を取得してログインしている時、ログインしていない時で条件分岐して、カスタムフィールドの表示・非表示を制御します。

ダウンロード

WP-Membersの設定① まずは管理画面からデフォルトで記事をブロックするか、ブロックしないかを設定
WP-Membersの設定② 管理画面の記事編集画面でブロックするかブロックさせないかを設定
条件分岐でカスタムフィールドの表示・非表示を出し分ける ログインしている時、していない時で編集画面のチェックボックスの値を取得して、記事を出し分ける

WP-Membersの設定

WP-Membersの設定①

管理画面WP-Membersの設定でオプション設定を
今回はデフォルト設定を公開にしておきます。
Content Blocking の項目をDo not Blockとする
この設定で、すべての記事はユーザー全員に公開されます。

WP-Membersの設定②

投稿編集画面で下記のPostsRestrictionのblockにチェックを入れる。
そうすると記事がブロックされ、ログインユーザー(会員)からしか見れなくなります。

wpmember01

これで非ログインユーザー(非会員)が見れなくなるのは、あくまでもthe_content()で出力される内容です。
カスタムフィールドは全て出てしまいます。

条件分岐でカスタムフィールドを出し分ける

投稿画面blockのチェックボックスの値が必要になります。
下記でチェックが入っているか入っていないかを取得しましょう。

<?php if (get_post_meta($post->ID, '_wpmem_block', true)) : ?>

上記でチェックボックスの値を取得できるので、次に条件分岐で表示・非表示にしたい内容を記述していきます。
<br />
<?php if (have_posts()) : ?><br />
	<?php while (have_posts()) : the_post(); ?><br />
		<?php if (is_user_logged_in()) : ?><br />
		<!--ログインしてる時の内容--><br />
		<?php else ://ログインしてない場合 ?><br />
			<?php if (get_post_meta($post->ID, '_wpmem_block', true)) : ?><br />
			<!--ログインしていなくてチェックが入っている時の内容--><br />
			<?php else ://チェックしてない場合 ?><br />
			<!--ログインしていなくてチェックが入っていない時の内容--><br />
			<?php endif; ?><br />
	<?php endwhile; ?><br />
<?php endif; ?><br />

これでチェックボックスで管理画面からカスタムフィールドも表示・非表示を設定できるようになりました!

ダウンロード

ご相談・ご依頼に関して、まずは

ください。お気軽にどうぞ