WordPressで会員制サイトを作るためのプラグイン「WP-Members」、めっちゃ便利ですねこれ。
会員登録機能も簡単に作れて、記事に閲覧制限もかけられる。
ただし、閲覧制限で非表示になる部分は投稿コンテンツ(the_content();)のみなので、カスタムフィールドを使っている場合、カスタムフィールドにも閲覧制限設定を実装する必要があります。
そんなに難しくないので、サクッとやっちゃいましょう。
実装
まず、「記事に閲覧制限をかけているかどうか」を取得します。下記を記事用テンプレートに記述。
1 |
$block_flag = get_post_meta($post->ID, '_wpmem_block', true); // 閲覧制限のチェック |
閲覧制限がかかっていると、”$block_flag”に”1″が、かかっていないと”0″が入ります。
続いて、カスタムフィールドの出力を制御します。
1 2 3 |
if( !$block_flag || is_user_logged_in() ) { // ここに書かれたものは、「閲覧制限がない」または「ログインしているとき」に表示される } |
ややこしい言い回しになってしまいましたが、要するに「閲覧制限をかけていない場合か、ログインしている場合に表示される」というわけで、この中に書いたものは、閲覧制限で非表示になります。
これを、カスタムフィールドが出力される場所ごとに書いてもいいんですが、面倒だし見づらくなるので、まとめちゃいましょう。
例えばこんな感じ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$block_flag = get_post_meta($post->ID, '_wpmem_block', true); // 閲覧制限のチェック if( !$block_flag || is_user_logged_in() ) { // カスタムフィールドの値を先に全部取得しとく $custom_url = get_field('custom_url'); $custom_client = get_field('custom_client'); $custom_editor = get_field('custom_editor'); } // 以下、出力部分 if( $custom_url ) { echo $custom_url; } if( $custom_client ) { echo $custom_editor; } if( $custom_editor ) { echo $custom_editor; } |
これで、「ログインしていないとそもそもカスタムフィールドの値を取得しない。カスタムフィールドの値がなければ、出力もされない」というロジックになりますので、コード量を大幅に削減でき、見やすくなります。
この方法がまかり通らない場合(リピーターフィールド等)は、仕方ないので別個対応してあげましょう。
以上、現場からでした。