在hostgator的vps上测试网站,遇到一个关于菜单的奇怪问题。当菜单项数量很多时,保存菜单时末尾的几项会丢失,连菜单位置的设定也没了。

具体的说,我创建了一个菜单,大概有80多个菜单项,这80多个是直接用wordpress import工具导入的测试数据。但当我想修改菜单,增加几项时,问题就来了,只要多加一个,排在最后的菜单必定会消失一个,连菜单位置的设定也没了,导致无法增加更多的菜单项。

google了一下,发现答案,原来是服务器问题,php 5.3.9后增加了一项叫做max_input_vars,默认值1000,即表单一次可以提交1000个变量。超过了怎么办,只能被截断,也就是说传到wordpress的数据早就被服务器截断了,丢失了,wordpress只能对着残缺不全的数据哑巴吃黄连。

具体的原因在这篇文章中,写的相当详细,我就不重复了,直接说说我是怎么解决的。

拷贝一份php.ini,放到wp-admin目录下,在php.ini里加上这几项,问题就可以解决,放到网站根目录下只能改变前台的设置,影响不到后台。

max_input_vars = 2000
suhosin.post.max_vars = 2000
suhosin.request.max_vars = 2000

虽说max_input_vars是从php 5.3.9开始有的,但我用的是php 5.3.28,也有这个变量。如果遇到这个问题,php版本又没到5.3.9,php.ini里也没这项,直接加上就好。