Ошибка в 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) вызывает совершенно другую ошибку.

Я немного поэкспериментировал с кодом. Удаление условия 'if($option['std'] == $opt) { echo 'checked="checked"'; }' также исправило ошибку. Похоже, Wordpress воспринимает все отмеченные радиокнопки как часть массива или что-то подобное... Или, может, и нет; это просто предположение.

Ты говоришь, что если закомментировать строку 892 (где выводится тег <input>
для радиокнопки), ошибка исчезает?

Да. Мне удалось ещё больше сузить проблему; удаление 'if($option['std'] == $opt) { echo 'checked="checked"'; }'
исправляет ошибку. Не могу понять, почему это происходит...

Когда вы получаете сообщение:
Warning: Cannot modify header information - headers already sent by (output started at...
Причина и решение:
Обычно это происходит из-за наличия пробелов, переносов строк или другого мусора
перед открывающим тегом <?php
или после закрывающего тега ?>
. Убедитесь, что их нет, и сохраните файл в кодировке UTF-8 без BOM.
