Добавить баннеры в шапку, подвал или боковую колонку своего сайта на вордпрессе очень просто — достаточно вставить код от поставщиков рекламы в нужное место. Немного сложнее аккуратно разместить динамические объявления в тексте уже имеющихся статей. В этой записи мы решим эту задачу
Используем хук-фильтр 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');
Здравствуйте Максим. Большое спасибо за код, ваш вариант пожалуй лучший вариант для моего блога. Еще раз спасибо. И удачи вам с вашим проектом.
Ответить