Welcartで会員ログインした後に、元ページを表示する方法

あるカスタム投稿をWelcartの会員専用ページにし、そのURLをメールやSNSなどで配布する。

・ログイン済みユーザーがアクセスした場合は、そのまま表示
・ログイン前/未登録ユーザーがアクセスした場合は、ログイン(兼、新規登録)ページを表示する。

ログイン(新規登録)後は、リンク元のカスタム投稿ページを表示する

これ、意外とその通りの記事がなくて色々なブログを読んで実装しました。

カスタム投稿ページ(例:single-memberonly.php)

<?php  //セッションにページのURLを保存
if (usces_is_login()){ //ログイン済みユーザーにはそのまま表示
  } else { //未ログイン、未登録ユーザーの場合
  session_start(); //セッションスタート
  unset($_SESSION['gopage']);
  $_SESSION['gopage'] = $_SERVER["REQUEST_URI"]; //このページのURLを取得
  $url = home_url('usces-member'); //ログインページへリダイレクト
  wp_redirect( $url );
}
 ?>

function.php

/**
 * ログイン後のリダイレクト先のカスタム投稿ページを指定する
 */
function my_usces_action_after_login() {
$ref = $_SESSION['gopage']; //セッションに保存された遷移元のページ
if (strstr($ref, '/memberonly')) { //遷移元のページにカスタム投稿のURLが入ってる場合
    wp_redirect( $ref ); //セッションに保存された遷移元のページへリダイレクト
    exit;
}
    $url = home_url();
    wp_redirect( $url ); //条件に一致しない場合はTOPページに移動する
    exit;
}
add_action( 'usces_action_after_login', 'my_usces_action_after_login' );

上のコードだけだと、セッションをいつまでも保持して、ログアウト後に別ページで再ログインすると、セッションを保持しているカスタム投稿ページにリダイレクトしてしまう。

ので、セッションを削除するコードを追記。

/**
 * ログアウトした場合はセッションを削除にする
 */
function session_clear() {
    unset($_SESSION['gopage']);
    $url = home_url();
    wp_redirect( $url );
    exit;
}
add_action('usces_action_member_logout', 'session_clear');

参考サイト

Welcart ログイン後のページURLを指定する方法
Welcartの会員情報でログインすると「」に遷移しますが、今回は会員に必ず見て欲しいページなどページのURLを指定する方法を書いて行きます。ログイン後のURLを指定Welcartで用意されているアクションフック &quot;usces_action...
404 File Not Found
wordpressでのセッション破棄 | Webエンジニアブログ
ユーザー登録完了後とログアウト後に特定のセッションを破棄するセッションの開始セッション破棄の前にセッションの開始について書いてみたい。wordpressのセッション開始は、wp-config.phpの先頭にセッションパラメータの設定と開始するための関数を記述して
ログアウト後のページについて – Welcart フォーラム
タイトルとURLをコピーしました