Мистический Баг Последнего Wordpress Старой Opera 8.5

Я провел четыре часа ночи в поисках информации.

В итоге мне пришлось заново разбираться в коде, вооружившись учебником и интернетом.

Готовимся к запуску корпоративного блога.

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

Они только недавно выпустили какую-то стабильную версию.

Бьюсь об заклад. Я счастлив.

Я начинаю тестировать.

Добавляю комментарии.

В IE все в порядке.

В Фаерфоксе все в порядке.

Начинаю тестировать в Опере.

упс.

После того как гость оставляет комментарий, страница не обновляется.

Я нажимаю F5, чтобы обновить его вручную.

Я вижу, что комментарий вошел в базу данных.

В других моих блогах этого нет (у них также есть более старая версия Wordpress).

Я начинаю копать.

Я поставлю другую тему.

Все так же.

Я устанавливаю набор плагинов из другого блога.

Без изменений.

Я удаляю и переустанавливаю Wordpress. Баг остался.

То же самое я вижу и в чужих блогах, но не хочу, чтобы что-то подобное осталось со мной, особенно в корпоративном блоге.

Ищем его в Яндексе.

Ничего.

Ищем в Google. Ищем его на сайте Wordpress. Огромное количество багрепортов, на которые нет ответа уже 7-8 месяцев.

Бесплатное программное обеспечение, новогодние елки.

В общем, поиск не дал никаких результатов (обычно 20 минут достаточно, чтобы найти ответ).

Имея уже опыт поддержки и развития одного программного продукта, я понимаю, что проблема кроется в обновленной версии.

Догадка подтвердилась установкой старого Wordpress. Все работало.

Поехали.

Теперь я знаю, что проблема скорее всего в одной из функций из файла wp-comments-post.php (он принимает комментарии).

Сначала просто пытаюсь заменить файлом из старой версии.

Перестает работать вообще.

Я начинаю копаться в этом файле.

Я не программист, время от времени разбираюсь в чужом коде.

Я предполагаю, что он сначала делает что-то вроде этого, а потом перенаправляет пользователя на страницу с ответом.

В конце я вижу такую конструкцию: $location = (пусто($_POST['redirect_to'])? get_permalink($comment_post_ID): $_POST['redirect_to']).

'#комментарий-'.

$ комментарий_ид; $location = apply_filters('comment_post_redirect', $location, $comment); wp_redirect ($ местоположение); Я не знаю, почему я на нее подсела.

Сравните со старым Wordpress: $location = (пусто($_POST['redirect_to']))? get_permalink($comment_post_ID): $_POST['redirect_to']; wp_redirect($location); Сначала я подумал, что это как-то связано с apply_filters. Прокомментировал это.

Проблема все еще существует. Я рассматривал эту конструкцию (?: ) около 10 минут (не смог найти в туториале, какая операция производится с двоеточием).

Я ищу, что такое пустота.

Оказывается, это функция, которая проверяет, пуст ли ее аргумент. Тут я начинаю понимать, что эта конструкция проверяет какое-то условие и в зависимости от него генерирует ссылку для редиректа.

А «redirect_to», оказывается, — это какое-то скрытое поле формы, которое вы можете вставить в свою тему и сообщить движку, куда направить пользователя после комментария.

Я изначально не нашел такого поля в темах WordPress в comment.php. И тут я замечаю, что в предыдущей версии кронштейн стоит в другом месте.

Я решил попробовать заменить эту конструкцию со скобками на ту, что была в предыдущем WordPress. Кажется, это сработало.

Я до сих пор не понимаю, что я там напортачил и почему это сработало.

Был: $location = (пусто($_POST['redirect_to'])? get_permalink($comment_post_ID): $_POST['redirect_to']).

'#комментарий-'.

$ комментарий_ид; Стал: $location = (пусто($_POST['redirect_to']))? get_permalink($comment_post_ID): $_POST['redirect_to'].

'#комментарий-'.

$ комментарий_ид; Теперь куда-то пропадает «хвост», который перенаправляет не просто на страницу, а на добавленный комментарий.

Пытаемся заключить скобочную конструкцию еще в одну скобку: $location = ((пусто($_POST['redirect_to']))? get_permalink($comment_post_ID): $_POST['redirect_to']).

'#комментарий-'.

$ комментарий_ид; В IE и FF работает, но Opera снова перестала обновлять страницу.

Курсор висит, отображается какая-то загрузка и всё.

В итоге я пришел к такому варианту: $location = (пусто($_POST['redirect_to']))? get_permalink($comment_post_ID): $_POST['redirect_to']; $location = $location. '#комментарий-'.

$ комментарий_ид; Но это еще не все!!! Добавляю один комментарий, потом второй.

И тогда опа! Баг вернулся.

Я пытаюсь поставить косую черту перед хешем.

Добавляются.

Следующий комментарий заключается в том, что страница больше не обновляется.

Я убираю косую черту.

Добавлен.

Следующий комментарий - снова ошибка.

Может кто-нибудь сказать мне, в чем дело? И еще, я до сих пор не понимаю, почему этот баг появляется только в Опере и только в Wordpress 2.2? Теги: #wordpress #Wordpress #ошибки #Чулан

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.