Главная > PHP, Программирование > Быстрый и грязный хак вордпресса

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

18 Декабрь 2009

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

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

  1. 18 Декабрь 2009 в 18:18 | #1
    " «» ' ’ ... … --- — от админа
  2. 18 Декабрь 2009 в 18:19 | #2
    " «» ' ’ ... … --- — от гостя
  3. 19 Декабрь 2009 в 05:56 | #3
    хехе, у меня не вордпрес ;) Но статья интересная :))) а кривые символы в моих статьях из-за кривого копипаста :))))
  4. 19 Декабрь 2009 в 13:27 | #4
    @deerua ах ты ж копипастер!
  5. 19 Декабрь 2009 в 13:47 | #5
    Мавр, ну нельзя же так :-) грязно хачить )) Потом Вордпресс тяжело обновлять. Нужно или в файл functions.php или в плагин какой-то впихать модификацию функции оригинальной и писать что-то вида:
    
    add_action('имя оригинальной функции', 'имя похаченной твоей функции', 0);
    
    напр.
    
    add_action('sanitize_file_name', 'sanitize_filename_title_with_translit', 0);
    
    Еще часто помогает (не уверен, но думаю тут поможет) - remove_filter в тех же плагинах или файле функций темы
  6. 19 Декабрь 2009 в 13:51 | #6
    @einstein Большое спасибо, я обязательно попробую твой способ. и конечно я не мог о нем знать потому что я не работаю с вордпрессом, просто решаю наболевшие проблемы.
  7. 19 Декабрь 2009 в 14:19 | #7
    оффтоп: зайди на свой сайт из Windows 7 - посмотришь на шапку, посмеешься :-) Не буду рассказывать, что там, пускай будет сюрпризом. Как Львов? Замело?
  8. 19 Декабрь 2009 в 16:27 | #8
    оффтоп: типа шрифт ваще не тот? Замело :(
  9. 19 Декабрь 2009 в 19:24 | #9
    ну.. скажем так, как-раз тот, который задумывали верстальщики, но до 7-ки его в стандартной упаковке виндовс не было. И выходит "СТАРВІЙ МАВР'S BLOG" style.css (строка 59)
  10. 20 Декабрь 2009 в 00:24 | #10
    поправил, пасиб
  11. ShadowX
    28 Декабрь 2009 в 11:22 | #11
    "... ванна по колено и холодильник по плечё ..." - Like this! (с) Фліт ;)
Комментирование отключено.