WordPress как на ладони
Плагин рекламы для WordPress wordpress jino

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

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

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

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

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

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

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

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

Продвижение и раскрутка сайтов www.seop.ru

продвижение и раскрутка сайтов www.seop.ru

www.seop.ru

Рекламный блок в тексте статьи 118 комментариев
Полезные 11 Вопросы 9 Все
  • Борода

    Ваш код работает- спасибо, что поделились, однако выводится и на страницах и на записях. Как это исправить?

    • Kama4396

      Заменяешь

      if( ! is_singular() ) return $text; // убедимся что мы на отдельной странице

      На

      if( ! is_singular('page') ) return $text; // только для страниц
      
      // или 
      
      if( ! is_singular('post') ) return $text; // только для постов
      1
  • avense4 cайт: videovegas.ru
    @

    У меня не работает это выражение:

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

    Если добавить знак « | » после </table>, то работает, но вставляет рекламный код намного раньше чем через 400 символов и посреди текста, а не после тегов или переносов строки, и плюс добавляет две кракозябры � на разрыве текста.

    Если же использовать такую конструкцию со знаком « | » после </table> и указанием кодировки (*UTF8):

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

    то показывает без кракозябр и немного больше символов пропускает, но все равно намного меньше чем через 400 символов и также посреди текста вставляет объявление, а не после первого попавшегося указанного тега или переноса строки.

    В чем может быть причина такой работы скрипта?
    Проверял на двух сайтах WordPress, локальном и на веб-сайте.

    • Kama4396

      Вставлять в конце | - это совсем не правильно! Почему не работает, не знаю. Попробуй приоритет -10 изменить на 10 или больше...

      Конструкция (*UTF8) не знакома мне совсем, откуда это вы такое взяли? Чтобы как UTF8 обрабатывалось надо добавить модификатор u (я в статье его добавил уже...)

      '~[^^]{'. $num .'}.*?(?:\r?\n\r?\n|</p>|</table>)~su'
  • PHouse cайт: poweredhouse.ru

    Есть ли похожая реализация с выводом блока через определенное количество постов в архивах?

  • unsexiestman

    Kama, а как будет выглядеть код если я хочу разместить рекламу не один раз через 1000 символов, а через каждую 1000 символов, также после закрывающихся тегов p, table и перевода строк?

  • Игорь
    @

    Тимур,подскажите как вывести рекламу после например 5 комментария? Спасибо...

  • Виктор
    @

    Добрый день, Тимур.
    Для вывода adsense использую код:

    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.
    Что нужно попоравить тут ?

    Ответить3 месяца назад #
    • campusboy1579 cайт: wp-plus.ru
      @

      Привет! А если так?

      $content=preg_replace('#<h2(.*?)</h2>#','<div class="adsense-box">'.$ads.'<h2\1</h2></div>',$content, 1);
      Ответить3 месяца назад #
      2
      • Виктор
        @

        Привет, код работает правильно, но по итоу оказалось не так как мне надо.
        Баннер выводиться выше заголовка H2. Моя цель была сделать так, чтобы баннер выводился справа от содержания. в данном коде получается что код содержания вошел в class=adsense-box. Поэтому измениея его, двигают и содержание. Можно ли как-то сделать так чтоб оно не касалось содержания ? http://joxi.ru/zAN6zPgCev96A9

        Ответить3 месяца назад #
  • Сергей cайт: housediz.ru
    @

    Подскажите такой момент:
    в верху каждой записи я делаю содержание и оно выделено блоком
    <div class="cont_pg"> ... </div>
    Как я понимаю, проверка if (is_single()) в данном случае мне точно не нужна, а как сделать, чтобы блок РСЯ выводился над блоком содержания?
    Что-то вроде

    $content=preg_replace('#<div class="cont_pg"(.*?)</div>#','<div class="ads-box"><<div class="cont_pg"\1</div>'.$ads.'</div>',$content, 1);
    Ответить2 месяца назад #
  • Sonikelf cайт: sonikelf.ru

    Приветствую.
    Спасибо за пост, но в нём не хватает вывода нескольких блоков и тп.
    Я пользуюсь таким, - вставляет после номера абзаца в записях. В данном примере четыре блока:

    // Вывод рекламных блоков после определенного абзаца записи
    add_filter( 'the_content', 'wpse_ad_content' );
    function wpse_ad_content( $content ) {
    		if( !is_single() )
    			return $content;
    			$paragraphAfter = 4; //после четвёртого
    			$paragraphAfter2 = 14; //после 14-го
    			$paragraphAfter3 = 29; //после 29-го
    			$paragraphAfter4 = 39; //после 39-го
    			$content = explode ( "</p>", $content );
    			$new_content = '';
    				for ( $i = 0; $i < count ( $content ); $i ++ ) {
    					if ( $i == $paragraphAfter ) {
    						if ( ! is_single ( array(10015) ) ) {
    					$new_content .= '//код рекламы1';
    					}
    				}
    					if ( $i == $paragraphAfter2 ) {
    						if ( ! is_single ( array(10016) ) ) {
    					$new_content .= '//код рекламы2';
    					}
    				}       
    				if ( $i == $paragraphAfter3 ) {
    						if ( ! is_single ( array(10017) ) ) {
    					$new_content .= '//код рекламы3';
    					}
    				}
    				if ( $i == $paragraphAfter4 ) {
    						if ( ! is_single ( array(10018) ) ) {
    					$new_content .= '//код рекламы4';
    					}
    				}               
    					$new_content .= $content[$i] . "</p>";
    		}
    	return $new_content;
    }

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

    Ответить2 месяца назад #
    2
  • Сергей

    Здравствуй, Тимур. Подскажи, пожалуйста, что нужно написать, чтобы рекламные блоки adsense не выводилиcь во всех статьях определенных категорий. Категории можно определить по id.

    На моем сайте используется 2 функции, одна выводит рекламу после тега more, другая после h2. Можно ли как-то написать одно правило для обеих функций, запрещающих выводить рекламу adsense в статьях определенных категориях, вырезающих рекламу по какому-то гугловскому признаку объявлений. Или для каждой функции нужно дописывать отдельное ограничение? Как это реализовать - не знаю.

    Просто, в некоторых категориях присутствуют статьи на спорные темы, которые вроде как запрещены правилами adsense (т.е. этот запрет можно притянуть "за уши"), поэтому не хочу их вообще выводить в этих категориях, чтобы себя обезопасить от чьего-то "стука". Сейчас же реклама показывается в статьях по всему сайту.

    Ответитьсейчас #

Здравствуйте, !

Ваш комментарий