Simple WordPress Membershipでカスタム投稿一覧・タクソノミーを会員専用に

カテゴリー: タグ: ,


wordpressにおける会員サイトを制作するのに便利なプラグインといえば【Simple WordPress Membership】ですが、自作したテーマだとカスタム投稿一覧やタクソノミー一覧が会員制にならず困ってしまう方もちらほら。
実際のところ私もそうでしたが、あちこちの情報を収集してカスタマイズする方法がみつかりましたので備忘録として記事にします。
ですが保証は負いません。
保証はご自身で負い、ご自身の判断で利用お願い致します。



プラグイン【Simple WordPress Membership】のインストール・有効化・設定

プラグイン【Simple WordPress Membership】のインストール・有効化については下記参照。

一般的な設定はネット上に沢山出回っているのでそちらでお願い致します。
一般的な設定を行ったあと、下記作業を行います。


プラグイン【Simple WordPress Membership】のカスタム投稿一覧を会員専用に

通常、ナビゲーションに表示されているメニューはボタンをクリックするとそのメニュー画面が表示されます。
これはカスタム投稿一覧も同じですが、カスタム投稿一覧を会員専用にするには、ログインしてから表示されるよう、function.phpに下記を記載します。

//WP-members使用時にてカスタム投稿タイプの一覧ページもログイン画面を出す
function un_logged_in_user_redirect() {
    if( ! is_user_logged_in()  && is_archive('カスタム投稿タイプのスラッグ') ) {
        wp_redirect( '/login' );// ログインページのURL
        exit();
    }
}
add_action( 'template_redirect','un_logged_in_user_redirect');

この状態で、ログインしていない状態でカスタム投稿一覧を開いてみてください。
ログイン画面が表示されれば完了ですが、もし通常のカスタム投稿一覧が表示されるようであれば下記に変更してください。

//WP-members使用時にてカスタム投稿タイプの一覧ページもログイン画面を出す
function un_logged_in_user_redirect() {
    if( ! is_user_logged_in()  && is_post_type_archive('カスタム投稿タイプのスラッグ')) {
        wp_redirect( '/〇〇/membership-login/' );// ログインページのURL
        exit();
    }
}
add_action( 'template_redirect','un_logged_in_user_redirect');

違いは・・・
■is_archive('')をis_post_type_archive('')に
■wp_redirect( '/login' );をwp_redirect( '/〇〇/membership-login/' );に
です。


プラグイン【Simple WordPress Membership】のタクソノミー一覧を会員専用に

カスタム投稿一覧同様、タクソノミー一覧も残念ながらログインしなくともurlさえ知っていれば表示されてしまいます。
ではどこをカスタマイズするか・・・
まずはtaxonomy-〇〇-cate.phpやtaxonomy-〇〇-tag.phpを開き、下記のようにカスタマイズしてください。

<?php if( is_user_logged_in() ) : ?>
    ~ログインユーザー(WP-members会員限定)にのみ表示させたい内容を記述~
<?php else : ?>
<div>
このコンテンツを閲覧するにはログインが必要です。<br>
<a href="〇〇"><span>こちら</span></a>にてログインお願い致します。
</div>
<?php endif; ?>
この2行目の「~ログインユーザー(WP-members会員限定)にのみ表示させたい内容を記述~」部分が元々構築していたコードとなるため、 元々構築していた上下に設置するとお考えください。
これはログインしているか否かの条件分岐です。
ログインしていれば元々構築していたものを表示させ、ログインしていなければ「このコンテンツを閲覧するにはログインが必要です」と表示させ、ログイン画面へのリンクを促すという内容です。


追記1

「ログインしてください」表示をカスタマイズ
plugins→simple-memvership→classes→class.swpm-access-control.php
47行目あたり

$text = SwpmUtils::_('You need to be logged in to view this content. ') . SwpmMiscUtils::get_login_link();
上記を下記に変更
$text = SwpmUtils::_('このコンテンツを閲覧するにはログインが必要です。<br><a href="〇〇/membership-login/">こちら</a>にてログインお願い致します。');
〇〇は飛ばしたいurl


追記2

「ログイン画面」を変更
(パスワードをお忘れの方はお問合せください。)だけにする
plugins→simple-memvership→views→login.php
64行目あたり

<div class="swpm-forgot-pass-link">
<a id="forgot_pass" class="swpm-login-form-pw-reset-link"  href="<?php echo $password_reset_url; ?>"><?php echo SwpmUtils::_('Forgot Password?') ?></a>
</div>
<div class="swpm-join-us-link">
<a id="register" class="swpm-login-form-register-link" href="<?php echo $join_url; ?>"><?php echo SwpmUtils::_('Join Us') ?></a>
</div>
上記を下記に変更
<div class="swpm-forgot-pass-link">
パスワードをお忘れの方はお問合せください。
</div>
<!--<div class="swpm-join-us-link">
<a id="register" class="swpm-login-form-register-link" href="<?php echo $join_url; ?>"><?php echo SwpmUtils::_('Join Us') ?></a>
</div>-->


最初に記載しましたが、保証は負いませんのでご自身の判断にてご利用ください。