我写了2条评论,但是现在我有更多的时间,想添加一个对某人有用的答案。
问题是:一旦我们想要重定向被WordPress触发,我们must 加载WordPress 2次:第一次执行重定向,第二次显示所需的主页。
所以我的想法是,在重定向之前加载得越少,整个过程就会越快,服务器负载也会越小。
WordPress加载的第一个非核心项目是MU插件。所以我认为我们想要做的最好的地方是一个Mu插件。
我们必须面对的问题是MU plugins 加载时,我们不知道查询,并且alo条件标记不起作用。然而,在这种特定的情况下,当我们在主url中时,我们希望重定向,并且通过查看url很容易识别。
第二个小问题是如何知道重定向主页的链接。我们可以在插件代码中对其进行硬编码,但这不是一个优雅的解决方案。我们可以运行get_category_link
, 但一旦我们发现性能不理想,我认为一个很好的折衷方案就是将其硬编码wp-config.php
.
所以,打开wp-config.php
和添加
define( \'WP_SITEURL\', \'http://www.example.com\' );
define(\'THEHOMEPAGEREDIRECT\', WP_SITEURL . \'/main\');
然后创建一个文件,命名它
thehomepageredirector.php
并将其保存在MU plugins文件夹中。
默认情况下,此文件夹称为mu-plugins
它在里面wp-content
文件夹(旁边plugins
文件夹)。MU插件不需要激活。
在此文件中,您应仅放置:
if ( ! defined(\'THEHOMEPAGEREDIRECT\') ) return;
$home_path = trim( \\parse_url( home_url(), PHP_URL_PATH ), \'/\' );
$url = str_replace( $home_path, \'\', add_query_arg( array() ) );
if ( $url === \'/\' ) {
// pluggable is loaded after MU plugins
require( ABSPATH . WPINC . \'/pluggable.php\' );
wp_safe_redirect(THEHOMEPAGEREDIRECT, 301);
exit();
}
这样,当您访问时就会发生重定向
http://www.example.com
它发生在任何插件和主题加载之前、查询触发之前、大量挂钩触发之前。。。之前有很多东西。
当url中的查询字符串无效或为空时,编辑也可能不会触发重定向:
/**
* Class used only to retrieve all the valid query vars
*/
class WP_Extend extends WP {
public $all_vars;
function __construct() {
$this->all_vars = array_merge($this->public_query_vars, $this->private_query_vars);
}
}
if ( ! defined(\'THEHOMEPAGEREDIRECT\') ) return;
$home_path = trim( \\parse_url( home_url(), PHP_URL_PATH ), \'/\' );
$url = str_replace( $home_path, \'\', add_query_arg( array() ) );
$url_array = \\explode( \'?\', $url );
if ( count($url_array) > 1 ) {
$qs = array();
parse_str( $url_array[1], $qs );
$good = array_filter($qs);
// do not redirect if empty query string are in the url
if ( empty ( $good ) ) return;
$wpe = new WP_Extend;
$valid = array_intersect( array_keys($good), $wpe->all_vars );
// do not redirect if not valid query string are in the url
if ( count( $good ) != count($valid) ) return;
}
if ( $url === \'/\' ) {
// pluggable is loaded after MU plugins
require( ABSPATH . WPINC . \'/pluggable.php\' );
wp_safe_redirect(THEHOMEPAGEREDIRECT, 301);
exit();
}