WP-Membersの閲覧制限で、カスタムフィールドも非表示にする方法

WordPressで会員制サイトを作るためのプラグイン「WP-Members」、めっちゃ便利ですねこれ。

会員登録機能も簡単に作れて、記事に閲覧制限もかけられる。

ただし、閲覧制限で非表示になる部分は投稿コンテンツ(the_content();)のみなので、カスタムフィールドを使っている場合、カスタムフィールドにも閲覧制限設定を実装する必要があります。

そんなに難しくないので、サクッとやっちゃいましょう。




実装

まず、「記事に閲覧制限をかけているかどうか」を取得します。下記を記事用テンプレートに記述。

$block_flag = get_post_meta($post->ID, '_wpmem_block', true); // 閲覧制限のチェック

閲覧制限がかかっていると、”$block_flag”に”1″が、かかっていないと”0″が入ります。

 

続いて、カスタムフィールドの出力を制御します。

if( !$block_flag || is_user_logged_in() ) {
  // ここに書かれたものは、「閲覧制限がない」または「ログインしているとき」に表示される
}

ややこしい言い回しになってしまいましたが、要するに「閲覧制限をかけていない場合か、ログインしている場合に表示される」というわけで、この中に書いたものは、閲覧制限で非表示になります。

これを、カスタムフィールドが出力される場所ごとに書いてもいいんですが、面倒だし見づらくなるので、まとめちゃいましょう。

例えばこんな感じ

$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;
}

これで、「ログインしていないとそもそもカスタムフィールドの値を取得しない。カスタムフィールドの値がなければ、出力もされない」というロジックになりますので、コード量を大幅に削減でき、見やすくなります。

この方法がまかり通らない場合(リピーターフィールド等)は、仕方ないので別個対応してあげましょう。

 

以上、現場からでした。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です