WordPress 主题functions.php 不适用于非登录用户

我正在尝试创建一个函数,如果用户未登录某些页面,则将用户重定向到登录页面,这是我的代码:


add_action( 'init', function()

{

    if ( is_user_logged_in())                                           //déjà identifié

        return;

    


    if (preg_match('#secured-page#', $_SERVER['REQUEST_URI']))

    {

        header( 'location: /wp-login.php' );

        exit();

    }

});

由于它不起作用,并且我尝试了所有简化,因此我尝试print "hello"在父主题和子主题的开头添加 a functions.php,如果用户未登录,则不会打印任何内容。


主题函数不是应该在任何地方调用吗?


撒科打诨
浏览 90回答 3
3回答

慕慕森

对于你的问题“主题函数不是应该在任何地方调用吗?” 答案是肯定的。我可以确认此代码按我的预期工作:function.php(子级或父级)add_action('init', function () {    if (!is_user_logged_in() && $GLOBALS['pagenow'] !== 'wp-login.php' && preg_match('#secured-page#', $_SERVER['REQUEST_URI'])) {        wp_safe_redirect(esc_url(home_url('/wp-login.php')));        exit();    }});根据您的代码,我唯一能说的是,要么存在preg_match('#secured-page#', $_SERVER['REQUEST_URI'])始终为假的问题,要么存在其他代码的干扰。您能否确认您的代码成功preg_match('#secured-page#', $_SERVER['REQUEST_URI'])并返回1正确的场景?使用 WordPress 函数而不是header()使用 PHP 函数wp_safe_redirect()。它最终会调用 PHP header(),但会执行许多其他检查和清理工作,其他代码在重定向之前可能需要先运行这些检查和清理工作。

郎朗坤

我忘记了我有一个缓存扩展,然后当我登录时,缓存没有被使用,但在其他情况下,服务器为我提供缓存的页面,看起来就像没有调用 function.php 一样。解决方案是清除缓存。

达令说

您正在进行 php 标头调用,您需要直接从文件的 head 标记之间加载它header.php。以下应该立即起作用。<?php if ( ! is_user_logged_in() && ! is_admin() ):$redirect = esc_url( home_url( '/wp-admin' ) );wp_redirect( $redirect );exit;endif; ?>
打开App,查看更多内容
随时随地看视频慕课网APP