为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
撒科打诨 2023-08-11 17:47:19
我正在尝试创建一个函数,如果用户未登录某些页面,则将用户重定向到登录页面,这是我的代码: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,如果用户未登录,则不会打印任何内容。主题函数不是应该在任何地方调用吗?
查看完整描述

3 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

对于你的问题“主题函数不是应该在任何地方调用吗?” 答案是肯定的。我可以确认此代码按我的预期工作:


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(),但会执行许多其他检查和清理工作,其他代码在重定向之前可能需要先运行这些检查和清理工作。


查看完整回答
反对 回复 2023-08-11
?
郎朗坤

TA贡献1921条经验 获得超9个赞

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



查看完整回答
反对 回复 2023-08-11
?
达令说

TA贡献1821条经验 获得超6个赞

您正在进行 php 标头调用,您需要直接从文件的 head 标记之间加载它header.php。以下应该立即起作用。


<?php if ( ! is_user_logged_in() && ! is_admin() ):

$redirect = esc_url( home_url( '/wp-admin' ) );

wp_redirect( $redirect );

exit;

endif; ?>


查看完整回答
反对 回复 2023-08-11
  • 3 回答
  • 0 关注
  • 89 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信