プラグインなしで会員限定のページを作る【WordPress】

やりたいこと

概要

wordpressでブログを運営する際に、会員のみを対象とした記事配信をするとします。

仕組み

会員限定の記事にアクセスした際に、以下の挙動をするようにします。

・管理画面にログインしていれば、記事を表示

・ログインしていなければ404ページにリダイレクト

「管理画面にログインしたユーザであれば限定記事を見られる」という仕様ですので、会員には「購読者」権限のアカウント発行します。

手順

購読者アカウントを発行する

管理画面でアカウントを追加して、権限を「購読者」にします。

会員限定のカテゴリーもしくはカスタムタクソノミーを作る

管理画面から作成し、会員限定の記事に付与してください。

function.phpに以下を追記

function custom_redirect_category() {

    //未ログインか否かを判定
    if (!is_user_logged_in()) {

        //該当記事に付与されているカテゴリもしくはカスタムタクソノミーを取得
        $categories = get_the_terms(get_the_ID(), 'category');
        if ($categories && !is_wp_error($categories)) {

            //記事に付与されている各カテゴリをチェック
            foreach ($categories as $category) {

                //term_idが会員限定かを判定
                if ($category->term_id == 17) {
                    //会員限定であればリダイレクト
                    wp_redirect('/404/');
                    exit; 
                }
            }
        }
    }
}
add_action('template_redirect', 'custom_redirect_category');

コードについての具体的な解説は後述します。

コード解説

おおまかな流れ

① 会員画面へのログインチェック

②(未ログインであれば)限定記事かをチェック

③(限定記事であれば)404にリダイレクト

7行目:該当記事に付与されているカテゴリもしくはカスタムタクソノミーを取得

get_the_terms()の第2引数は、カテゴリーを使うのかカスタムタクソノミーを使うかで決まります。

デフォルトのカテゴリーを利用する場合

get_the_terms(get_the_ID(), 'category');

カスタムタクソノミーを使う場合

下記のように第2引数を該当するslugに変更してください。

get_the_terms(get_the_ID(), 'taxonomy-slug');

14行目:term_idが会員限定のものか判定

if ($category->term_id == 17) {

term_idはカテゴリーもしくはカスタムタクソノミーのIDです。
※17は任意の値に書き換える必要があります。

この値は、管理画面の個別のカテゴリーもしくはカスタムタクソノミーの編集ページに遷移して、URLのパラメータ「tag_ID」をチェックすると確認できます。

参考

WordPress Developer Resources:get_the_terms

コメント

タイトルとURLをコピーしました