Ошибка в WordPress MS wp-admin/includes/post.php с генератором шорткодов
У меня возникла серьезная проблема в WordPress 3.1 с включенной функцией Multisite и пользовательским генератором шорткодов в теме. По какой-то причине я получаю следующую ошибку при создании новой страницы/записи/страницы пользовательского типа записи и т.д. Проблема конкретно связана с радио-кнопками и тегом 'name'. Когда я его удаляю, все работает нормально. Когда он установлен как переменная, я получаю ошибку. Однако, если установить переменную как константу (например, текст), то все снова работает.
Вот ошибка, которую я получаю; я не имею понятия, что она означает и что ее вызывает:
Warning: Invalid argument supplied for foreach() in /home/matthew/public_html/wp-admin/includes/post.php on line 197
Warning: Cannot modify header information - headers already sent by (output started at /home/matthew/public_html/wp-admin/includes/post.php:197) in /home/matthew/public_html/wp-includes/pluggable.php on line 897
Вот PHP код (проверьте строку 892): http://pastebin.com/BNK7wE2W
Я немного скептически отношусь к раскрытию слишком большого количества информации до выхода темы, но если требуется доступ к панели администратора, то, если возможно, свяжитесь со мной.
Заранее спасибо, Мэтью.
Я заметил одну проблему в вашем условии case для радиокнопок: В теге <label> вы используете $val, но, думаю, вы имели в виду $option['id'].
Не вижу, как это может быть связано с ошибкой foreach, которую вы получаете, но исправить это не помешает.
Странно то, что реальная ошибка исходит из кода ядра: wp-admin/includes/post.php, строка 197. Похоже, вы передаёте какие-то метаданные записи, но не в виде массива, как ожидается. Это помогает вам сузить круг проблем?
Не совсем. Ошибка исчезает, когда я удаляю метабокс Shortcode Generator, так что я уверен, что проблема в нем. Shortcode Generator не имеет функции Post Save, поэтому он не должен ничего передавать при публикации поста. Если убрать эту строку (892), ошибка тоже перестает возникать. Похоже, что вариант с радиокнопкой не принимает $option['id'], и я не понимаю, почему. Установка значения в rand(0, 100) вызывает совершенно другую ошибку.
Matthew Ruddy
Я немного поэкспериментировал с кодом. Удаление условия 'if($option['std'] == $opt) { echo 'checked="checked"'; }' также исправило ошибку. Похоже, Wordpress воспринимает все отмеченные радиокнопки как часть массива или что-то подобное... Или, может, и нет; это просто предположение.
Matthew Ruddy
Ты говоришь, что если закомментировать строку 892 (где выводится тег <input> для радиокнопки), ошибка исчезает?
Dougal Campbell
Да. Мне удалось ещё больше сузить проблему; удаление 'if($option['std'] == $opt) { echo 'checked="checked"'; }' исправляет ошибку. Не могу понять, почему это происходит...
Matthew Ruddy
Когда вы получаете сообщение:
Warning: Cannot modify header information - headers already sent by (output started at...
Причина и решение:
Обычно это происходит из-за наличия пробелов, переносов строк или другого мусора
перед открывающим тегом <?php или после закрывающего тега ?>. Убедитесь, что их нет, и сохраните файл в кодировке UTF-8 без BOM.