Автоматическое размещение рекламных блоков в статьях в WordPress

Logo

В данной статье я расскажу об автоматизации процесса размещения рекламных блоков внутри статей сайта с целью увеличения дохода с рекламы и уменьшения затрат на ее внедрение. Изначально код разработан для WordPress, но в силу универсальности функций может быть быстро адаптирован для других CMS.

Автоматическое размещение рекламных блоков в статьях. Вывод рекламы после абзацев и подзаголовков в WordPress

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

Автоматический вывод рекламы после заголовков

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

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

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

function ad_after_heading( $content ) {
global $post;
/* Проверка типа страницы */
if ( ! is_singular() ) {
return $content;
}
/* Список разрешенных типов записей.
Если вы используете произвольные типы записей, необходимо добавить их в данный массив. */
$allow_post_types = array(
'post'
);
/* Выход, если текущего типа записи нет в списке разрешенных */
if ( ! in_array( $post->post_type, $allow_post_types ) ) {
return $content;
}
/* Регулярное выражение для поиска в тексте статьи подзаголовков 2-6 уровня */
$pattern = "/\<h([2-6]){1}(.*?)\>(.*?)\<\/h([2-6]){1}(.*?)\>/i";
/* Функция добавления рекламных блоков после подзаголовков */
$content = preg_replace_callback(
$pattern,
function ( $matches ) {
global $post;
static $num = 0;
$num++;
/* Получаем найденный подзаголовок */
$heading = $matches[0];
/* Или формируем его вручную, если необходимо что-то изменить */
/* $heading = '<h' . $matches[1] . $matches[2] . '>' . $matches[3] . '</h' . $matches[4] . '>';*/
/* Добавляем к найденному подзаголовку рекламный блок в зависимости от его номера */
if ( $num == 1 ) { /* Первый подзаголовок в статье */
/* Реклама будет добавлена после подзаголовка */
return $heading . 'код рекламного блока';
} elseif ( $num == 3 ) { /* Третий подзаголовок */
/* Реклама будет добавлена перед подзаголовком */
return 'код рекламного блока' . $heading;
} elseif ( $num == 5 ) { /* Пятый подзаголовок */
/* Выведем разные рекламные блоки в зависимости от типа записи */
if ( $post->post_type == 'post' ) { /* Обычные посты */
return $heading . 'код рекламного блока';
} elseif ( $post->post_type == 'page' ) { /* Статические страницы */
return $heading . 'код рекламного блока';
}
}
/* Возвращаем подзаголовок */
return $heading;
},
$content
);
/* Возвращаем контент страницы */
return $content;
}
/* Применяем функцию для фильтрации контента страниц перед выводом */
add_filter( 'the_content', 'ad_after_heading' );

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

Автоматический вывод рекламных блоков после абзацев

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

Код вывода рекламных блоков после абзацев состоит из двух функций. Первая отвечает за формирование массива аргументов, а вторая непосредственно за добавление рекламы.

/* Фильтруем контент страницы перед выводом на экран */
add_filter( 'the_content', 'ad_after_paragraph' );
function ad_after_paragraph( $content ) {
global $post;
$insert = array();
/* Выбор типа записи */
if ( is_singular( 'post' ) ) { /* Post Type Post: обычные посты */
$insert[ 1 ] = 'код рекламного блока'; /* Рекламный блок будет добавлен после первого абзаца */
$insert[ rand( 8, 12 ) ] = 'код рекламного блока'; /* Рекламный блок будет добавлен в диапазоне между 8 и 12 абзацем */
$insert[ rand( 18, 20 ) ] = 'код рекламного блока';
} elseif ( is_singular( 'page' ) ) { /* Post Type Page: статические страницы */
$insert[ rand( 1, 2 ) ] = 'код рекламного блока';
$insert[ rand( 8, 10 ) ] = 'код рекламного блока';
}
if ( ! empty( $insert ) ) {
$content = insert_after_paragraph( $insert, $content );
}
return $content;
}
function insert_after_paragraph( $insert = null, $content = null ) {
/* Проверяем является ли переменная строкой */
if ( ! is_string( $content ) ) {
return false;
}
/* Проверяем является ли переменная массивом */
if ( ! is_array( $insert ) ) {
return $content;
}
$closing_tag = '</p>';
/* Разбиваем контент страницы на абзацы и формируем массив */
$paragraphs = explode( $closing_tag, $content );
/* Перебираем массив и добавляем рекламные блоки */
foreach ( $paragraphs as $index => $paragraph ) {
if ( trim( $paragraph ) ) {
$paragraphs[$index] .= $closing_tag;
}
if ( array_key_exists( $index + 1, $insert ) ) {
$paragraphs[$index] .= $insert[ $index + 1 ];
}
}
/* Преобразовываем массив обратно в строку и возвращаем результат */
return implode( '', $paragraphs );
}

Использование php функции rand() позволяет выводить рекламные блоки в рамках заданного диапазона. Таким образом, удается достигнуть большего разнообразия размещения рекламы на своем сайте.

Функция вывода блоков Яндекс RTB

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

function get_yandex_rtb( $block_id = null ) {
/* Проверяем ID рекламного блока */
if ( ! is_string( $block_id ) ) {
return false;
}
/* Возвращаем код рекламного блока */
return '<!-- Yandex.RTB '. $block_id . ' --><div id="yandex_rtb_'. $block_id . '"></div><script type="text/javascript"> (function(w, d, n, s, t) { w[n] = w[n] || []; w[n].push(function() { Ya.Context.AdvManager.render({ blockId: "'. $block_id . '", renderTo: "yandex_rtb_'. $block_id . '", async: true }, function () { document.getElementById("yandex_rtb_'. $block_id . '").parentNode.remove(); }); }); t = d.getElementsByTagName("script")[0]; s = d.createElement("script"); s.type = "text/javascript"; s.src = "//an.yandex.ru/system/context.js"; s.async = true; t.parentNode.insertBefore(s, t); })(this, this.document, "yandexContextAsyncCallbacks");</script>';
}

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

function get_yandex_rtb_for_content( $block_id = null ) {
/* Проверяем ID рекламного блока */
if ( ! is_string( $block_id ) ) {
return false;
}
/* Получаем код рекламного блока */
$ad_code = get_yandex_rtb( $block_id );
if ( $ad_code === false ) {
return false;
}
/* Возвращаем код рекламного блока с оберткой */
return '<!--noindex--><div class="ad-content clearfix" itemscope itemtype="http://schema.org/WPAdBlock">' . $ad_code . '</div><!--/noindex-->';
}

Таким образом, теперь в предыдущих функциях на месте строк «код рекламного блока» не нужно каждый раз добавлять однотипный рекламный код. Достаточно лишь указать функцию и передать идентификатор рекламного блока. В результате мы получим более читабельный и оптимизированный код.

Пример:

$insert[ rand( 18, 20 ) ] = get_yandex_rtb_for_content( 'R-A-123456-78' );

Аналогичным образом можно создать функции для вывода рекламных блоков Google Adsense и многих других рекламных систем.

На этом данная статья подошла к концу. Если у вас возникли какие-то вопросы по данному материалу, вы всегда можете задать их в комментариях к статье.

Обнаружили ошибку? Выделите ее и нажмите Ctrl+Enter

Оставить комментарий

отменить ответ