Как вставлять фрагменты программного кода в посты и комментарии без плагинов

Как вставлять фрагменты программного кода в посты и комментарии без плагинов | n-wp.ru
👍 Научим бесплатно правильно создавать сайты на WordPress. Подробнее →

В блогах, подобных тому, который вы сейчас просматриваете, очень часто возникает необходимость публикации фрагментов программного кода. В основном это код PHP, CSS и HTML. Не скрою, что на данный момент правильная вставка программного кода (с его подсветкой) в посты и комментарии – одна из самых актуальных для меня проблем. Есть многочисленные жалобы на то, что код с помощью плагинов вставляется неправильно, часть его теряется, иногда это приводит к тому, что некоторые посты отображаются неверно. Я протестировал практически все более-менее функциональные плагины, с помощью которых можно вставить программный код с подсветкой в посты и комментарии, и, найдя несколько решений и поставив несколько заплаток, максимально приблизился к оптимальному варианту Однако признаюсь, что проблему полностью еще не решил. Впрочем, но не у всех такой специфичный блог, как этот, поэтому большинству вставка програмного кода бывает нужна изредка. Есть один способ, который позволяет вставлять и на лету преобразовываеть код так, чтобы он выглядел корректно, причем делать это без плагинов.

Как вставлять фрагменты программного кода в посты и комментарии без плагинов

При вставке кода главной проблемой являются специальные символы, обозначающие различные скобочки и кавычки – WordPress их воспринимает буквально, считая, что это элементы HTML-разметки. Поэтому код, вместо того чтобы быть опубликованным, выполняется, и вместо, например, кода <table>…</table> отображается таблица. Решение этой проблемы тривиальное – нужно скобочки и кавычки в коде поменять на их HTML-обозначения. Например, поменять < на &lt;. Можно это сделать и вручную, но тогда блоггинг станет невыносимой редактурой кода, а комментарии и вовсе будут прокляты. Тут можно воспользоваться автоматическим преобразованием – код, обрамленный разметкой PRE, автоматически при публикации изменит спецсимволы на их HTML-значения. Вот так выглядит код для автозамены проблемных элементов кода в постах и комментариях:

add_filter('pre_post_content', 'encode_code_in_post');
function encode_code_in_post($source) {
  $encoded = preg_replace_callback('/<code>(.*?)

/ims',
create_function(
'$matches',
'$matches[1] = preg_replace(
array("/^[r|n]+/i", "/[r|n]+$/i"), "",
$matches[1]);
return "" . htmlentities($matches[1]) . "";'
),
$source);
if ($encoded)
return $encoded;
else
return $source;
}

add_filter('pre_comment_content', 'encode_code_in_comment');
function encode_code_in_comment($source) {
$encoded = preg_replace_callback('/(.*?)/ims',
create_function(
'$matches',
'$matches[1] = preg_replace(
array("/^[r|n]+/i", "/[r|n]+$/i"), "",
$matches[1]);
return "" . htmlentities($matches[1]) . "";'
),
$source);
if ($encoded)
return $encoded;
else
return $source;
}

Этот код нужно вставить в файл functions.php. Использовать так: <pre>код</pre>

Можно даже оформить код, вставив в файл style.php:

pre {color:#888; padding:2px; border:1px solid #eee;}

Приведенный способ не новый, далеко не универсальный (например, неудобно редактировать исходный код и большие фрагменты), но если программный код нужно вставлять время от времени, не очень часто - то самое оно. Есть аналогичное решение, реализованное в виде плагина.

Создай свой первый сайт на WordPress

tiaurus

Автор n-wp.ru — блога о WordPress для новичков.

Оцените автора
Добавить комментарий

  1. 313

    А как сделать что бы для всего текста символы:

    < > & ' " заменялись на & < > &apos; " соответственно?

    Или хотя бы для RSS ленты так как сделал RSS ленту для Яндекс Новости плагином http://saintist.ru/2011/02/14/wordpress-plugin-rss2-0-dlya-news-yandex-ru/, а там выводятся эти символы и лента не выводит текст.

    Ответить
    1. 313

      заменялись на & amp ; & lt ; & gt ; & apos ; & quot ; (без пробелов)

      Ответить
×
WordPress:
прокачай свой сайт!

Скидка на премиум темы и плагины

Успей забрать скидку ⋙