Wordpress侧边栏小部件在更新MySQL数据库中的链接时被禁用


Wordpress sidebar widget gets disabled on updating link in the MySQL database

当我更改数据库中的twitter链接时,我的wordpress侧边栏小部件消失了,用wp_options表下的新链接替换了所有以前的链接。除了链接,我没有更改任何其他内容,但小部件仍然从正面消失了,我做错了什么,以及我如何无法从数据库中删除它。

我不确定,但我怀疑您的更新在数据库中导致了一些无效的PHP。为了将复杂结构作为字符串存储在数据库中,在存储之前对值进行序列化。

例如,以下

<?php
    $example = array("a string", "another string");
    echo serialize($example);
?>

输出

a:2:{i:0;s:8:"a string";i:1;s:14:"another string";}

这看起来与许多wp_options值相似。相关部分是"字符串"前面的8。这就是绳子的长度。如果在不更改该值的情况下将字符串更改为不同长度的字符串,PHP(和WordPress)将无法取消该值的序列化。

例如,

<?php
    print_r( unserialize('a:2:{i:0;s:8:"a different string";i:1;s:14:"another string";}') );
?>

中的结果

Notice: unserialize(): Error at offset 22 of 61 bytes in D:'tmp'so.php on line 11

我怀疑WordPress在你更新后出现了这个错误。

为了解决您的问题,我首先要反转您运行的更新,这样序列化的PHP是有效的。然后更新管理屏幕中的值。

如果无法通过管理屏幕进行更新,请编写一个小型PHP程序,获取(现在正确的)序列化值,取消序列化,更改适当的值,然后再次序列化。将序列化的结果用作wp_options表中的新值。