Быстрый и грязный хак вордпресса

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

По умолчанию вордпресс заменяет [простите за английский, но так наверное будет лучше] 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тить любой код и любые символы (посмотрите код этой статьи тут все символы "настоящие", а не мнемоники &nbsp;). Будут траблы пишите в каменты.

11 Комментарии “Быстрый и грязный хак вордпресса

  1. хехе, у меня не вордпрес ;)
    Но статья интересная :))) а кривые символы в моих статьях из-за кривого копипаста :))))

  2. Мавр, ну нельзя же так :-) грязно хачить ))
    Потом Вордпресс тяжело обновлять. Нужно или в файл functions.php или в плагин какой-то впихать модификацию функции оригинальной и писать что-то вида:

    
    add_action('имя оригинальной функции', 'имя похаченной твоей функции', 0);
    

    напр.

    
    add_action('sanitize_file_name', 'sanitize_filename_title_with_translit', 0);
    

    Еще часто помогает (не уверен, но думаю тут поможет) — remove_filter в тех же плагинах или файле функций темы

  3. @einstein
    Большое спасибо, я обязательно попробую твой способ. и конечно я не мог о нем знать потому что я не работаю с вордпрессом, просто решаю наболевшие проблемы.

  4. оффтоп: зайди на свой сайт из Windows 7 — посмотришь на шапку, посмеешься :-)
    Не буду рассказывать, что там, пускай будет сюрпризом.
    Как Львов? Замело?

  5. ну.. скажем так, как-раз тот, который задумывали верстальщики, но до 7-ки его в стандартной упаковке виндовс не было.
    И выходит «СТАРВІЙ МАВР’S BLOG»

    style.css (строка 59)

  6. «… ванна по колено и холодильник по плечё …» — Like this! (с) Фліт ;)

Комментарии закрыты