Ошибка в WordPress MS wp-admin/includes/post.php с генератором шорткодов

28 февр. 2011 г., 21:38:20
Просмотры: 1.7K
Голосов: 0

У меня возникла серьезная проблема в 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

Я немного скептически отношусь к раскрытию слишком большого количества информации до выхода темы, но если требуется доступ к панели администратора, то, если возможно, свяжитесь со мной.

Заранее спасибо, Мэтью.

0
Все ответы на вопрос 2
6

Я заметил одну проблему в вашем условии case для радиокнопок: В теге <label> вы используете $val, но, думаю, вы имели в виду $option['id'].

Не вижу, как это может быть связано с ошибкой foreach, которую вы получаете, но исправить это не помешает.

Странно то, что реальная ошибка исходит из кода ядра: wp-admin/includes/post.php, строка 197. Похоже, вы передаёте какие-то метаданные записи, но не в виде массива, как ожидается. Это помогает вам сузить круг проблем?

28 февр. 2011 г. 22:42:27
Комментарии

Не совсем. Ошибка исчезает, когда я удаляю метабокс Shortcode Generator, так что я уверен, что проблема в нем. Shortcode Generator не имеет функции Post Save, поэтому он не должен ничего передавать при публикации поста. Если убрать эту строку (892), ошибка тоже перестает возникать. Похоже, что вариант с радиокнопкой не принимает $option['id'], и я не понимаю, почему. Установка значения в rand(0, 100) вызывает совершенно другую ошибку.

Matthew Ruddy Matthew Ruddy
1 мар. 2011 г. 00:24:02

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

Matthew Ruddy Matthew Ruddy
1 мар. 2011 г. 00:38:27

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

Dougal Campbell Dougal Campbell
1 мар. 2011 г. 00:43:53

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

Matthew Ruddy Matthew Ruddy
1 мар. 2011 г. 01:06:42

Код на pastebin истёк...

Dougal Campbell Dougal Campbell
1 мар. 2011 г. 22:19:33

Проблема решена. Это было связано с тем, что две опции имели одинаковое имя и ID; проблема с $option['id']. Спасибо, кстати, за помощь.

Matthew Ruddy Matthew Ruddy
3 мар. 2011 г. 21:18:59
Показать остальные 1 комментариев
1

Когда вы получаете сообщение:

Warning: Cannot modify header information - headers already sent by (output started at...

Причина и решение: Обычно это происходит из-за наличия пробелов, переносов строк или другого мусора перед открывающим тегом <?php или после закрывающего тега ?>. Убедитесь, что их нет, и сохраните файл в кодировке UTF-8 без BOM.

28 февр. 2011 г. 22:42:41
Комментарии

Не в этот раз. Ложный вывод исходит из предупреждения PHP, которое генерируется в wp-admin/includes/post.php, как я описал в своем ответе.

Dougal Campbell Dougal Campbell
28 февр. 2011 г. 22:48:31