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 Вопросы 2 Все
  • Roman

    Привет, попробовал данный код по вставке рекламы в пост, но не получилось. У меня такая проблемка- на сайте больше страниц чем записей, и выводить рекламу нужно в страничках, то есть выводить код (а лучше подключать файл .php) в текст странички через каждые 500 знаков и после точки. Вот такой замысел, а сделать не получается, хотел переделать ваш код, но опыта мало- слетает functions.php mosking, устал перезаливать! Может кто сталкивался с похожей проблемой?

    Ответить28.Июл.2012 15:59 #
  • Сергей online-boxing.ru

    Автору благодарность, всё получилось, всё работает!!!

    Ответить23.Янв.2013 02:21 #
  • Василий

    Поставил блок в статью, но текст его не обтекает. И как сделать, чтобы он только в статьях отображался? А то реклама на всех страницах сайта появляется

    Ответить1.Фев.2013 22:50 #
    • Kama7750

      То что не обтекает, смотрите в CSS стили...

      В каких статьях? У вас для них отдельный тип записей?
      Для отдельного типа записей можно создать условие в функции:

      function kama_content_advertise($text){
      	 global $post;
      	 if( $post->post_type != 'article' )
      		  return;
      
      ...

      Так, реклама будет показываться только если тип записи article

      Ответить1.Фев.2013 23:34 #
      • Василий

        Спасибо. В статьях, т.е. в постах. А так отображается на всех страницах сайта включая главную. Спасибо, попробую то что вы посоветовали

        Ответить2.Фев.2013 11:46 #
  • andrew87 bizzavod.ru

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

    Ответить15.Фев.2013 17:05 #
    • Kama7750

      Рекламный код сразу после контента для типа постов "post":

      add_filter('the_content', 'kama_content_advertise', -10);
      function kama_content_advertise($text){
      	global $post;
      
      	if( $post->post_type != 'post' )
      		return;
      
      	echo $text;
      	?>
      	здесь рекламный код
      	<?php
      }

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

      Ответить20.Фев.2013 16:52 #
  • Андрей petersburglike.ru

    Как сделать, чтобы рекламный код ставился не после определенного количества знаков, а после первого изображения в публикации?

    Ответить10.Май.2013 13:15 #
  • TAZ61 taz61.ru

    спасибо очень полезный пост

    Ответить16.Сен.2013 14:07 #
  • Rencontrez www.krasbaks.ru

    Кстати, я делал так smile Не плохо получается по доходу smile

    Ответить11.Дек.2013 20:44 #
  • Игорь goldbusinessnet.com

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

    function ads_h2($content) {
    $ads='код Google Adsense';
    if (is_single()) {
    $content=preg_replace('#<h2(.*?)</h2>#','<div class="adsense-box"><h2\1</h2>'.$ads.'</div>',$content, 1);
     }
     else {
     }
    return $content;
    }
    add_filter('the_content', 'ads_h2');

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

    Ответить4.Янв.2014 22:10 #
    • Kama7750

      Попробуйте так:

      function ads_h2( $content ){
      	if( ! is_single() )
      		return $content;
      
      	$ads = 'код Google Adsense';
      	preg_match_all( '#<h2.*?</h2>#', $content, $match );
      	if( $key = $match[0][1] )
      		$content = str_replace( $key, "$key <div class='adsense-box'>$ads</div>", $content );
      
      	return $content;
      }
      add_filter('the_content', 'ads_h2');
      Ответить5.Янв.2014 02:06 #
      • Игорь goldbusinessnet.com

        Огромное человеческое спасибо, Тимур! Все получилось, да я и не сомневался в Вашем профессионализме. smile

        Ответить5.Янв.2014 03:28 #
  • Игорь Xoot.ru

    Кама привет, добавляю твой ко в функшенс пхп и сайт становится белым, ровно как и админка, т.е все ложится, видимо код не принимается файлом...в чем может быть проблема?

    Ответить1.Июн.2014 02:47 #
  • Lumen

    Добрый день. А как вставить рекламный блок в тело рубрики? К примеру, 10 постов выводится, а после 5-го стоит блок.

    Ответить14.Сен.2014 09:53 #
    • Kama7750

      Найти цикл отвечающий за вывод, обычно он в файле category.php и в цикле создать условие:

      $i=0;
      // цикл начинается
      while( have_posts() ){
      	if( $i++ == 5 ){
      		// здесь рекламный код
      	}
      
      	// тело цикла
      }
      Ответить14.Сен.2014 12:36 #
      • Lumen

        К сожалению, я туповатый smile поэтому не получается. Вот мой цикл из шаблона

        <?php if(have_posts()) : ?>
        	<?php while(have_posts()) : the_post(); ?>
        Ответить18.Сен.2014 10:36 #
        • Kama7750
          <?php $i=0; ?>
          <?php if(have_posts()) : ?>
          <?php while(have_posts()) : the_post(); 
          	if( $i++ == 5 ){
          		// здесь рекламный код
          	}
          ?>
          Ответить18.Сен.2014 10:46 #