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);
}

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

101 коммент
Полезные 10 Вопросы 3 Все
  • Гомельский блогер cайт: d13.name

    Спасибо, Кама. Пригодится конечно smile

    Ответить8.3 лет назад #
  • Pavluha.Net cайт: pavluha.net

    Только я когда вносил изменения в $text на одном блоге, то там <!--more--> уже был заменён на <span id="more... (фильтры WP уже сработали). Но париться не стал, просто написал регулярное выражение соответствующим образом. Но этот вариант с добавлением фильтра мне понравился

    Ответить8.2 лет назад #
    • Kama7376

      Рад, что вам понравилось!

      Я тут -10 вписал, чтобы этот фильтр "опередил" базовые фильтры:

      add_filter('the_content', 'kama_content_advertise', -10);
      Ответить8.2 лет назад #
      • Pavluha.Net cайт: pavluha.net

        А что-то не опережает на WP 3.1. Пробовал разные приоритеты: -10, 0, 10, 100, 1000. Всё равно WP успевает заменить на: < span id="more-xx"> - до срабатывания моего фильтра

        Ответить8 лет назад #
        • Kama7376

          Даже не знаю что сказать. Возможно проблема не в приоритетах? Покажите где не работает, возможно что-то и увижу.

          Ответить8 лет назад #
          • Pavluha.Net cайт: pavluha.net

            Ну как показать.. Беру файл functions.php, ищу и заменяю там more - работает (как бы, тест). А потом просто меняю строку поиска на <!--more--> - так не работает, какие приоритеты ни ставлю

            Ответить8 лет назад #
          • Kama7376

            Раз more заменяется значит все работает! Попробуйте посмотреть что там в БД у вас вместо <!--more--> написано, наверняка как-то по-другому, иначе бы заменялось, должно заменятся. Через $post->post_content гляньте.

            Ответить8 лет назад #
          • Pavluha.Net cайт: pavluha.net

            В БД смотрел - там именно <!--more-->. Потому полагаю, что он заменяется на span где-то раньше, какие приоритеты ни ставь. В общем-то, не критично, поигрался с регулярными выражениями и получил нужный результат без установки приоритетов.

            Ответить8 лет назад #
  • Алекс

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

    Ответить8.1 лет назад #
    • Kama7376

      Вставляйте этот код в файл темы functions.php и замените "здесь рекламный код" на рекламный код.

      Ответить8.1 лет назад #
  • Алекс

    сделал, ничего не изменилось.
    add_filter('the_content', 'kama_content_advertise', -10);
    тоже в functions.php помещать?
    В single.php ничего меня не нужно?

    Ответить8.1 лет назад #
  • Алекс

    Извиняюсь. Предыдущее сообщение - перепутал, не в тот сайт воткнул.
    Оказывается после вставки кода в functions.php страницы с постами перестали открываться - какие-то ошибки пхп

    Ответить8.1 лет назад #
  • Ginom cайт: www.ginom-home.ru

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

    -3
    Ответить8 лет назад #
  • viktor37 cайт: you-big-blog.com

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

    Автору: очень интересный блог.

    Ответить8 лет назад #
    • Kama7376

      Спорный вопрос это. Почти во всех случаях так вставлять рекламу, наверное, все-таки, наплевательское отношение к читателю!

      Ответить8 лет назад #
  • sputnik1818 cайт: ipadstory.ru
    if($offset < (3600*24*$days) ) return;

    Заменить на

    if($offset < (3600*24*$days) ) return $text;

    Только так заработало

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