カスタムログインプラグインやオーダーメイドのコードは使用していません。私の一部のページでは、最初のうちにこのようなコードが含まれていました。
<?php
if(!is_user_logged_in())
wp_redirect('/login/');
?>
そのため、ログインしていないときにユーザーがページを表示することはできません。これらのページには、次のコードが含まれています。
/wp-content/my-theme/my-account/
/wp-content/my-theme/my-account/world.php
/wp-content/my-theme/my-account/subscription.php
/wp-content/my-theme/my-dashboard.php
/wp-content/my-theme/my-files.php
現在、ユーザがログインせずに上記のいずれかのページにアクセスすると、ログインページにリダイレクトされ、ログインするとmy-account/
ページに移動します。
現在のシナリオを変更して、ユーザーが参照元のページにリダイレクトするようにします。私は次のことを試しましたが、うまくいきませんでした。
HTTP_REFERRER
を使うlogin/
フォームに、このコードを配置しました。
<input type="hidden" name="redirect" value="<?php echo $_SERVER['HTTP_REFERER']; ?>" />
functions.php
をハッキングするfunctions.php
に、このコードを配置しました。
if ( (isset($_GET['action']) && $_GET['action'] != 'logout') || (isset($_POST['login_location']) && !empty($_POST['login_location'])) ) {
add_filter('login_redirect', 'my_login_redirect', 10, 3);
function my_login_redirect() {
$location = $_SERVER['HTTP_REFERER'];
wp_safe_redirect($location);
exit();
}
}
参照:
私もこれらを試してみましたが失敗しました:
何もうまくいきませんでした。必要に応じて詳細を提供させていただきます。前もって感謝します。 :)
私はこのようにコードを修正しました:
<?php
if(!is_user_logged_in())
wp_redirect('/login/?redirect_to=' . $_SERVER["REQUEST_URI"]);
?>
これはログインページをこのようにレンダリングします:
/login.php?redirect_to=/my-account/subscription.php
認証してリダイレクトするにはこれで十分です。しかし、実際のリダイレクトが発生する場所を見つけて、それをredirect_to
パラメータを使用してリダイレクトする必要があります。
私はあなたの設定を理解しているかわかりませんが、ここでいくつかのアイデアがあります:
redirect_to
パラメータを設定してログインリンクを表示します。あなたはあなたのカスタムテンプレートページに以下を追加することができます:
if( ! is_user_logged_in() )
{
printf( '<a href="%s">%s</a>',
wp_login_url( get_permalink() ),
__( 'You need to login to view this page!' )
);
}
これはredirect_to
GETパラメータの現在のページで、匿名訪問者のためのログインリンクを生成します。
wp-login.php
パラメータを設定してredirect_to
にリダイレクトします。HTTPヘッダーが送信される前にwp_redirect()
の呼び出しが行われる必要があることに注意してください。
template_redirect
フック内で呼び出すことができます。
add_action( 'template_redirect',
function()
{
if( ! is_user_logged_in()
&& is_page( array( 'member-page-1', 'member-page-2' ) )
)
{
wp_safe_redirect( wp_login_url( get_permalink() ) );
exit();
}
}
);
スラッグmember-page-1
とmember-page-2
を使ってページへのアクセスを制限します。
もう1つの選択肢は、ネイティブのログインフォームを直接ページのコンテンツに含めることです。
add_filter( 'the_content', function( $content ) {
if( ! is_user_logged_in()
&& is_page( array( 'member-page-1', 'member-page-2' ) )
)
$content = wp_login_form( array( 'echo' => 0 ) );
return $content;
}, PHP_INT_MAX );
スラッグmember-page-1
とmember-page-2
を使ってページへのアクセスを制限します。
アーカイブ/インデックス/検索ページを管理する必要があることに注意してください。
更新: 私は wp_login_url()
関数を使うことでそれを単純化した。
受け入れられた答えで示唆されているように、Usgin get_permalink()
はあなたが(どんなタイプの)投稿でもある場合にのみ機能しますが、例えばあなたがカテゴリアーカイブにいる場合は機能しません。どこでも機能させるには、現在表示されているURLが必要です。表示されているコンテンツの種類は関係ありません。
WordPressで現在のURLを取得するには、グローバルな$wp
オブジェクトから現在のリクエストを取得し、それをadd_query_arg()
を使用してサイトのURLに追加します。その結果をwp_login_url()
関数のredirect_to
パラメータで使用できます。
wp_login_url( site_url( add_query_arg( array(), $wp->request ) ) );
必要ならば、wp_logout_url()
と同じアプローチを使うことができます。
wp_logout_url( site_url( add_query_arg( array(), $wp->request ) ) );
カスタムログインページでこのコードを使うこともできます
if ( ! is_user_logged_in() ) { // Display WordPress login form:
$args = array(
'redirect' => esc_url($_SERVER['HTTP_REFERER']),
'form_id' => 'loginform-custom',
'label_username' => __( 'Email' ),
'label_password' => __( 'Password' ),
'label_log_in' => __( 'Log In' ),
'remember' => false
);
wp_login_form($args);
echo '<p><a href="' . wp_lostpassword_url($redirect) .'">Lost Password</a></p>';
}
ログイン後、これはユーザーをリファラーページにリダイレクトします。