Задать вопрос
facepook
@facepook
С детства болею неизлечимым сео-даром!

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

Доброго!
Для показа рекламы в статье (вордпрес) я использую код, который вставляет ее перед каждым заголовком H2:
function ads_h2($the_content) {
$ads='
<!--КОД РЕКЛАМЫ-->
';
if (is_single()) {
 $the_content=preg_replace('#<h2(.*?)</h2>#','<div class="ads_content"><h2\1</h2>'.$ads.'</div>',$the_content);
 }
 else {
 }
return $the_content;
}
add_filter('the_content', 'ads_h2');


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

Подскажите как доработать функцию, чтобы рекламный блок показывался не перед каждым H2 заголовком а через 1 (каждый второй).
  • Вопрос задан
  • 246 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
function ads_h2( $content ) {

	// Хорошая практика, называется "return early"
	if ( ! is_single() ) {
		return $content;
	}

	// Заготовили код рекламы
	$ad = '[AD]';

	// Инициализировали счетчик
	$count = 1; // 0 или 1, по ситуации

	// Делаем замену через коллбек
    $content = preg_replace_callback(
        '#<h2(.*?)</h2>#',
        // С помощью use передаем в замыкание дополнительные параметры
        function( $matches ) use ( &$count, $ad ) {
            // Увеличиваем счетчик
            $count++;
            // Если число четное, добавляем рекламу
            if ( $count % 2 == 0 ) {
	            return '<div class="ads_content">' . $matches[0] . $ad . '</div>';
            // Если нечетное - ничего не делаем
            } else {
                return $matches[0];
            }
        },
        $content
    );

	// Вернули измененный контент
	return $content;
}
add_filter( 'the_content', 'ads_h2' );


Бонус

Если менять цифру в if ( $count % 2 == 0 ) { вместо 2 на, скажем, 3 или 4, то реклама будет выводиться, соответственно, в каждом 3м или 4м подзаголовке.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
AlexMaxTM
@AlexMaxTM
$odd = true;
if ($odd) {
 add_filter('the_content', 'ads_h2');
 $odd = false;
} else {
 $odd = true;
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы