WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Купить персональные IPV4 и IPV6 прокси

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

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

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

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

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

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

Представляю хак для 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);
}

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

105 комментов
Полезные 10 Вопросы 4 Все
  • Алексей

    А как бы вставить рекламу именно после определённого количества символов? Мне в идеале после первой строчки. Ваш код вставляет рекламу аж после первого абзаца, даже если поставить количество символов, например, 5.

    Ответить4.7 года назад #
    • Kama7539

      замените

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

      на

      return preg_replace('@([^^]{'.$nu.'}.*?)@', "\\1$adsense", trim($text), 1);
      1
      Ответить4.7 года назад #
      • Алексей

        спасибо, но оказалось не вариант. надо чтобы после определённого количества слов. так реально сделать?

        Ответить4.7 года назад #
        • Kama7539

          Так попробуйте, в конце слова после N символов:

          return preg_replace('@([^^]{'.$nu.'}\w+)@', "\\1$adsense", trim($text), 1);
          Ответить4.7 года назад #
          • Алексей

            о, класс! а теперь ищу как бы сделать так, чтобы считались именно слова, не считая html тэги.
            У меня нарисовалась такая конструкция для вставки после 10-го слова:

            preg_replace('#(((\n|.)+?\s){10})#','${1}'.$Adsense,$content, 1)

            теги находятся вот так:

            (\<(/?[^\>]+)\>)

            а теперь думаю как написать, чтобы считались слова и пропускались теги

            1
            Ответить4.7 года назад #
  • Игорь cайт: goldbusinessnet.com

    Здравствуй, Тимур!
    Хочу для постов каждой категории вставить отдельный блок Adsense для повышения релевантности рекламных объявлений. Видимо, придется создать функцию с выбором категории по ID? Не подскажете конкретнее, как это реализовать на практике?

    Ответить4.5 года назад #
    • campusboy3411 cайт: www.youtube.com/c/wpplus

      Попробуйте плагины:

      1. Easy Plugin for AdSense
      2. Google AdSense (это их официальный плагин, очень удобный)
      Ответить4.5 года назад #
      • Игорь cайт: goldbusinessnet.com

        Спасибо, Сampusboy. Особенно перспективен официальный плагин Adsense. Однако, как мне показалось, там нет возможности автоматически разместить под каждый клиентский канал отдельный рекламный блок. Ведь я хочу выделить под каждую рубрику отдельно 3 клиентских канала со своим рекламным блоком каждый.

        Ответить4.5 года назад #
  • ruslan1 cайт: besplatnyeprogrammy.ws/admin

    Спасибо огромное!
    Мне этот код идеально подошел, но есть одно НО...

    Этот код у меня отлично работает для ЗАПИСЕЙ, но он также выводит рекламу и в СТРАНИЦАХ, а этого мне не нужно... В поле url указал пример, где код выводит рекламу на страницеочень не удачно для меня...

    Как сделать проверку, мол если это ЗАПИСЬ - вставляй, если СТРАНИЦА - нет.

    Буду очень благодарен за помощь!

    1
    Ответить4.5 года назад #
    • ruslan1 cайт: progi.pro

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

      Удалил ваш код с функцион.пхп и в шаблон одной записи добавил вместо:

      <?php the_content(); // Содержимое страницы ?>

      Вставляем это:

      <?php
      $paragraphAfter= 1; //отображать рекламу после какого абзаца
      $content = apply_filters('the_content', get_the_content());
      $content = explode("</p>", $content);
      for ($i = 0; $i <count($content); $i++ ) {
      if ($i == $paragraphAfter) { ?>
      <div style="float:right;margin:0 0 10px 10px;">
      код адсенс
      </div>
      <?php }
      echo $content[$i] . "</p>";
      } ?>

      $paragraphAfter - определяет после какого параграфа вставлять рекламу.

      Мне отлично подошел, может кому пригодиться...

      3
      Ответить4.4 года назад #
  • art_gud
    function ads_h2($content) {
    $ads='
    <style>
    .adaptrumtext { width: 300px; height: 250px; }
    @media(min-width: 500px) { .adaptrumtext { width: 468px; height: 60px; } }
    @media(min-width: 1040px) { .adaptrumtext { width: 728px; height: 90px; } }
    </style>
    <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
    <!-- adapt.rum.text -->
    <ins class="adsbygoogle adaptrumtext"
    	 style="display:inline-block"
    	 data-ad-client="ca-pub-ххххххххххххх"
    	 data-ad-slot="000000000"
    	 data-ad-format="auto"></ins>
    <script>
    (adsbygoogle = window.adsbygoogle || []).push({});
    </script>';
    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');

    Что не так с этим кодом? Вместо рекламного объявления отображается пустая область, прошли уже почти сутки после добавления блока. Помоги, пожалуйста, очень не хочется все делать вручную.

    Ответить4.4 года назад #
    • Kama7539

      Попробуйте вместо рекламы любой тест вставьте, если текст выводится - код работает, проблема в коде рекламы...

      Ответить4.4 года назад #
      • art_gud

        Спасибо, не подумал об этом.

        Ответить4.4 года назад #
      • art_gud

        Очень странная ситуация получается. Проблема действительно в коде Адсенс, пробовал несколько. Из умозаключений: функция не хочет обрабатывать асинхронный код (пробовал и для статичных блоков и для адаптивных). С синхронной загрузкой статичного блока все нормально, но мне нужен как раз адаптивный, а он, конечно же, загружается асинхронно. Не подскажешь, с чем такая халтура может быть связана? Не хочется ломать верстку из-за одного объявления.

        Ответить4.4 года назад #
  • Игорь

    Приветствую, спасибо за решения по вставке кода,
    но возник такой вопрос:
    В сети рабочих решений не нашел и в этой ветке тоже: как вставить код гугла, например, или любой другой код, под блоком последних "Похожие записи:"(Ваши тоже, http://steshka.ru/rebenok-2-goda-ne-razgovarivaet) перед формой комментирования, иногда это нужно для решения конкретных задач.
    С уважением, Игорь

    Ответить4.4 года назад #
    • Kama7539

      Рабочее решение чего? Как вставить код рекламы? Вы уж извините, но как-то так: копируете код рекламы из гугл и вставляете его туда куда нужно (под блоком последних "Похожие записи:", перед формой комментирования). Ну а как конкретно в вашем шаблоне это сделать - это уж нужно разбираться конкретно в вашем шаблоне. pardon

      Ответить4.4 года назад #
  • Seoweb cайт: seoweb.in.ua

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

    Ответить4.2 года назад #
    • Kama7539

      Попробуйте заменить последнюю строку на такую:

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

      Проверьте все и отпишитесь что получилось пожалуйста.

      Ответить4.2 года назад #
    • Kama7539

      Обновил код в статье, попробуйте его. Версия кода version: 0.2

      Ответить4.2 года назад #
  • Андрей

    Здравствуйте! Помогите, пожалуйста! help Давно и успешно использую такой код (нашел у кого-то на блоге) для вывода рекламы после more:

    function adsgoolge_ssd($content) {
    $google_ads='код рекламы';
    
    $content=preg_replace('#<span.*?id="more-(.*?)".*?></span>#','<span id="more-\1"></span><div >'.$google_ads.'</div>',$content);
    return $content;
    }
    add_filter('the_content', 'adsgoolge_ssd');

    Если вместо "код рекламы" вставлять код html/js, то все работает. Сейчас хочу вместо рекламы вывести после тега more список похожих записей. Они у меня в шаблоне выводятся вот таким кодом:

    <?php get_template_part( 'includes/post-related' ); // Get Related Posts template ?>

    Подскажите, пожалуйста, как впихнуть этот php-код, чтобы работало так же, как и с html/js.

    2
    Ответить4.2 года назад #
    • Андрей

      И снова здравствуйте! smile Прошло уже 26 дней с момента моего предыдущего комментария, каждый день захожу в надежде на ответ. Помогите, пожалуйста.

      1
      Ответить4.1 года назад #
      • campusboy3411 cайт: www.youtube.com/c/wpplus

        Привет. А Вы знаете программирование? Вам нужно создать функцию, которая будет возвращать список похожих записей в виде переменной, типа:

        function related_posts (){
        //код формирования списка статей, который собирается, к примеру, в переменную $adv
        return $adv;
        }

        И уже используйте функцию в своем коде.

        function adsgoolge_ssd($content) {
        $google_ads='код рекламы';
        
        $content=preg_replace('#<span.*?id="more-(.*?)".*?></span>#','<span id="more-\1"></span><div >'.$google_ads.'</div><div>'.related_posts ().'</div>',$content);
        return $content;
        }
        add_filter('the_content', 'adsgoolge_ssd');
        4
        Ответить4.1 года назад #
        • Андрей

          Спасибо за ответ! Программирование не знаю, только html/css, поэтому умею только вставлять готовый код в нужное место шаблона.

          Нашел в шаблоне код, который выводит похожие записи, я его приводил выше:

          <?php get_template_part( 'includes/post-related' ); // Get Related Posts template ?>

          Могу его вставлять куда угодно в шаблон, хоть сбоку статьи, хоть сверху, хоть снизу - все работает. А вот так чтобы выводилось после тега more - не получается.

          Можно ли каким-то образом вывести похожие записи после тега more, используя именно этот код? Функции создавать я пока не умею.

          1
          Ответить4.1 года назад #
        • Иван

          Что-то не работает по вашему методу. Не понятно почему в строке:

          $content=preg_replace('#<span.*?id="more-(.*?)".*?></span>#','<span id="more-\1"></span><div >'.$google_ads.'</div><div>'.related_posts ().'</div>',$content);

          Вы добавили функцию related_posts (), а не переменную $adv.

          Программеры smile плиз помогите кто-нибудь!! Как впендюрить PHP-код в строку рекламы (где может выводиться только html):

          function share_ya($content) {
          $share_ads='тут блок с рекламой и только html+script';
          $content=preg_replace('#<span.*?id="more-(.*?)".*?></span>#','<span id="more-\1"></span></p><div align="center">'.$share_ads.'</div>',$content);
          return $content;
          }
          add_filter('the_content', 'share_ya');
          1
          Ответить4 года назад #
  • Слава cайт: winkomp.ru

    ой, а я за место "9999999" поставил "2000" и все стало работать должным образом, в файловом архиве рекламы нет а в статьях как нужно, реклама есть! Это получается что у меня все получилось? shock
    А все-токи, есть более цивилизованный вариант исключения рубрики?

    В инете видел, какие-то варианты, но не использовал, так как у меня в файле "function.php" практически все функции на "kama" начинаются - это уже традиция при создании темы mosking

    Ответить4.1 года назад #
Здравствуйте, !     Войти . Зарегистрироваться