レッスン予約システムについてのメモです。
会員(=購読者:subscriber)だけが閲覧できる「マイページ(スラッグ名:mypage)」を用意し、会員がログインしたらマイページへリダイレクトさせます。会員専用ページは、受講履歴・予定一覧・入金報告フォーム・ほか複数ページにおよぶことが考えられるので、マイページの子孫ページ(マイページを先祖とするページ)も全て会員専用という扱いにします。
ログイン後、会員ユーザーであればマイページへリダイレクトする
1 2 3 4 5 6 7 8 9 10 |
/** * ログイン後のリダイレクト */ add_action('wp_login', 'redirectMypage', 10, 2); function redirectMypage($user_login, $current_user){ if(in_array('subscriber', $current_user->roles)){ wp_redirect(get_permalink(get_page_by_path('mypage')->ID)); exit; } } |
アクセスしたページのスラッグ名で閲覧を制御する
マイページ(とその子孫ページ)にアクセスしたユーザーがログインしていない場合はログインフォームへリダイレクトし、アクセスしたユーザーが会員以外ならばサイトのトップページへリダイレクトします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
/** * マイページへのアクセス制限 */ add_action('parse_request', 'mypageAccess'); function mypageAccess($args) { // カレントユーザー取得 $user = wp_get_current_user( ); // カレントポスト取得 if(!empty($args->query_vars['name'])) { list($current_post) = query_posts('name='.$args->query_vars['name']); } else if(!empty($args->query_vars['pagename'])) { $current_post = get_page_by_path($args->query_vars['pagename']); } else if(!empty($args->query_vars['p'])) { $current_post = get_post($args->query_vars['p']); } else if(!empty($args->query_vars['page_id'])) { $current_post = get_post($args->query_vars['page_id']); } else { $current_post = null; } if(!empty($current_post)) { // 先祖post取得 $ancestor_id = array_pop(get_post_ancestors($current_post->ID)); $ancestor = null; if($ancestor_id) { $ancestor = get_post($ancestor_id); } // 会員ページ if($current_post->post_name=='mypage' || ($ancestor_id && $ancestor->post_name=='mypage')){ // ログインしていない if(empty($user->ID)) { wp_redirect(wp_login_url()); exit; } // 会員ユーザーではない else if(!in_array('subscriber', $user->roles)){ wp_redirect(home_url()); exit; } } } } |
コメントを残す