В wordpress в админке пропадают виджеты
Установил на сервере последнюю версию wordpress взятую с оф. сайта(не от русских локализаторов).
Столкнулся со следующей проблемой: перетягиваю виджет "текст" в нужную позицию, пишу в теле виджета русский текст, сохраняю. все проходит без ошибок. открываю страницу редактирования виджетов в админке еще раз - виджета на его месте нет.
Проверял в базе - запись о виджете присутствует. Проблема усугубляется тем, что при создании нескольких виджетов типа текст все они перестают отображаться, если в одном из них набрать русский текст.
Кодировка базы и таблиц utf8_general_ci.
Для wordpress параметры подключения стандартные
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
Подскажите в какую сторону копать? Почему это может происходить?
Столкнулся со следующей проблемой: перетягиваю виджет "текст" в нужную позицию, пишу в теле виджета русский текст, сохраняю. все проходит без ошибок. открываю страницу редактирования виджетов в админке еще раз - виджета на его месте нет.
Проверял в базе - запись о виджете присутствует. Проблема усугубляется тем, что при создании нескольких виджетов типа текст все они перестают отображаться, если в одном из них набрать русский текст.
Кодировка базы и таблиц utf8_general_ci.
Для wordpress параметры подключения стандартные
define('DB_CHARSET', 'utf8');
define('DB_COLLATE', '');
Подскажите в какую сторону копать? Почему это может происходить?
1 ответов
wp-includes/functions.php
function is_serialized кривая, глючит с мультибайтовыми стрингами. можно попробовать из предыдущих редакций взять.
ВЕРСИЯ = '3.5.2';
Проблема в функции is_serialized (wp-includes/functions.php), неправильное распознавание мультибайтовых строк.
замените её на
function is_serialized( $data ) {
// if it isn't a string, it isn't serialized
if ( ! is_string( $data ) )
return false;
$data = trim( $data );
if ( 'N;' == $data )
return true;
$length = strlen( $data );
if ( $length < 4 )
return false;
if ( ':' !== substr($data,1,1) )
return false;
$lastc = substr($data,$length-1,1);
if ( ';' !== $lastc && '}' !== $lastc )
return false;
$token = $data[0];
switch ( $token ) {
case 's' :
if ( '"' !== substr( $data,$length-2,1 ))
return false;
case 'a' :
case 'O' :
return (bool) preg_match( "/^{$token}:[0-9]+:/s", $data );
case 'b' :
case 'i' :
case 'd' :
return (bool) preg_match( "/^{$token}:[0-9.E-]+;\$/", $data );
}
return false;
}