'mydomain.com/login'の下にwordpressとは異なる何かをインストールしたいのですが、WordPressは自動的にこのリンク '/ login'を '/wp-login.php'にリダイレクトします。
このリダイレクトをどこで無効にできますか?
canonical.php
を見ると、wp_redirect_admin_locations
関数が非常に遅くフックされていることがわかります - 優先順位1000 。これはredirect_canonical
にフックされているほぼすべての関数がこれより前に実行されることを意味します。そのため、wp_redirect_admin_locations
フックからtemplate_redirect
を条件付きで削除します。
add_action(
'template_redirect',
function() {
$requ = untrailingslashit($_SERVER['REQUEST_URI']);
if (site_url('login','relative') === untrailingslashit( $_SERVER['REQUEST_URI'] )){
remove_action( 'template_redirect', 'wp_redirect_admin_locations', 1000 );
}
}
);
この回答は、パーマリンク内の “ login”の調査結果に基づいていますwp-login.php wp3.6
すでに述べたように、関連コードは/wp-includes/canonical.phpの最後にあります。
あなたはデフォルトの "wp_redirect_admin_locations"を削除し、それをわずかに修正されたカスタムバージョンで置き換える必要があります。これをあなたのfunction.phpファイルに追加してください。
function custom_wp_redirect_admin_locations() {
global $wp_rewrite;
if ( ! ( is_404() && $wp_rewrite->using_permalinks() ) )
return;
$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 ) ) {
wp_redirect( admin_url() );
exit;
}
$logins = array(
home_url( 'wp-login.php', 'relative' )
);
if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $logins ) ) {
wp_redirect( site_url( 'wp-login.php', 'login' ) );
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');
また、/ loginに他に何もない場合にのみリダイレクトが適用されることにも注意する必要があります。例えばすぐにあなたがページを作成するか、またはログインはリダイレクトをもう適用しません。これが起こる場所については/wp-includes/canonical.php:553を参照してください。