php WordPress函数is_user_logged_in在siteurl,wp_redirect中不起作用

x33g5p2x  于 2023-08-02  发布在  PHP
关注(0)|答案(1)|浏览(112)

我尝试用以下代码修改site_URLwp_redirect

<?php

add_filter( 'site_url', 'my_prefix_site_url', 10, 2 );
add_filter( 'wp_redirect', 'my_prefix_wp_redirect' );

function my_prefix_site_url( $url, $scheme ) {
    return my_prefix_modify_url( $url, $scheme );
}

function my_prefix_wp_redirect( $url ) {
    return my_prefix_modify_url( $url, null );
}

function my_prefix_modify_url( $url, $scheme = null ) {
    $current_url = isset( $_SERVER['PHP_SELF'] ) ? sanitize_text_field( wp_unslush( $_SERVER['PHP_SELF'] ) ) : '';

    if ( ! strpos( $current_url, 'wp-admin' ) && ! is_user_logged_in() ) {
        return '/';
    }

    return $url;
}

字符串
但出现以下错误。
致命错误:未捕获错误:调用未定义函数is_user_logged_in()
经过一些研究,我发现wp_redirect在调用pluggable.php文件之前被调用,该文件包含**is_user_logged_in()**函数。所以我继续在代码中包含它,如下所示

if ( ! function_exists( 'is_user_logged_in' ) ) {
    require_once ABSPATH . WPINC . '/pluggable.php';
}


包含此文件后,代码正常工作,但其他一些插件与之冲突,因为它们无法覆盖可插拔函数。

简短问题:在pluggable.php加载之前,我如何验证用户是否在wp_redirect级别登录。

先谢谢你。

cigdeys3

cigdeys31#

我真的不明白这段代码的实际用途是什么,如果我正确阅读的话,我可以想到它会破坏的几件事,但对于你的字面问题:只需编写自己函数。
函数is_user_logged_in在默认版本中并不复杂:

function is_user_logged_in() {
    $user = wp_get_current_user();

    return $user->exists();
}

字符串
wp_get_current_user也是可插拔的,但很简单:

function wp_get_current_user() {
    return _wp_get_current_user();
}


所以你就这样写:

function custom_is_user_logged_in() {
    return _wp_get_current_user()->exists();
}

相关问题