отключить wp-admin для wp-login канонический редирект (wordpress)

Я строю веб-сайт с WordPress + BuddyPress (последняя версия).

На этом веб-сайте у меня есть свои собственные формы входа в систему | регистрация | сброс пароля, и я не хочу связывать их с внутренними 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 фотографии для более подробной информации:

Фото 1:

example.com/wp-admin

Фото 2:

Вы видите, что URL изменился автоматически

* НОТА:

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');

Все, что я использовал, похоже, не делает то, что я хочу.
Как мне это сделать?


РЕДАКТИРОВАТЬ: уточнить контекст, который не является дубликатом.

ссылка называется дубликатом четко говоря что он хочет, чтобы его страницы wp-login перенаправлялись на его собственные страницы входа / регистрации.

Но я четко сказал: «Пожалуйста, прочитайте первые 16 строк».
Который означает, что Я не пытаюсь / хочу перенаправить + Я не пытаюсь / хочу ограничить использование любого вида перенаправления

Плюс: я прочитал все эти статьи, прежде чем опубликовать это. Но никто из них не был тем, чего я хотел. Итак, я начал новую тему, с полной детализацией.

К вашему сведению, я прочитал еще 7 статей (которые я выбрал коды из них):

Но мне нужно как минимум 10 репутаций, чтобы опубликовать более 2 ссылок! Поэтому я не могу сказать больше, чем 2.

  1. вторая статья
  2. третья статья
  3. пятая статья

Я благодарен за ваше время и внимание, но, пожалуйста, прочитайте мой вопрос еще раз с большим вниманием.

2

Решение

Сначала — объяснение.

WordPress довольно сложен, когда дело касается страниц администратора. По сути, когда страница администратора загружается, wp-admin/admin.php включается Внутри этого файла есть вызов функции auth_redirect() Он проверяет, вошел ли пользователь в систему, а если нет — перенаправляет его на страницу входа.

Поскольку эта функция не является типичным действием / фильтром, ее сложно отключить. К счастью, он вызывает несколько хуков самостоятельно. Один из них, auth_redirect_scheme, вызывается непосредственно перед тем, как происходит реальное перенаправление. Он предназначен для подготовки «схемы» (http / https) для перенаправления, но мы можем использовать ее в соответствии с вашими целями.

Я добавил фильтр-крючок для auth_redirect_scheme, с приоритетом 9999 (это на самом деле не имеет значения, но я хотел, чтобы он опаздывал, на всякий случай). Затем я взял кусок кода из оригинала 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);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector