我正在使用wordpress + buddypress(最新版本)构建一个网站。
在这个网站上,我有自己的自定义登录|注册|重置通知表单,我不想将它们链接到后端的wp表单。
我已阻止所有用户的后端表单(默认wp-login |注册|重置通道表单)(带有404标头代码)
因此,如果您尝试访问wp-admin / wp-login,您将看到404。
我不想使用任何类型的重定向
我想停止重定向特殊网址,以停止从该网址重定向到任何其他网址
我想停止从 /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
您将被重定向... 网址会自动更改 这是wordpress的默认操作。
我想停止自动重定向。
当你尝试联系/ wp-admin时,你必须留在/ wp-admin(你不应该重定向到wp-login)。
请参阅以下2张图片了解详情:
图1:
图2:
*注意:
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');
无论我用什么似乎都没有做我想要的事情。 我该怎么办?
编辑:澄清上下文,这不是重复。
link is said as duplicate 明确表示他希望自己的wp-login页面能够重定向到他自己的登录/注册页面。
但我清楚地说“请阅读前16行”。 这意味着我不尝试/想要重定向 + 我不尝试/想要限制使用任何类型的重定向
另外:在发布此文章之前,我已经阅读了所有这些文章。但它们都不是我想要的东西。所以我开始了一个全新细节的新主题。
仅供参考,我已经阅读了7篇文章(我从中挑选了代码):
但我需要至少10次声明才能发布2个以上的链接!所以我不能说超过2个。
我很感激您的时间和精力,但请再次阅读我的问题并加以更多关注。
答案 0 :(得分:1)
首先 - 解释。
当涉及到管理页面时,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);
}