WordPress函数is_user_logged_in在siteurl和wp_redirect中无法正常工作。
P粉358281574
P粉358281574 2023-07-29 00:18:33
[PHP讨论组]

我尝试使用以下代码修改site_URL和wp_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函数。

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

提前感谢您的回答。


P粉358281574
P粉358281574

全部回复(1)
P粉253518620

我真的不太明白这段代码的实际目的是什么,如果我理解正确的话,我认为它会破坏几个东西,但就您字面上的问题来说:只需编写自己的函数即可。

is_user_logged_in函数在默认版本中并不复杂:

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

    return $user->exists();
}

And wp_get_current_user is also pluggable but simple:

function wp_get_current_user() {
    return _wp_get_current_user();
}

So you'd just write this:

function custom_is_user_logged_in() {
    return _wp_get_current_user()->exists();
} 
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号