Быстрый и грязный хак вордпресса
Продолжая тему блогов которых я читаю, не могу сказать что все даже очень популярные авторы заботятся об удобстве чтения своих статей. Наглядный пример это блоги на вордпрессе.
По умолчанию вордпресс заменяет [простите за английский, но так наверное будет лучше] double quotation marks (") на double angels («») не очень вникая в очередность, поэтому можно встретить »слово» в »кавычках«. Так же заменяются quotation marks (') на apostrophe (’), three dots (...) на ellipses (…), two or three hyphens (---) на dash (—) и тд. Конечно есть парачка поправок, типа того что если в кирилических доменах xn-- заменилось на xn— то оно заменится обратно, но это не спасает.
В результате всех этих замен становиться совершенно невозможно постить код потому что вместо
"This' 'cause of you...".test(/[0-9--]/);
Получается
«This’ ’cause of you…«.test(/[0-9—]/);
Регулярка, кстати, правильная.
Но нашим доблестным сайтоводам ванна по колено и холодильник по плечё, нет чтоб сделать удобно, они постят как есть. При этом если скопировать то что получается в результате то оно никогда работать не будет.
Но это в лучшем случаи в худшем если запостить статью содержащую javascript и сделать там логический отступ в два перевода каретки то этот двойной отступ заменится на <p></p> после чего скрипт перестанет работать.
Не помню но кажетсья было еще пару подобных прелестей, но результат один - геморой при разборе примера кода.
Вобщем я это все пишу для того чтобы показать вам дорогие мои сайтоводы как это побороть. Открываем файл \wordpress\wp-includes\formatting.php и в первой же функции (если у вас wp 2.8.6) под названием wptexturize ищем кусок
for ( $i = 0; $i < $stop; $i++ )
Ровно перед ним надо влепить вот таую конструкцию
$cockney = $cockneyreplace = $static_characters = $static_replacements = $dynamic_characters = $dynamic_replacements = array();
Есть правда подозрения что вообще всю функцию надо закоментарить, но тогда что-то ломается, не помню что, давно проверял. Дальше больше, надо найти функцию wpautop и заменить ее полностью на:
function wpautop($pee, $br = 1) {
if ($br) {
$pee = preg_replace_callback('/<(script|style|code|pre).*?<\/\\1>/s', create_function('$matches', 'return str_replace("\n", "<WPPreserveNewline />", $matches[0]);'), $pee);
$pee = preg_replace('|>\s*<|', '><', $pee);
$pee = preg_replace('|(?<!<br />)\s*\n|', "<br />\n", $pee); // optionally make line breaks
$pee = str_replace("><", ">\n<", $pee);
$pee = str_replace('<WPPreserveNewline />', "\n", $pee);
}
return $pee;
}
Все. После этого можно поcтить любой код и любые символы (посмотрите код этой статьи тут все символы "настоящие", а не мнемоники ). Будут траблы пишите в каменты.
Свежие комментарии