やりたいこと
概要
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
コメント