wp-membersを使ってログインユーザーに限定したコンテンツを作成したい。
wp-membersの標準機能では、カスタム投稿ページ(一覧・個別)とアーカイブページ(一覧ページ)にロックをかけることができなくて困っている。
非ログインユーザーがこれらのページにアクセスしたら、コンコンテツをブロックし、かつwp-membersのログインページにリダイレクトさせる方法を教えて欲しい。
こんなことを考えている方へ。
この記事のポイントは以下です。
■■WEB制作を学ぼう■■
wp-membersでカスタム投稿とアーカイブページにもロックをかける方法
wp-membersでカスタム投稿ページ(一覧・個別)やアーカイブページ(一覧ページ)にもロックをかける方法を解説します。デフォルトの機能では、これらのページをブロックできないため、functions.phpを編集して対応します。
wp-membersで今回やりたいこと
今回やりたいことは次の5つです。
ただ、④については標準の機能で実装が可能です。①②③⑤については標準の機能では実現できません。なので、functions.phpを編集して対応します。
No | 内容 |
① | カスタム投稿の”一覧ページ(アーカイブページ)“に非ログインユーザーがアクセスしたら、wp-membersのログインページにリダイレクトさせたい |
② | カスタム投稿の”個別ページ(個別記事)“に非ログインユーザーがアクセスしたら、wp-membersのログインページにリダイレクトさせたい |
③ | カテゴリーの”一覧ページ(アーカイブページ)“に非ログインユーザーがアクセスしたら、wp-membersのログインページにリダイレクトさせたい |
④ | カテゴリーの”個別ページ(個別記事)“に非ログインユーザーがアクセスしたら、wp-membersのログインページにリダイレクトさせたい |
⑤ | “特定のURLが含まれるページ“に非ログインユーザーがアクセスしたら、wp-membersのログインページにリダイレクトさせたい |
事前にwp-membersでログイン用ページを作ろう
事前にwp-membersの機能を使ってログイン用ページを作成しておきましょう。
外部サイトですが、次の記事で詳しく解説されています。
wp-membersでカスタム投稿とアーカイブページにロックをかけるためのコード
wp-membersでカスタム投稿ページ(一覧・個別)やアーカイブページ(一覧ページ)にロックをかけるためのコードを紹介します。
functions.phpにこれから紹介するコードを書くことで、指定したカスタム投稿ページ(一覧・個別)やアーカイブページ(一覧ページ)に非ログインユーザーがアクセスしたら、事前に作っておいたwp-membersのログインページにリダイレクトさせることができます。
なお、事前に作成したwp-membersのログインページのスラッグは”loginpage”としています。
①カスタム投稿の一覧ページをブロックするコード
//非ログイン時に、カスタム投稿videoの一覧ページにアクセスしたら、ログインページを表示
function archive_video_page_redirect() {
if( ! is_user_logged_in() && is_post_type_archive( 'video' ) ) {
wp_redirect( '/loginpage' );
exit();
}
}
add_action( 'template_redirect','archive_video_page_redirect');
この例では、非ログインユーザーが”video”というスラッグのカスタム投稿の一覧ページにアクセスしたら、wp-membersのログインページへリダイレクトさせることができます。
以下の部分は、”ログインしていない”かつ”アーカイブページのスラッグがvideo”を意味しています。これをif文に含めることで条件分岐をさせています。
! is_user_logged_in() && is_post_type_archive( 'video' )
条件に合致したら、”/loginpage”にリダイレクトをさせています。
wp_redirect( '/loginpage' );
②カスタム投稿の個別ページをブロックするコード
//非ログイン時に、カスタム投稿videoの個別ページにアクセスしたら、ログインページを表示
function single_video_page_redirect() {
if( ! is_user_logged_in() && is_singular('video') ) {
wp_redirect( '/loginpage' );
exit();
}
}
add_action( 'template_redirect','single_video_page_redirect');
この例では、非ログインユーザーが”video”というスラッグのカスタム投稿の個別ページにアクセスしたらwp-membersのログインページへリダイレクトさせることができます。
以下の部分は、”ログインしていない”かつ”個別ページのスラッグがvideo”を意味しています。これをif文に含めることで条件分岐をさせています。
! is_user_logged_in() && is_singular('video')
条件に合致したら、”/loginpage”にリダイレクトをさせています。
wp_redirect( '/loginpage' );
③特定のカテゴリーの一覧ページをブロックするコード
//非ログイン時に「カテゴリースラッグ:directions」の一覧ページにアクセスしたら、ログインページを表示
function directions_page_redirect() {
$url = $_SERVER['REQUEST_URI'];
if( ! is_user_logged_in() && strstr($url,'category/directions')==true ) {
wp_redirect( '/loginpage' );
exit();
}
}
add_action( 'template_redirect','directions_page_redirect');
この例では、非ログインユーザーが”category/directions”というURLが含まれるページにアクセスしたら、wp-membersのログインページへリダイレクトさせています。WordPressのURLの構造が【category/カテゴリーのスラッグ名】になるのを利用して、上記のコードを設定しました。
以下の部分は、”ログインしていない”かつ”URLがcategory/directionsを含む”を意味しています。これをif文に含めることで条件分岐をさせています。
! is_user_logged_in() && strstr($url,'category/directions')==true
条件に合致したら、”/loginpage”にリダイレクトをさせています。
wp_redirect( '/loginpage' );
④特定のURLが含まれるページをブロックするコード
//非ログイン時に、「/staff」というURLが含まれるページにアクセスしたら、ログインページを表示
function staff_kotei_top_page_redirect() {
$url = $_SERVER['REQUEST_URI'];
if( ! is_user_logged_in() && strstr($url,'/staff')==true ) {
wp_redirect( '/loginpage' );
exit();
}
}
add_action( 'template_redirect','staff_kotei_top_page_redirect');
カテゴリを指定したのと同じやり方です。この例では、非ログインユーザーが”/staff”というURLが含まれるページにアクセスしたら、wp-membersのログインページへリダイレクトさせています。
以下の部分は、”ログインしていない”かつ”URLがstaffを含む”を意味しています。これをif文に含めることで条件分岐をさせています。
! is_user_logged_in() && strstr($url,'/staff')==true
条件に合致したら、”/loginpage”にリダイレクトをさせています。
wp_redirect( '/loginpage' );
まとめ
この記事のポイントはこちらです。
※この記事は2021年5月時点の情報です。プラグインのアップデートによって状況が変わっている可能性があります。
今回の記事はここまです。