升级到 PHP 8.2 和 WP 6.3 后,get_option() 未返回 users_can_register 的 dB 值

问题描述 投票:0回答:1

我有一个疯狂的错误,我无法弄清楚。我最近升级到 PHP 8.2 和 Wordpress 6.3。大约在同一时间,我试图防止垃圾邮件注册,因此我通过 WordFence 插件将 reCaptcha 添加到登录和注册页面(后来禁用了它)。在我测试不充分的过程中,我们的网站失去了让新用户注册的能力,我不确定之后发生了什么变化,因为我一下子做了很多改变(我知道......坏习惯。)

我已经查看了所有代码,如果我为 users_can_register 选项编写 wp 查询,我会得到正确的值,但 get_option() 函数返回一个空字符串,因此注册被禁用,我无法重新启用它。我无法让 wp-admin 常规设置页面显示或保存“任何人都可以注册”的复选框(但该选项值在数据库中设置为 1)。

我只能认为其他一些插件弄乱了 get_option('users_can_register') 返回的内容。我们在这些函数的 WordPress 核心文件中添加了一堆错误日志,但我仍然感到困惑。

谁能帮我想想另一个地方可以看吗?我们尝试禁用所有插件并使用二十二十三主题,但仍然存在同样的问题。哦,有一次我尝试使用插件降级到 WP 6.2.2,但这也没有解决问题。我重新安装了 WP 6.3。

我应该注意到,与 PHP 8 相关的各种插件中可能仍然存在一些需要修复的弃用错误,但我认为它们与获取 wp_option 值没有任何关系。 get_option 值为我们测试的每个其他 wp_option 返回正确的值(例如博客名称等)。在我的 MAMP 测试环境中,该问题不会发生在我的本地计算机上,因此我认为生产中某些内容已损坏......但是什么?

此外,我的页面和帖子块编辑器在升级时损坏了,我必须通过安装古腾堡插件来修复它。

还能是什么?

尝试过: - 禁用插件 -2023年主题 -错误日志添加到 wp-admin/options.php 和 options-general.php -编写一个 PHP 页面来测试 get_option 直接调用 users_can_regiter 密钥和其他

  • 检查错误日志
  • 清除缓存
  • 这是 AWS 上的 Elastic Beanstalk 默认 nginx 平台
  • 在同一个 EC2 实例上部署新的代码包
  • 可以提供其他已安装插件的列表,包括WordFence、W3TC、Event Espresso(高度定制)等等。

谢谢!

wordpress registration wordpress-gutenberg php-8.2
1个回答
0
投票

通常当

get_option('users_can_register')
返回
""
(空字符串)时,数据库中存储的值是
NULL
false
。但是,某些插件可能会在从数据库检索值后使用挂钩 来更改值。因此,即使您在数据库中看到的值是“正确的”,插件仍可能通过以下挂钩之一覆盖它:

apply_filters( "default_option_users_can_register", ...);
apply_filters( "option_users_can_register", ...);
apply_filters( "pre_option_users_can_register", ...);

除此之外,我遇到的类似问题通常都是:

  • 一个或多个插件与 PHP 8.2 不兼容
  • 升级的 PHP 版本中缺少或不可用所需的 PHP 库
  • 与本地/开发/测试环境相比,
    wp-config.php
    在版本之间已更改
    define( 'DB_CHARSET',...)
    define( 'DB_COLLATE', ... );
    和/或与数据库/表不同。

确保测试时所有日志记录都处于调试状态,如果您可以在日志中捕获错误,请将其添加到问题中以帮助诊断原因。

© www.soinside.com 2019 - 2024. All rights reserved.