Wordpress重定向- Functions.php -排除目录

o2rvlv0m  于 2022-11-02  发布在  WordPress
关注(0)|答案(1)|浏览(148)

我有以下代码在我的functions.php文件内,提供一个临时重定向我的整个网站(所有网址重定向到主页),但不包括WordPress的管理区...

add_action( 'template_redirect', 'wa_redirect_site', 5 );
function wa_redirect_site(){    
    $url = 'https://' . $_SERVER[ 'HTTPS_HOST' ] . $_SERVER[ 'REQUEST_URI' ];
    $current_post_id = url_to_postid( $url );
    if ( ! is_page(  )) { // Excludes page with this ID, and also the WordPress backend
        $id = get_the_ID();
        wp_redirect( 'https://wa-leicester.org.uk/', 302 ); // You can change 301 to 302 if the redirect is temporary
        exit;
    } 
}

到目前为止,一切都很好,但是,我正在使用一个页面建设者称为砖建设者,从WordPress的管理区,和麻烦的是,当我创建一个模板,然后试图编辑该模板,它重定向到主页。
编辑模板时,尝试访问的URL为:.../模板/115/?砖=运行
这给了我一个ID,但我想我需要找到一种方法来排除整个/template/目录。
代码中包含一种排除页面ID is_page( ))的方法,因此我尝试将目录添加到其中,并尝试查看是否存在替代该目录的内容,例如:但是我似乎找不到任何关于它的东西。
任何帮助都会非常感激!!

au9on6nz

au9on6nz1#

您可以使用is_admin()来确定当前请求是否为管理界面页面。默认的WordPress自定义程序不被视为管理页面。
此外,许多插件都使用 AJAX 请求(@请参见AJAX in Plugins),因此希望将其过滤掉。
默认情况下,wp_redirect(跨站点)或wp_safe_redirect(本地)将返回302。

<?php

add_action( 'template_redirect', function () {  

    /**
     * Determines whether the current request is NOT for an administrative interface page NOR a WordPress Ajax request.
     * Determines whether the query is NOT for the blog homepage NOR for the front page of the site.
     * 
     * is_admin() returns true for Ajax requests, since wp-admin/admin-ajax.php defines the WP_ADMIN constant as true.
     * @see https://developer.wordpress.org/reference/functions/is_admin/#comment-5755
     */
    if ( ! is_admin() && ! wp_doing_ajax() && ! is_home() && ! is_front_page() && ! is_user_logged_in() ) {

        /**
         * Performs a safe (local) redirect, using wp_redirect().
         * 
         * By default the status code is set to 302.
         * @see https://developer.wordpress.org/reference/functions/wp_safe_redirect/#parameters
         */
        wp_safe_redirect( home_url() );

        exit;

    };

} );

相关问题