我有一个疯狂的错误,我无法弄清楚。我最近升级到 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 密钥和其他
谢谢!
通常当
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", ...);
除此之外,我遇到的类似问题通常都是:
wp-config.php
在版本之间已更改define( 'DB_CHARSET',...)
或define( 'DB_COLLATE', ... );
和/或与数据库/表不同。确保测试时所有日志记录都处于调试状态,如果您可以在日志中捕获错误,请将其添加到问题中以帮助诊断原因。