×

WordPress — как вставить рекламу в текст записи без плагинов?

Добавить баннеры в шапку, подвал или боковую колонку своего сайта на вордпрессе очень просто — достаточно вставить код от поставщиков рекламы в нужное место. Немного сложнее аккуратно разместить динамические объявления в тексте уже имеющихся статей. В этой записи мы решим эту задачу

Используем хук-фильтр the_content

Чтобы получить доступ к тексту записей нам понадобится хук-фильтр the_content, который мы разместим в файле functions.php нашей темы для wordpress.

Этот хук позволяет зарегистрировать функцию, которая будет получать на вход содержимое записи перед её отображением и возвращать модифицированные данные.

С помощью данной функции мы проанализируем содержимое записи и высчитаем оптимальное место для размещения кода вызова рекламы.

Подбираем место для рекламного блока

За меру длины записи мы возьмём один абзац. Абзацем будем считать открывающий и закрывающий тег p с каким-то содержимым внутри. Если вы не размечаете абзацы тегом p, можете подсчитывать переносы строк и заменить упоминание тега p, на тег br. Я такую разметку не одобряю, поэтому в примере её учитывать не буду.

В коротких записях реклама внутри текста не нужна. В длинных статьях её можно вставить по центру записи, а можно и сместить ближе к концу. Тут каждый сам рассчитывает эффективность. Я решил пока вставлять баннер в центр текста.

Код для вставки в functions.php

Достаточно заменить в этом коде код баннера на свой, и всё заработает. Для тестирования можно вообще ничего не менять. В этом случае в записях появится красных блок, обозначающий место для будущей рекламы.

/** 
 * Добавляем рекламу в середину длинных записей
 * @param $content - исходное содержимое записи
 * @return string - модифицированная запись
 */
function addAdvertToArticle($content){
	//считаем общее количество параграфов в записи
	$paragraphNum = substr_count($content, '<p>');
	
	//в коротких записях реклама не нужна
	if($paragraphNum < 5){
		return $content;
	}
		
	//инициализируем переменные для вычислений
	$destination = 0;
	$contentLength = strlen($content);
	
	//обходим половину от общего количества параграфов
	for($count = 1; $count <= round($paragraphNum/2, 0); $count++){
		
		//записываем позицию последнего найденного параграфа
		$destination = strripos(
			$content,
			'<p>',
			//каждый раз делаем отступ на предыдущую позицию
			//тройка означает длину тега <p>
			($destination != 0)? -($contentLength - $destination + 3) : null
		);
	}
	
	//вставляем код рекламы (второй параметр) в запись
	$content = substr_replace(
		$content,
		'<div style="background:red; padding:20px; margin: 20px 0;">Реклама</div>',
		($destination - 1),
		0
	);
	
	return $content;
}

//регистрируем функцию в качестве хук-фильтра
add_filter( 'the_content', 'addAdvertToArticle');

Задача решена.

logo