AnyComment — лучший плагин под WordPress для вывода комментариев на вашем сайте, но «из коробки» он не умеет подсветку синтаксиса.
В предыдущей статье, которая была посвещена плагину de:comments, мы выяснили, что SyntaxHighlighter Evolved цепляется за фильтр comment_text для поиска своих шорткодов внутри текста комментария:
Данный фильтр не используется в плагине AnyComment, но, судя по его исходнику, есть аналогичный фильтр с названием anycomment/rest/comments/item_for_response, вот за него и цепляемся:
/**
* Прикрутить SyntaxHighlighter к комментариям
* на базе плагина AnyComment
*
* @param array $data массив с данными о комментарии.
* @param WP_Comment $comment объект комментария.
*
* @return array
*/
function mihdan_add_syntax_highlighter_to_anycomments( $data, $comment ) {
/** @var SyntaxHighlighter $SyntaxHighlighter */
global $SyntaxHighlighter;
$data['content'] = $SyntaxHighlighter->parse_shortcodes_comment( $data['content'] );
return $data;
}
add_filter( 'anycomment/rest/comments/item_for_response', 'mihdan_add_syntax_highlighter_to_anycomments', 10, 2 );
«Ленивая» загрузка
Если в настройках AnyComment включена опция «Ленивая загрузка«, то шорткоды в теле комментария отработают правильно, а вот код не раскрасится, так как на момент активации подсветки кода комментариев в DOM еще нет.
Добавим немного магии на JavaScript — подождем пока в DOM появится нужный нам элемент и повторно активируем подсветку кода:
/**
* Ждем пока в DOM появится элемент с указанным селектором
* и вызовем колбек в момент появления.
*
* @param selector
* @param callback
*/
function waitForEl( selector, callback ) {
var poller = setInterval(
function() {
var $obj = jQuery( selector );
if ( ! $obj.size() ) {
return;
}
clearInterval( poller );
callback( $obj )
},
200
);
}
/**
* Включаем подсветку синтаксиса после загрузки комментариев.
*/
waitForEl(
'#anycomment-load-container',
function ( $obj ) {
SyntaxHighlighter.highlight();
}
);
Результат можно наблюдать в комментариях этого сайта.
Русский разработчик с 20-ти летним стажем. Работаю с PHP, ООП, JavaScript, Git, WordPress, Битрикс, Joomla, Drupal, OpenCart, DLE, Laravel, Moonshine, Symfony, SuiteCRM.
Оптимизирую сайты под Google Page Speed, настраиваю импорты для больших магазинов на WooCommerce + WP All Import. Пишу плагины на заказ. Все мои услуги.
SyntaxHighlighter Evolved в AnyComment
AnyComment — лучший плагин под WordPress для вывода комментариев на вашем сайте, но «из коробки» он не умеет подсветку синтаксиса.
В предыдущей статье, которая была посвещена плагину de:comments, мы выяснили, что
SyntaxHighlighter Evolved
цепляется за фильтрcomment_text
для поиска своих шорткодов внутри текста комментария:Данный фильтр не используется в плагине AnyComment, но, судя по его исходнику, есть аналогичный фильтр с названием
anycomment/rest/comments/item_for_response
, вот за него и цепляемся:«Ленивая» загрузка
Если в настройках AnyComment включена опция «Ленивая загрузка«, то шорткоды в теле комментария отработают правильно, а вот код не раскрасится, так как на момент активации подсветки кода комментариев в DOM еще нет.
Добавим немного магии на JavaScript — подождем пока в DOM появится нужный нам элемент и повторно активируем подсветку кода:
Результат можно наблюдать в комментариях этого сайта.
AnyComment Comments PHP syntaxhighlighter WordPress Хуки
Русский разработчик с 20-ти летним стажем. Работаю с PHP, ООП, JavaScript, Git, WordPress, Битрикс, Joomla, Drupal, OpenCart, DLE, Laravel, Moonshine, Symfony, SuiteCRM.
Оптимизирую сайты под Google Page Speed, настраиваю импорты для больших магазинов на WooCommerce + WP All Import. Пишу плагины на заказ. Все мои услуги.
Веду блог о разработке, дайджест в телеграмме и в ВК.
Вы всегда можете нанять меня.
Плагин Cyr To Lat
Смотрите также