WordPressで会員サイト theme my loginで任意のページを非会員ページにする

投稿者: | 2014年6月23日

WordPressのプラグイン「theme my login」は、これ一つで
比較的簡単に会員サイトが作れるすぐれもののプラグインです。

ただ、同種の「WP-Members」と比較すると、非会員ページを自由に作れないという欠点(仕様)があります。

今回は、theme my loginでも自由に非会員ページを作成する手法について書いていきます。

theme my loginでは、会員・非会員ページの判定を下記の箇所で行っています。

/wp-content/plugins/theme-my-login/modules/security/security.php

114行目からのpublic function template_redirect()

	public function template_redirect() {
if ( $this->get_option( 'private_site' ) ) {
if ( ! ( is_user_logged_in() || Theme_My_Login::is_tml_page() ) ) {
$redirect_to = apply_filters( 'tml_security_private_site_redirect', wp_login_url( $_SERVER['REQUEST_URI'], true ) );
wp_safe_redirect( $redirect_to );
exit;
}
}
}

ここで未ログインかつ会員ページを閲覧している際にログインページにリダイレクトする処理を行っています。

そこで、ここにフィルターフックを追加し、非会員ページの判定を追加します。

	public function template_redirect() {
if ( $this->get_option( 'private_site' ) ) {
if ( ! ( is_user_logged_in() || Theme_My_Login::is_tml_page() ) ) {
$redirect_to = apply_filters( 'tml_security_private_site_redirect', wp_login_url( $_SERVER['REQUEST_URI'], true ) );
//ここから改変 start
if ( apply_filters( 'is_public_pages', false ) ) {
} else {
wp_safe_redirect( $redirect_to );
exit;
}
//end
}
}
}


追加したフィルターフックに対しfunctions.phpでフックします。

function public_pages_list(){
global $wp_query;
$postid = $wp_query->post->ID;
//非会員ページにしたいpostidを指定
$targetids = array(
"10",
"20",
"30",
"999"
);
$flag = false;
foreach($targetids as $targetid) {
if($postid == $targetid) $flag = true;
}
return $flag;
}
add_filter('is_public_pages', 'public_pages_list');



これで、public_pages_listの$targetidsに指定したpostidのページは、非会員でも閲覧できるページになります。
※作成時の動作環境:theme my login ver6.3.8 WordPress 3.5.2
このコードを利用することにより、何らかの損失を被ったとしても弊社は責任を負いかねます。
ヴィンテージはWordPress案件も多数扱っております。

Webサイト構築、Webシステム構築に関してのご依頼、ご質問等がある場合は弊社ホームページ上のお問い合わせフォームもしくは下記連絡先までお問い合わせ下さい。

お問い合わせフォーム

株式会社ヴィンテージ Webシステム事業部

TEL:093-513-7255