Как избавиться от ошибки — Call to undefined function json_encode () — в WordPress 3.2
Автор: Алексей F8 | Опубликовано: 8 июля 2011 | Рубрика: Вопросы хостинга | 2 комментария
На днях WordPress обновился до версии 3.2
Хорошее обновление, быстродействие движка увеличилось и пр. пр., но лично меня, при попытке создать новую запись в обновленной админке, подкараулила вот такая неприятность.
1 | Fatal error: Call to undefined function json_encode() in /var/www/includes/class-wp-list-table.php on line 905 |
В результате невозможно переключиться в визуальный редактор, да и некоторые другие нужные кнопки перестали нажиматься.
В чем проблема?
Проблема в функции PHP — json_encode (). Она является дополнением и потому не все хостеры включают ее в сборку для своих серверов.
Решение
Всего-то нужно добавить в WordPress собственный обработчик этой функции.
Делается это элементарно:
1. Копируем этот код в буфер обмена (выделяем, жмем правой кнопкой мыши, в выпавшем меню выбираем «Копировать»).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | /* ===================== Костыли для json ============================ */ if (!function_exists('json_encode')) { function json_encode($value) { if (is_int($value)) { return (string)$value; } elseif (is_string($value)) { $value = str_replace(array('\\', '/', '"', "\r", "\n", "\b", "\f", "\t"), array('\\\\', '\/', '\"', '\r', '\n', '\b', '\f', '\t'), $value); $convmap = array(0x80, 0xFFFF, 0, 0xFFFF); $result = ""; for ($i = mb_strlen($value) - 1; $i >= 0; $i--) { $mb_char = mb_substr($value, $i, 1); if (mb_ereg("&#(\\d+);", mb_encode_numericentity($mb_char, $convmap, "UTF-8"), $match)) { $result = sprintf("\\u%04x", $match[1]) . $result; } else { $result = $mb_char . $result; } } return '"' . $result . '"'; } elseif (is_float($value)) { return str_replace(",", ".", $value); } elseif (is_null($value)) { return 'null'; } elseif (is_bool($value)) { return $value ? 'true' : 'false'; } elseif (is_array($value)) { $with_keys = false; $n = count($value); for ($i = 0, reset($value); $i < $n; $i++, next($value)) { if (key($value) !== $i) { $with_keys = true; break; } } } elseif (is_object($value)) { $with_keys = true; } else { return ''; } $result = array(); if ($with_keys) { foreach ($value as $key => $v) { $result[] = json_encode((string)$key) . ':' . json_encode($v); } return '{' . implode(',', $result) . '}'; } else { foreach ($value as $key => $v) { $result[] = json_encode($v); } return '[' . implode(',', $result) . ']'; } } } /* ===================== костыли для json ============================ */ |
2. Заходим на ваш сайт с помощью любого FTP клиента, заходим в папку wp-admin, а в ней в папку includes. Выкачиваем оттуда файл class-wp-list-table.php
Скачайте в 2 разных места. Один будем редактировать, а второй оставим про запас на всякий случай.
3. Открываем файл (который сохранили для редактирования) в тестовом редакторе. Редактор нужен типа Programmer's Notepad. Придется скачивать и устанавливать если нет ничего наподобие. Ворды и блокноты — решительно не подходят.
4. Находим в открывшемся файле находим такой тэг
1 | <?php |
Встаем в начало следующей за ним строки и жмем 3 раза Enter.
Теперь ставим курсор между вышеописанным тэгом и остальным текстом и кликаем по нему правой кнопкой мыши. В открывшемся выпадающем меню жмем «Вставить». Когда наша заплатка вставлена — можно сохранять файл и заливать обратно.
5. Когда файл закачан, заходим в админку WordPress'а и пытаемся создать новую запись.
На моем хостинге после этих действий все заработало, как надо.
Если все заработало и у вас — идем на сайт, откуда был взят код «костылей» и пишем его автору (Alexmuz) большущее спасибо за статью Реализация json_encode на PHP – русский язык UTF-8.
PS Я тоже не буду против благодарности)))
А с вами был Лексиум.
Всего вам доброго.








John
Применил Ваш костыль для другого движка. Сразу заработала регистрация на сайте. А то сутки не мог исправить ошибку. Спасибо за подсказку!
Алексей F8
Всегда пожалуйста))