Может возникнуть потребность автоматически отображать рекламные блоки adsense (или других рекламных сетей), исходя из разных условий.
Например отображать рекламу:
- после первого абзаца, изображения
- в середине статьи
- после анонса, тега more
- отображать только в старых записях (недельной давности)
В этой записи буду собирать примеры PHP-кодов для такой "хитрой" установки рекламных блоков. Естественно лучше не "слепо" копировать php-код, а немного видоизменять исходя из своих потребностей и учитывать что шаблоны бывают разные с разной структурой php файлов.
После определенного количества символов
Реклама будет отображаться перед первым абзацем после первых 600 символов на страницах записей с длинной более 1700 символов.
Вставьте этот код в файл functions.php:
function advert_after_n_chars($cont) { // if post is longer than 1700 characters $enable_length = 1700; // insert after the first </p> after 600 characters $aft_char = 600; if (is_single() && strlen($cont) > $enable_length) { $bef_cont = substr($cont, 0, $aft_char); $aft_cont = substr($cont, $aft_char); $aft_cont = explode('</p>', $aft_cont); $text = ' <!-- тут код adsense --> '; array_splice($aft_cont, 1, 0, $text); $aft_cont = implode('</p>', $aft_cont); return $bef_cont . $aft_cont; } else { return $cont; } } add_filter('the_content', 'advert_after_n_chars');
Установка обтекаемой рекламы после n-символов
Еще один вариант установки рекламного блока после заданного количества символов. Только блок будет обтекаться текстом, а не находится перед абзацем. Вот пример как это выглядит:
Рекламный блок будет отображаться после первых 800 символов.
Добавляем код в файл functions.php:
function advert_after_n_symbols($text){ $aft_symbols = 800; $adsense_block = ' <div style="float:right;margin:0 0 10px 15px;"> <!-- тут код рекламного блока --> </div> '; if (is_single()) { $text = preg_replace('@([^^]{'.$nu.'}.*?)(\r?\n\r?\n|)@', "\\1$adsense_block\\2", trim($text), 1); } return $text; } add_filter('the_content', 'advert_after_n_symbols', -10);
Установка рекламы после каждого H2 заголовка
Рекламные блоки будут отображаться после каждого h2 заголовка. В коде вместо тега h2 можно указать любой другой тег.
Добавляем код в файл functions.php:
function ads_after_h2($the_content) { $ads=' <!-- тут код adsense --> '; if (is_single()) { $the_content=preg_replace('#<h2(.*?)</h2>#','<h2\1</h2><div class="ads_content">'.$ads.'</div>',$the_content); } return $the_content; } add_filter('the_content', 'ads_after_h2');
Отображение рекламного блока после n-го абзаца
В данном примере рекламный блок будет отображаться после третьего абзаца.
Находим в файле single.php код:
<?php the_content();?>
И заменяем его на код:
<?php $paragraphAfter= 3; //display after the first paragraph $content = apply_filters('the_content', get_the_content()); $content = explode("</p>", $content); for ($i = 0; $i <count($content); $i++ ) { if ($i == $paragraphAfter) { ?> <div>Тут вставляем код вашего рекламного блока</div> <?php } echo $content[$i] . "</p>"; } ?>
Установка рекламного блока при помощи шорт-кода
Вставляем код в файл functions.php:
function advert_code() { return ' <!-- тут код adsense --> '; } add_shortcode('elims_adv', 'advert_code');
Когда вы хотите отображать рекламный блок в определенном месте текста записи/страницы просто вставьте в то место следующий текст (шорт-код):
[elims_adv]
Установка рекламного блока на главной странице после первого анонса
В большинстве случаев в блогах wordpress на главной странице отображаются 10 анонсов последних опубликованных записей. Среди SEO-шников хорошим местом считается установка рекламы после первого анонса.
В файле index.php ищем код:
<?php endwhile; else: ?>
И вставляем перед ним код:
<?php if ($count == 1) : ?> <!-- тут код рекламного блока --> <?php endif; $count++; ?>
Вместо цифры 1 можно указать, например, цифру 4 - тогда рекламный блок будет отображаться после 4-го анонса.
Рекламный блок в начале статьи по истечении 14 дней после публикации
Рекламный блок будет отображаться в начале записи после того, как пройдет 14 дней с публикации. Сам рекламный блок будет обтекаться текстом справа.
Добавляем код в файл functions.php:
function ads_after_time($text){ $days = 14; $offset = (int) time() - (int) strtotime($GLOBALS['post']->post_date); $interval = 3600*24*$days; if($offset < $interval ) return $text; $ads_block = ' <div style="float:left; margin:10px"> <!-- тут код adsense --> </div> '; return $ads_block.$text; } add_filter('the_content', 'ads_after_time', -10);
Установка рекламы в записи после анонса (тега more)
Тоже достаточно эффективное место для рекламы, по мнению вебмастеров.
Добавляем следующий код в файл functions.php:
function advert_after_more($content) { $advert_block=' <!-- тут код adsense --> '; if (is_single()) { $content=preg_replace('#<span.*?id="more-(.*?)".*?></span>#','<span id="more-\1"></span></p><center>'.$advert_block.'</center><BR><p style="text-align: justify;">',$content); } return $content; } add_filter('the_content', 'advert_after_more');
Доброго времени суток.
Использую код «выводить рекламу после определённого абзаца»
А что если необходимо выводить несколько блоков,к примеру, два. Приходится дублировать код в файле функшионс (заменив имя функции). Может есть возможность уместить всё в одном коде для максимальной обработки?
И ещё такой момент. Как можно модернизировать код, чтобы к примеру если указан 8 абзац, но если в статье всего 7 абзацев, то реклама не будет выведена вовсе. А можно сделать так, чтобы она выводилась в любом случае в последнем абзаце (к примеру последнем 7-ом), при условии, чем их меньше чем заданное?
А если 8 абзац есть, то всё работало как обычно.
Заранее спасибо за ответ
Здравствуйте.
Да, это можно сделать, Вам нужно лишь немного разобраться в PHP или заплатить тому, кто готов подкорректировать код вместо Вас =)