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()
1 2 3 4 5 6 7 8 9 | 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 ; } } } |
ここで未ログインかつ会員ページを閲覧している際にログインページにリダイレクトする処理を行っています。
そこで、ここにフィルターフックを追加し、非会員ページの判定を追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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でフックします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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