WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Рекламный блок в тексте статьи

Самое лучшее в книге то, что она не обрывается на самом интересном месте для рекламной вставки...

Реклама внутри статьи

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

Кстати, касательно рекламы на блогах поднял тему небезызвестный блогер — Сосновский. Я полностью с ним солидарен в этом вопросе и не на секунду не согласен с теми, кто писал в комментариях, что его статья — попытка оправдаться.

А теперь по теме: как вставить рекламу в контент

Представляю хак для WordPress, благодаря которому можно легко установить рекламный блок в текст статьи, например, рекламный блок Google AdSense или ЯДирект.

Уже не помню где, но где-то я видел реализацию этой задачи, только было описано как вставить рекламный блок в текст статьи после тега <!--more-->. А как быть если на сайте автор в принципе не пользуется этим тегом, как тогда вставить рекламу на все страницы? Ответ на этот вопрос — такой вот мой код:

<?php

/**
 * Вставляет рекламный блок в первый перенос строки или первый закрывающий тег </p> или </table>
 * спустя определенное количество символов.
 *
 * @param number $nu - спустя сколько символов искать перенос строки и вставлять рекламу? 400 - по умолчанию.
 *
 * version: 0.2
 */
add_filter('the_content', 'kama_content_advertise', -10 );
function kama_content_advertise( $text, $num = false ){
	if( ! is_singular() ) return $text; // убедимся что мы на отдельной странице

	if( ! $num ) $num = 400;

	// Код рекламы
	ob_start();
	?>

	<div class="kama-inline-ads" style="float:right; margin:0 0 1em 1.5em;">
	здесь рекламный код 
	</div>    

	<?php
	$adsense = ob_get_clean();

	// Раскомментируйте, если нужно вставить блок сразу перед тегом <!--more-->
	# return str_replace('<!--more-->', $adsense.'<!--more-->', $text);

	return preg_replace('~[^^]{'. $num .'}.*?(?:\r?\n\r?\n|</p>|</table>)~su', "\${0}$adsense", trim( $text ), 1);
}

Код вставляет рекламный блок  в первый попавшейся перенос строки или закрывающий тег </p> или тег </table> спустя определенное количество символов (задается в переменной $nu). Т.е. в данном случае в тексте статьи будет пропущено 400 символов, после которых будет найден первый перенос строки (или тег </p>) и перед ним будет вставлен рекламный блок.

Думаю не нужно акцентировать внимание на том, что фразу "здесь рекламный код" нужно заменить на, этот самый, рекламный код? smile

Если нужно вставить рекламный блок перед тегом more

Так же на всякий, пожарный случай я предусмотрел случай, когда нужно вставлять рекламный блок перед тегом <!--more-->, для этого, просто раскомментируйте предпоследнюю строку:

return str_replace('<!--more-->', $adsense.'<!--more-->', $text);
	// return preg_replace('@([^^]{'.$nu.'}.*?)(\r?\n\r?\n|</p>)@', "\\1$adsense\\2", trim($text), 1);

Реклама только для старых постов

Если есть необходимость показывать рекламу только для постов срок давности которых, скажем, 7 дней, то используйте такой код:

add_filter('the_content', 'kama_content_advertise', -10);
function kama_content_advertise( $text ){
	$days = 7; // через сколько дней, спустя дату публикации поста, показывать рекламу.
	$nu = 400; //спустя сколько символов искать перенос строки и вставлять рекламу?

	$offset = (int) time() - (int) strtotime($GLOBALS['post']->post_date);
	if($offset < (3600*24*$days) ) return $text;

	//Код рекламы
	$adsense = '
		<div style="float:right;margin:0 0 10px 15px;">
		здесь рекламный код
		</div>
	';

	return preg_replace('@([^^]{'.$nu.'}.*?)(\r?\n\r?\n|</p>)@', "\\1$adsense\\2", trim($text), 1);
}

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

