16 августа 2016

Как обернуть в noindex содержание плагина Table of Content Plus

Многие информационные сайты в своих публикациях используют автоматический вывод содержания. Раньше я для подобной функции применял доработанный скрипт от wp-kama, но теперь, когда есть плагин Table of Contents Plus? не вижу в этом смысла. Отличный плагин, его и рекомендую использовать при желании кастомизирую внешний вид.

Часто у администраторов возникает желание закрыть от индексации автоматически выводимое содержание. Данную задачу можно решить плохим и хорошим способом.

Плохое негибкое решение

Я расковырял плагин версии 1601 и отредактировал файл toc.php. В методе the_content внес следующие изменения.

Строка 1524. Добавляю открывающий тег noindex.

Было

$html = '<div id="toc_container" class="' . $css_classes . '">';

Стало

<!--noindex--><div id="toc_container" class="' . $css_classes . '">

Строка 1531. Закрываю noindex.

Было

$html .= '<ul class="toc_list">' . $items . '</ul></div>' . "\n";

Стало

$html .= '<ul class="toc_list">' . $items . '</ul></div>' . "<!--/noindex-->\n";

Теперь содержание, выводимое данным плагином, будет закрыто от индексации по-умолчанию. Единственное, что нужно помнить — негибкость примененного решения заставит повторно вносить правки при обновлении плагина.

Написав эти строки я не смог оставить подобное варварство в покое.

Хорошее гибкое решение

Данное решение запускает в работу фильтрацию контента уже после того, как TOC+ выведет свое содержание. Регулярным выражением фильтр ищет содержание (я привязался к div-у с идентификатором toc_container в начале и символу переноса строки после содержания) и добавляет в начале и в конце теги noindex. Надеюсь, регулярка окажется жизнеспособной не только в моем тестовом случае 🙂

Короче говоря, код, размещенный ниже, нужно скопировать в конец файла function.php активной темы. И хорошего вам настроения 😉

add_filter( 'the_content', 'morkovin_noindex_toc', 1000);
function morkovin_noindex_toc($content){
	return preg_replace('/(<div id="toc_container"[^>]+>[^\n]+)/', '<!--noindex-->$1<!--/noindex-->', $content);
}

Мои мысли по поводу содержания

Информационные сайты переживают какой-то бум размещения содержания там где оно действительно нужно и там, где оно ни к чему. На мой взгляд, содержание нужно использовать именно в тех статьях, где оно поможет сориентироваться читателю: длинных с множеством подзаголовков. Если содержание содержит всего два пункта — то это выглядит по меньшей мере странно.