В wordpress в админке пропадают виджеты

Установил на сервере последнюю версию wordpress взятую с оф. сайта(не от русских локализаторов).
Столкнулся со следующей проблемой: перетягиваю виджет "текст" в нужную позицию, пишу в теле виджета русский текст, сохраняю. все проходит без ошибок. открываю страницу редактирования виджетов в админке еще раз - виджета на его месте нет.
Проверял в базе - запись о виджете присутствует. Проблема усугубляется тем, что при создании нескольких виджетов типа текст все они перестают отображаться, если в одном из них набрать русский текст.

Кодировка базы и таблиц 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;
}