WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Рекомендуемые продукты со скидкой от Template Monster

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

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

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

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

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

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

Представляю хак для 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 Все
  • art_gud

    А подсобите в ставке рекламы, пожалуйста. Нужно вставить её после определённого блока с определённым id. То есть есть некоторое количество блоков, созданных через произвольные поля ACF, у них есть глобальный класс, к примеру, "block_wrapper". Каждый блок имеет id, к примеру, "block_1", "block_2", "block_3" и т.д. и общий для всех блоков класс, отвечающий за их оформление, к примеру, "block_css" (не знаю даже, важная ли это информация). Так вот, нужно вывести рекламу после или перед блоком с id "block_1" и всё. Вот такая вот задача стала для человека, практически не разбирающегося в php. Буду очень признателен за помощь wacko

    Ответить1.5 года назад #
  • Роман

    Скажите пожалуйста Как убрать рекламу на некоторых страницах сайта?

    function kama_content_advertise($text){
    //спустя сколько символов искать перенос строки и вставлять рекламу?
    	$nu = 700;
    //Код рекламы
    	$adsense = <<<HTML
    код адсенс
    HTML;
    	//    return str_replace('<!--more-->', $adsense.'<!--more-->', $text);
    	return preg_replace('@([^^]{'.$nu.'}.*?)(\r?\n\r?\n|
    )@', "\\1$adsense\\2", trim($text), 1);
    }
    add_filter('the_content', 'kama_content_advertise', -10);
    Ответить4 мес назад #
  • Игорь

    Тимур, привет! Слушай, у меня после вставки рекламы вставляется лишний закрывающий тег . Не пойму откуда он берётся. Посмотри, пожалуйста, что там не так?

    Ответить2 мес назад #
    • Kama7611

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

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