^ 回到顶部
  • 人生没有定律,每个人都有自己的节奏
  • 本站wordpress建站教程均通过实践后发布,希望对你有帮助,如果有代码出错,请联系站长解决
  • 希望你的坚持,都是因为热爱,而不是因为不甘心
  • 8年wordpress建站经验,5星服务品质
  • 那些不愿意让你吃亏的人,才是真正值得你深交的人,也是值得你付出时间的人
  • 腾讯云3年2核2G新品轻量限时特惠只需408元

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

陌小雨最近重新在本地安装了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

2 核 2G 限时特惠 396 元/3 年    宝塔建站 10850 大礼包

打开源码发现是主题使用了 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)) )); ?>

赠人玫瑰,手有余香。