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