web-dev-qa-db-ja.com

/ wp-adminから/ wp-loginへのリダイレクトを停止する

私はwordpress + buddypress(最新版)でウェブサイトを構築しています。

このウェブサイトでは、私は自分のカスタムログイン|サインアップ| resetpassフォームを持っています、そして私はそれらをバックエンドのwpフォームにリンクしたくありません。

そして私はすべてのユーザーのバックエンドフォームをブロックしました(デフォルトのwp-login | signup | resetpassフォーム)(404付き)

ですから、wp-admin/wp-loginにアクセスしようとすると404が表示されます。

私はいかなる種類のリダイレクトも使用したくありません。そのURLから他のURLへのリダイレクトを停止するのと同様に、私が欲しいのは特別なURLでのリダイレクトを停止することです。

/wp-adminから/wp-login.php?redirect_to=http%3A%2F%2Fsite.com%2Fwp-admin%2F&reauth=1へのリダイレクトを中止したい

あなたが到達しようとすると:

www.example.com/wp-admin

あなたはログインしていないの場合、自動的に次の場所にリダイレクトされます。

example.com/wp-login.php?redirect_to=http%3A%2F%2Fsite.com%2Fwp-admin%2F&reauth=1

あなたはリダイレクトされます...
URLは自動的に変わります
これはwordpressのデフォルトの動作です。

自動リダイレクトを停止したい。

/ wp-adminにアクセスしようとするときは、/ wp-adminに留まる必要があります(wp-loginへのリダイレクトを取得しないでください)。

2 picturesfor 詳細:を参照)をご覧ください。
1 - picture 1 - yoursite.com/wp-admin
2 - picture 2 - URLが自動的に変更されているのがわかります。

  • NOTE:404は私がカスタムコードで作ったものです...、エラーではありません。

私はそれを止めるためにたくさんのコードをテストしました。しかし、どれも私のために働きませんでした。

コード番号1:

remove_action('template_redirect', 'redirect_canonical');

コード番号2:

remove_filter('template_redirect', 'redirect_canonical');

コード番号3:

add_action(
      'init',
      function() {
          remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
      }
  );

コード番号4:

function custom_wp_redirect_admin_locations() {
global $wp_rewrite;
if ( ! ( is_404() && $wp_rewrite->using_permalinks() ) )
    return;
$admins = array(
    home_url( 'wp-admin', 'relative' ),
);
if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $admins ) ) {
           $wp_query->set_404();
           get_template_part( 404 ); 
           exit();
}
$logins = array(
    home_url( 'wp-login.php', 'relative' )
);
if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $logins ) ) {
             $wp_query->set_404();
             get_template_part( 404 ); 
             exit();
}
}

function remove_default_login_redirect() {
remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
add_action( 'template_redirect', 'custom_wp_redirect_admin_locations', 1000
);
}
add_action('init','remove_default_login_redirect');

コード番号5

add_action(
'template_redirect', 
function() {
$requ = untrailingslashit($_SERVER['REQUEST_URI']);
if (site_url('wp-admin','relative') ===  
untrailingslashit($_SERVER['REQUEST_URI'] )){
  remove_action( 'template_redirect', 'wp_redirect_admin_locations', 1000 );
}
}
);

コード番号6:

function custom_wp_redirect_admin_locations() {
global $wp_rewrite;
if ( ! ( is_404() && $wp_rewrite->using_permalinks() ) )
    return;

$requested_url = untrailingslashit( $_SERVER['REQUEST_URI'] );

$admins = array(
    home_url( 'wp-admin', 'relative' ),
    home_url( 'dashboard', 'relative' ),
    home_url( 'admin', 'relative' ),
    site_url( 'dashboard', 'relative' ),
    site_url( 'admin', 'relative' ),
);
if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $admins ) ) {
redirect_canonical( $requested_url , false );
    exit;
}

$logins = array(
    home_url( 'wp-login.php', 'relative' )
);
if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $logins ) ) {
redirect_canonical( $requested_url , false );
    exit;
}
}

function remove_default_login_redirect() {
remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
add_action( 'template_redirect', 'custom_wp_redirect_admin_locations', 
1000);
}

add_action('init','remove_default_login_redirect');

私が使ったものは何でも私が欲しいものをやっていないようです。どうすればいいの?

どうもありがとう。


編集:これは重複していません。

私もこれらの記事を読みました:

1 - この記事
2 - この記事
3 - この記事

3
Poofy

私の質問を完全に説明し、答えてくれたTomasz Struczynskiに感謝します

あなたはこのリンクで答えを見ることができます


まずは説明。

管理ページに関して言えば、Wordpressはちょっとトリッキーです。基本的に、管理ページがロードされているとき、wp-admin/admin.phpが含まれています。このファイルの中にはauth_redirect()という名前の関数への呼び出しがあります。ユーザがログインしているかどうかをチェックし、そうでなければログインページにリダイレクトします。

この機能は典型的なアクション/フィルタではないので、無効にするのは難しいです。幸い、それは独自にいくつかのフックを呼び出します。そのうちの1つauth_redirect_schemeは、実際のリダイレクトが発生する直前に呼び出されます。リダイレクトのための「スキーム」(http/https)を準備することを意図していますが、あなたの目的に合うようにそれを利用することができます。

私は優先度9999でauth_redirect_schemeのためのフィルタフックを追加しました(それはそれほど重要ではありませんが、念のために遅く実行したいと思いました)。次に、ユーザーがログインしているかどうかを確認するために使用されていた元のauth_redirect()からコードを取り出しました(wp_validate_auth_cookie)。もしそうであれば、何もする必要はないので、単に値を返します。ユーザーがログインしていない場合は、エラーページを表示してスクリプトを終了します(リダイレクトの発生を防ぐため)。

また念のためにwp_redirect_admin_locationsフィルタを無効にしました。これが必要な場合、私は本当によくわかりません、しかし...

そして今 - コード。気を付けて、これは完璧な解決策ではないかもしれないし、あなたの側からいくつかの改善が必要になるでしょう。

<?php
/**
 * @packageStop_Redirect
 */
/*
Plugin Name: Stop redirect
Plugin URI: 
Description: Stop redirecting anything to wp-login
Author: Tomasz Struczyński
Version: 0.1
Author URI: 
*/

add_action('init', 'remove_default_redirect');
add_filter('auth_redirect_scheme', 'stop_redirect', 9999);

function stop_redirect($scheme)
{
    if ( $user_id = wp_validate_auth_cookie( '',  $scheme) ) {
        return $scheme;
    }

    global $wp_query;
    $wp_query->set_404();
    get_template_part( 404 );
    exit();
}

function remove_default_redirect()
{
    remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
}
1
Poofy