Wordpress升级版本后插件和主题常见出错及处理方法整理【持续更新】

Wordpress报错怎么解决?

一般常用的排查方法:

  1. 暂时禁用所有插件;
  2. 将主题更改为默认主题;
  3. 修改wp-config.php文件;
  4. 更新固定链接设置,确保设置正确;
  5. 检查.htaccess文件是否存在且是否可写;
  6. 检查主题的页面模板文件是否存在;7、检查wp-config.php文件的数据库凭据是否正确;
  7. 使用phpMyAdmin等工具检查数据库是否正常运行等。

wordpress报错

一,报错Notice:Undefined index:submit in

原代码:

复制代码
if( $_POST['submit'] ){ }

新代码:

复制代码
if(isset($_POST['submit']) && $_POST['submit']) { }

别的相同类似报错都可以按这个方式来解决问题。

二,已不建议给has_cap传入一个参数!用户级别已被废弃,请改用能力。

在插件或主题文件中搜索关键词:add_options_page查找用户级别代码位置。

原代码:

复制代码
add_options_page('Delete-Revision', 'Delete-Revision',8, basename(__FILE__), 'my_options_delete_revision');

新代码:

复制代码
add_options_page('Delete-Revision', 'Delete-Revision','manage_options', basename(__FILE__), 'my_options_delete_revision');

主要是把红色的8修改为红色的manage_options。

三,Notice: 自3.1.0版本起,已不建议给WP_Query传入一个参数!"caller_get_posts"不再被建议使用。请改用"ignore_sticky_posts"

这个直接搜索查找替换文件里的:caller_get_posts 为ignore_sticky_posts 即可。

四,Notice: 为WP_Widget调用的构造方法已自版本4.3.0起废弃!请改用 __construct()。

这个直接搜索查找替换文件里的:parent::WP_Widget 或 $this->WP_Widget 为 parent::__construct

五,create_function函数报错

php 7.3版本不推荐使用create_function函数,在php 7.3中使用**create_function()** 函数会有兼容性报错Deprecated: Function create_function() is deprecated,解决方法是替换掉该函数。

以wordpress的代码为例,原代码如下

复制代码
add_action('widgets_init', create_function('', 'return register_widget("contact");')); 

修改为

复制代码
add_action('widgets_init', function(){register_widget('contact' );});

原代码:

复制代码
$callbacks[$delimiter] = create_function('$matches', "return '$delimiter' . strtolower(\$matches[1]);");

修改为:

复制代码
$callbacks[$delimiter] = function($matches) use ($delimiter) {
    return $delimiter . strtolower($matches[1]);
};

问题描述:
运行一个旧的php项目时报错:

  • PHP message: PHP Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead
  • Warning: preg_replace_callback(): Requires argument 2, 'iconv('UCS-2', 'UTF-8',
  • Function create_function() is deprecated>

原因分析:

  • php 5.6之后的版本不再支持pre_replace()函数
  • 自PHP 7.2起,函数create_function因为代码注入漏洞已被弃用。从PHP 5.3开始,执行此操作的首选方法是使用匿名函数。要捕获外部变量的值,请使用use声明。

解决方案:

将

复制代码
preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2BE', 'UTF-8', pack('H4', '\\1'))", json_encode($data));

修改为:

复制代码
preg_replace_callback('/\\\\u([0-9a-f]{4})/i', function($matches){return iconv("UCS-2BE","UTF-8",pack("H*", $matches[1]));}, json_encode($data));

或直接封装为一个函数,可实现更好地复用:

复制代码
	function decodeUnicode($str){
		return preg_replace_callback('/\\\\u([0-9a-f]{4})/i', function($matches){return iconv("UCS-2BE","UTF-8",pack("H*", $matches[1]));}, $str);
	}

六、Deprecated: 自3.3.0版本起,已不建议使用contextual_help

提示:Deprecated: 自3.3.0版本起,已不建议使用contextual_help,请换用get_current_screen()->add_help_tab(), get_current_screen()->remove_help_tab()。

复制代码
add_filter( 'contextual_help', '__return_empty_string', 999 );

改为:

复制代码
function wp_remove_contextual_help() {

  $screen = get_current_screen();

  $screen->remove_help_tabs();

}

add_action( 'admin_head', 'wp_remove_contextual_help' );
相关推荐
李纲明2 小时前
WordPress 定时发布不准点或备份/邮件从不跑:先分清 WP-Cron 触发与 DISABLE_WP_CRON,再查回环与系统 Cron
运维·性能优化·wordpress·定时任务·devdiy·wp-cron
李纲明3 小时前
WordPress 登录后跳回登录页或一直转圈:先核 Cookie、站点 URL 与 HTTPS,再查 CDN 与安全插件
登录·cdn·wordpress·cookie·devdiy·安全插件
李纲明3 小时前
WooCommerce 支付成功但订单仍「待付款」或不扣库存:先核 webhook 与支付回调,再查库存预留与缓存
支付·webhook·wordpress·woocommerce·库存·devdiy·订单状态
李纲明4 小时前
WordPress Elementor 编辑器空白或加载转圈:先核 PHP 内存与 REST,再查插件冲突与 Cloudflare
wordpress·elementor·插件冲突·devdiy
李纲明4 小时前
WordPress 媒体库上传失败或一直转圈:先核 PHP 上传限制与目录权限,再查安全插件与对象存储
运维·开发语言·安全·php·wordpress·媒体库·devdiy
李纲明14 小时前
WordPress 定时发布不跑、备份邮件延误:先核 WP-Cron 触发与回环,再改系统 Cron
运维·wordpress·定时任务·devdiy·wp-cron
李纲明1 天前
WordPress 媒体库上传图片失败:先核 PHP 体积与目录权限,再查安全插件与对象存储
php·上传·wordpress·媒体库·devdiy
李纲明2 天前
WordPress 报 Allowed memory size exhausted:先抓堆栈找吃内存的插件,再改 memory_limit
性能优化·php·内存·插件·wordpress·devdiy
李纲明4 天前
WordPress 前台改完还是旧页:浏览器、CDN、页面缓存、对象缓存怎么分层清
缓存·cdn·wordpress·devdiy
李纲明5 天前
WordPress 结账页一直转圈不跳支付:AJAX、缓存排除、支付回调和 REST 怎么逐层核
运维·ajax·缓存·wordpress·woocommerce·devdiy·结账