Автоматическое содержание в статьях после любого абзаца или заголовка
На сайте wp-kama есть замечательный класс, который собирает заголовки и формирует содержание статьи. Полезная штука, если у вас длинные статьи.
Вывод после любого абзаца
Получившееся содержание выводится шорткодом или автоматически перед статьей. Автоматическое решение конечно удобная штука, но вот для формирования сниппета в Яндексе не подходит, потому что Яндекс любит брать первые 2-3 строки статьи. А потому, чтобы такого не было, содержание будем выводить автоматически после первого или второго абзаца прямо внутри статьи. Сделать сие можно с помощью вот такого простого кода
//Вставляем содержание после 1-го абзаца статьи.
add_filter( 'the_content', 'prefix_insert_post_ads' );
function prefix_insert_post_ads( $content ) {
if ( is_single() && ! is_admin() ) {
// здесь помещаем нужные настройки для содержания
$args['css'] = false;
$tags = array('h2','h3','h4');
// записываем в переменную значение класса
$ad_code = Kama_Contents::init( $args )->make_contents( $content, $tags );
return prefix_insert_after_paragraph( $ad_code, 1, $content ); // изменением цифирки, меняем номер абзаца
}
return $content;
}
// Родительская функция перебора абзацев
function prefix_insert_after_paragraph( $insertion, $paragraph_id, $content ) {
$closing_p = '</p>';
$paragraphs = explode( $closing_p, $content );
foreach ($paragraphs as $index => $paragraph) {
if ( trim( $paragraph ) ) {
$paragraphs[$index] .= $closing_p;
}
if ( $paragraph_id == $index + 1 ) {
$paragraphs[$index] .= $insertion;
}
}
return implode( '', $paragraphs );
}
Добавляете этот код в файл function.php
вместо функции вывода перед статьей. Более подробно в видео
Вывод после любого заголовка
Работа функции довольно проста: в тексте статьи ищем закрывающий тег </p>
и после него добавляем нужный контент. В данном случае — это содержание статьи. По тому же самому принципу можно вывести содержание после любого заголовка — достаточно только вместо </p>
указать закрывающий тег заголовка. Например, </h2>
или любой другой…
//Вставляем содержание после 1-го абзаца статьи.
add_filter( 'the_content', 'prefix_insert_post_ads' );
function prefix_insert_post_ads( $content ) {
if ( is_single() && ! is_admin() ) {
// здесь помещаем нужные настройки для содержания
$args['css'] = false;
$tags = array('h2','h3','h4');
// записываем в переменную значение класса
$ad_code = Kama_Contents::init( $args )->make_contents( $content, $tags );
return prefix_insert_after_paragraph( $ad_code, 1, $content ); // изменением цифирки, меняем номер абзаца
}
return $content;
}
// Родительская функция перебора абзацев
function prefix_insert_after_paragraph( $insertion, $paragraph_id, $content ) {
$closing_p = '</h2>'; // здесь указываем нужный тег
$paragraphs = explode( $closing_p, $content );
foreach ($paragraphs as $index => $paragraph) {
if ( trim( $paragraph ) ) {
$paragraphs[$index] .= $closing_p;
}
if ( $paragraph_id == $index + 1 ) {
$paragraphs[$index] .= $insertion;
}
}
return implode( '', $paragraphs );
}
Если есть вопросы, пишем в комментариях.