WordPress の WP-Members プラグインで、カテゴリー一覧やアーカイブ一覧に記事の内容が表示されて困る:暫定解決

問題

WordPress の WP-Members プラグインは会員制サイトを制作するのに非常に便利なのですが、カテゴリー一覧やアーカイブ一覧を表示すると、記事の内容が表示されてしまいます。

会員のみに公開したい情報が漏れてしまうことになるので、これでは困ります。

原因

WP-Members はアクセス制限をパーマリンクの URL 単位で設定しています。
シングルページ(投稿や固定ページ)単位で制限がかかると言う事です。

カテゴリー一覧やアーカイブ一覧の URL はシングルページ扱いにならないため、制限されずに表示されてしまうのです。

前提知識

解決方法の前に、テーマと WP-Members について知っていただきたい事があります。

まず、標準の twentytwelve などのテーマのテンプレートでは、
カテゴリー一覧は category.php を、
アーカイブ一覧は archive.php を、ソースとして使っています。

この中で呼ばれている get_template_part() 関数が、get_post_format で取得された記事のフォーマットに整形して表示しています。

次に、WP-Members プラグインは記事を表示するかどうかを、postmeta データの値によって切り分けています。

WP-Members オプションの
デフォルトで記事をブロックする設定の場合、表示する記事の unblock の値に true が、
デフォルトで記事を表示する設定の場合、表示しない記事の block の値に true が設定されています。

解決方法

記事のブロックがデフォルトであれば、postmeta データ unblock の値が true の時のみ get_template_part() 関数を呼び出すようにしてあげれば良いと言う事になります。

実装時には、ユーザーのログイン状況も加味する必要がありますので、次の様なコードになるかと思います。

[code lang=’php’] if ( is_user_logged_in() ) {
get_template_part( ‘content’, get_post_format() );
} else {
if (get_post_meta($post->ID, ‘unblock’, true)) {
get_template_part( ‘content’, get_post_format() );
} else {
echo the_title(‘

‘, ‘

‘);
echo ‘

閲覧するにはログインが必要です

‘;
}
}
[/code]

まとめ

パーマリンクの URL 単位でアクセス制限をかけている理由が良くわからないのですが、テーマ側の編集が必要になるのは好ましくないので、フィルターフックなどが使えないかもう少し考えたいところですね。

とりあえず問題は暫定的に解決、と言う事で。

おまけ

上記はデフォルトでブロックする前提でコードを書いてしまいましたが、WP-Members のオプションは次のコードで取得する事ができますので、条件分岐を書く際の参考にしてください。

[code lang=’php’] $wpmembers_settings = get_option(‘wpmembers_settings’);
$xx1 = $wpmembers_settings[1]; //投稿記事をブロック のチェックの状態(false=0,true=1)
$xx2 = $wpmembers_settings[2]; //固定ページをブロック のチェックの状態(false=0,true=1)
[/code]

$wpmembers_settings[n] の値を見れば、デフォルトの状態がわかると言う事です。

え?Webサイトのバックアップ、してないの!?

いざという時には復旧までしてくれる
『ワードプレス外部バックアップサービス』

■3つの特長
・自分でやらなくて良い
・いざという時の復旧付き
・外部サーバーにバックアップ

WordPress の WP-Members プラグインで、カテゴリー一覧やアーカイブ一覧に記事の内容が表示されて困る:暫定解決” に対して1件のコメントがあります。

コメントを残す