Автоматическое содержание в статьях после любого абзаца или заголовка

На сайте 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 );
}

Замену производим в строке 17!

Если есть вопросы, пишем в комментариях.

Об авторе
Артем Абрамович

Автор и ведущий проекта «Финты WordPress». WordPress & WooCommerce разработчик. Четыре года создаю плагины и темы. В свободное время пишу статьи, видеообзоры, гайды.