104 коммента
Полезные 10 Вопросы 3 Все
  • Bamboo 1tbc.com

    Весьма полезный хак. Насколько я понимаю, вместо "здесь рекламный код" можно вставить все что угодно (картинки, баннеры и др)? Насчет "наплевательского отношения к читателям" - вопрос спорный. Лично для меня более актуален вопрос борьбы с наплевательским отношением читателей. smile Просто так ждать многим блоггерам приходится до второго пришествия, когда читатели хоть как-то отблагодарят. Вот у Kama, судя по показаниям счетчика, за месяц более 10000 посещений. То есть за год более 120000. А сколько комментариев к статьям? Вот вам и вся людская благодарность... nea Даже коммент многим лень написать... Но комментом сыт не будешь. Все таки лучшая благодарность - свободно конвертируемая валюта! laugh Хотя кто-то может в деньгах и не нуждается. Но, как говорил герой "Оружейного барона" у каждого есть своя цена. Просто "валюта" разная. rofl

    Ответить12.Ноя.2011 00:25 #
  • Алексей massbody.ru

    Спасибо попробую поставить у себя так!

    Ответить23.Дек.2011 07:35 #
  • Алексей zoomzon.ru

    Добрый день! Материал действительно пригодился, особая благодарность автору. good У меня небольшой фото-блог, который я только создаю. В постах у меня мало текста, но есть большое количество фотографий. Применил ваш хак, чтобы выводить рекламу внутри поста сверху. Работает отлично. А есть такой код, чтобы рекламный блок выводился после 5-10 фоток или это только ручками, вставляя прямиком в HTML-код? Можно и так, но не очень удобно. sad

    Ответить25.Дек.2011 20:05 #
  • art

    Kama - наш Гуру, приветствую тебя. smile

    Есть такая функция по автозамене текста на страницах блога:

    function replace_text($text) {
    	$text = str_replace('WordPress', '<strong>WordPress</strong>', $text);
    	$text = str_replace('WordPress хаки', '<a href="#">WordPress хаки</a>', $text);
    	return $text;
    }
    add_filter('the_content', 'replace_text');

    Скажи пожалуйста, как заставить данную (или аналогичную) функцию работать в сайтарах dash3

    Ответить1.Мар.2012 00:00 #
  • Алексей

    Да еще, может ваш хак конфликтовать с плагинами, типа: GT TAB?

    Ответить2.Мар.2012 19:55 #
    • Kama7752

      Не знаю что это за плагин. Конфликтовать наверное все-таки может, но я себе это смутно представляю.

      Ответить5.Мар.2012 14:49 #
  • Olerus

    Спасибо за скрипт вставки рекламы через 400 символов. Но может подскажете как можно реализовать вставку рекламы в середину поста. Данную функцию отлично выполнял плагин Quick Adsence буквально до первого зависания. Теперь приходится прописывать все руками. В плагине отлично была предусмотрена вставка рекламы именно в середину поста. Просмотрел уже много блогов по WP, пока не нашел замену данной функции на вставку рекламы.

    Ответить20.Мар.2012 12:11 #
  • Юрий partnerkiwse.ru

    Надо попробовать у себя Спасибо!

    Ответить24.Мар.2012 12:44 #
  • Алекс

    Насколько я понимаю, внутри поста можно вставить что угодно и куда угодно.

    Никак не могу найти, как вставить что-либо перед 1-м изображением в посте. Никто случайно с таким хаком не сталкивался?

    Ответить20.Апр.2012 21:42 #
  • Павел soronorus.com

    можно проще сделать с помощью плагина, post layuot русс версия на моём сайте Post Layout

    плагин позволяет вставлять произвольный html и js код куда угодно без редактирования темы.

    Ответить16.Май.2012 19:44 #
  • Деня

    А теперь "нубский" вопрос: в какой файл вставлять данный код? после какой строки?

    Ответить6.Июл.2012 13:59 #
    • Kama7752

      В файл темы functions.php (не важно в какое место). Или можно в сам single.php (куда-нибудь в конец).

      Ответить7.Июл.2012 14:58 #