因ereg_replace()弃用引起的WordPress主题无法正常使用的解决办法

Author: 陌小雨Date: 2017-07-22View: 365

陌小雨最近重新在本地安装了XAMPP,php版本是比较高级的,重新启用yusi或者一些比较老的主题的时候,预览首页的时候会弹出错误:

Fatal error
Uncaught Error: Call to undefined function ereg_replace() in C:\xampp\htdocs\test01\wp-content\themes\yusi1.0\header.php:46 Stack trace: #0 C:\xampp\htdocs\test01\wp-includes\template.php(684): require_once() #1 C:\xampp\htdocs\test01\wp-includes\template.php(643): load_template(‘C:\\xampp\\htdocs…’, true) #2 C:\xampp\htdocs\test01\wp-includes\general-template.php(45): locate_template(Array, true) #3 C:\xampp\htdocs\test01\wp-content\themes\yusi1.0\blog.php(1): get_header() #4 C:\xampp\htdocs\test01\wp-content\themes\yusi1.0\index.php(3): include(‘C:\\xampp\\htdocs…’) #5 C:\xampp\htdocs\test01\wp-includes\template-loader.php(74): include(‘C:\\xampp\\htdocs…’) #6 C:\xampp\htdocs\test01\wp-blog-header.php(19): require_once(‘C:\\xampp\\htdocs…’) #7 C:\xampp\htdocs\test01\index.php(17): require(‘C:\\xampp\\htdocs…’) #8 {main} thrown in C:\xampp\htdocs\test01\wp-content\themes\yusi1.0\header.php on line 46

打开源码发现是主题使用了ereg_replace这个函数

<?php echo str_replace("</ul></div>", "", ereg_replace("<div[^>]*><ul[^>]*>", "", wp_nav_menu(array('theme_location' => 'nav', 'echo' => false)) )); ?>

然而在php5.3版本及以后版本中,为了让编程更简洁,早已废弃了ereg_replace正则函数,所以会提示错误,这个函数经常使用,下面我有两个解决的方法:

1.把php版本更换至php5.0,继续使用早期版本的php环境,但这种方法未免有点不客观,假如你是购买的虚拟主机,你就没有办法更换php版本

2.修改php环境的配置文件,也就是修改php.ini文件:

找到 ;extension=php_mbstring.dll 更改为:extension=php_mbstring.dll
找到 ;mbstring.func_overload = 0 修改为:mbstring.func_overload = 7

这样也可以继续使用,但修改php.ini文件同第一种方法一样有限制,并不是所有的php运行环境你都有权修改

3.使用最新的正则函数 preg_replace,在正则替换时稍有不同,

如:ereg_replace(“[/\]{1,}”, ‘/’, dirname(__FILE__) )

修改后应该为: preg_replace(“/[/\]{1,}/”, ‘/’, dirname(__FILE__) )

在phpv5.3中,php推荐使用第3种方法,因为preg_replace要比ereg_replace执行的效率快很多

yusi主题包括以这个主题为原型修改的其他主题,只要修改ereg_replace这个函数调用的地方即可正常使用了:

<?php echo str_replace("</ul></div>", "", preg_replace("/<div[^>]*><ul[^>]*>/", "", wp_nav_menu(array('theme_location' => 'nav', 'echo' => false)) )); ?>