Столкнулся с багом в WordPress’е при выводе постов, а точнее в “применении” к ним “типографики”:
Как видите, кавычки в некоторых словах расставлены абсолютно не так, как нужно. В поисках решения проблемы обнаружил следующее - в WordPress’е на каждый блок выходных данных, будь то заголовок, сам пост, его комментарии или что-либо еще, навешиваются фильтры, которые определенным образом изменяют блок - убирают теги, заменяют одни символы на другие и т. д.
В данном случае меня интересовал блок the_content (в данном случае понятие “блок” можно интерпретировать как “функция WP, которая возвращает некий контент”), который выводит содержимое поста. В файле wp-includes/default-filters.php можно увидеть, какие фильтры применяются к этому блоку:
add_filter('the_content', 'wptexturize');
add_filter('the_content', 'convert_smilies');
add_filter('the_content', 'convert_chars');
add_filter('the_content', 'wpautop');
add_filter('the_content', 'prepend_attachment');
Методом проб и ошибок было установлено, что найденный мной баг “создает” фильтр wptexturize (в WP “фильтр” - это функция, которая принимает 1 аргумент - входящий текст, и возвращает обработанный текст). Функция нашлась в файле wp-includes/formatting.php. Она выполняет “типографскую” работу, при этом пропуская всё, что находится между тегами pre, code, kbd, style и script. В теории… На практике - нихрена она не пропускает, если внутри одного из этих тегов будет какой-либо другой тег (что, в принципе, возможно, но встречается редко, а случай pre > code система хавает на ура), либо если внутри какого-нибудь из этих тегов встретится \[.*\] - вот такой кусок (у меня этим куском был ['comment_post_ID'], например). Почему так - не могу знать (мне вообще непонятно зачем наряду с тегами <.*> рассматривать еще и \[.*\]), но факт остается фактом. Улучшенная версия этого файла находится здесь (у меня WP 2.5.1, если что).
One Ping to “Wordpress Filters: баг в wptexturize”
5 Responses to “Wordpress Filters: баг в wptexturize”
-
1. Vadim Voituk Says:
May 19th, 2008 at 10:24Негоже файлики WP патчить имея столь мощный механизм расширения.
Я уже 2жды на это наступил - теперь при каждом обновлении diff-ом приходится изменения merge-ить
По хорошему неплохо бы создать плагин, который добавит свой фильтр тем самым этот баг пофиксит. -
2. FX Poster Says:
May 19th, 2008 at 10:51Уже. Спасибо.
-
3. Ilya Says:
May 19th, 2008 at 12:17непонятно зачем наряду с тегами <.*> рассматривать еще и \[.*\]),
bb-codes? -
4. FX Poster Says:
May 19th, 2008 at 12:52bb-codes?
Может быть… -
5. Владимир Says:
May 24th, 2008 at 12:14С фильтрами действительно морока. На днях написал плагин, который добавляет блок ссылок из поисковых фраз, по которым приходят на блог - берется из рефера и задача стояла в коннце поста добавить список ul. Wordpress тег ul закавычивал в пааграф p. Пришлось крутить и вертеть добавляемым html кодом. Решение нашел такое: перед списком ul ставлю строку закавыченную в p /p тогда все нормально. ненормально то, что примитивный html код приходится напильником обрабатывать…,







May 19th, 2008 at 10:50
[...] мне Wordpress Filters: баг в wptexturize May [...]