WordPress как на ладони
WordPress темы и плагины за 250 рублей wordpress jino

Доработка функции kama_content_advertise для рекламы

Всем привет.

Решил на сайте интегрировать функцию отвечающая за вывод рекламы (врезание рекламы в контент body) по определенному алгоритму.

Вот это функцию использую:

function kama_content_advertise($text){
//спустя сколько символов искать перенос строки и вставлять рекламу?
	$nu = 4000;
//Код рекламы
	$adsense = <<<HTML
<div style="float:none;margin:0px 0px 10px 0px"><ins class="adsbygoogle" style="width:728px;height:90px"></ins>

(adsbygoogle = window.adsbygoogle || []).push({});

</div>
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);

Сейчас функция выводи всего 1 рекламный блок после 4000 знаков как я понял.

Подскажите, пожалуйста, кто-то знает как ее доработать так чтобы:

1.Чтобы она выводила рекламу каждые (определенное количество символов / слов именно в теле записи / страницы. То есть не один раз как сейчас а до конца записи с учетом заданного интервала.

2.Чтобы можно было ограничить показ данной рекламы на нужных страницах (всего около 5 таких страниц будет).

Всем спасибо

0
26 дней назад
  • 1
    PHouse5 cайт: poweredhouse.ru

    По первому пункту можно попробовать следующую функцию:

    // Вывод рекламных блоков после определенного абзаца записи
    add_filter( 'the_content', 'wpse_ad_content' );
    function wpse_ad_content( $content ) {
    		if( !is_single() )
    			return $content;
    			$paragraphAfter = 1; //после первого абзаца
    			$paragraphAfter1 = 5; //после пятого абзаца
    			$paragraphAfter2 = 8; //после восьмого абзаца
    
    			$content = explode ( "</p>", $content );
    			$new_content = '';
    				for ( $i = 0; $i < count ( $content ); $i ++ ) {
    					if ( $i == $paragraphAfter ) {
    						if ( ! is_single ( array(10015) ) ) {
    					$new_content .= 'Блок рекламы';
    					}
    				}
    
    					if ( $i == $paragraphAfter1 ) {
    					 if ( ! is_single ( array(10015) ) ) {
    					$new_content .= 'Блок рекламы';
    					}
    				}
    
    					if ( $i == $paragraphAfter2 ) {
    					 if ( ! is_single ( array(10015) ) ) {
    					$new_content .= 'Блок рекламы';
    					}
    				}
    
    					$new_content .= $content[$i] . "</p>";
    		}
    	return $new_content;
    }
    ZM-123 24 дня назад

    Супер, работает. Но только для записей, а как сделать чтобы и для страниц и для записей одновременно работало?

    ZM-123 24 дня назад

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

    PHouse 24 дня назад

    К сожалению в php не силен. Возможно поможет следующая конструкция, которую нужно доработать для рассмотренной выше функции.

    <?php if( is_single(123) ){  ?>
    
    Этот текст показывать, когда открыт пост №123 (можно оставить пустым)
    
    <?php } else { ?>
    
    Этот текст показывать на остальных страницах сайта
    
    <?php } ?>
    ZM-123 24 дня назад

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

    if ( ! is_page (указать страницы, которые нужно исключить) )

    только вот не могу понять как это правильно интегрировать вот в эту уже работающую функцию:

    // Вывод рекламных блоков после определенного абзаца записи
    add_filter( 'the_content', 'wpse_ad_content' );
    function wpse_ad_content( $content ) {
    		if( !is_single() )
    			return $content;
    			$paragraphAfter = 1; //после первого абзаца
    			$paragraphAfter1 = 5; //после пятого абзаца
    			$paragraphAfter2 = 8; //после восьмого абзаца
    
    			$content = explode ( "</p>", $content );
    			$new_content = '';
    				for ( $i = 0; $i < count ( $content ); $i ++ ) {
    					if ( $i == $paragraphAfter ) {
    						if ( ! is_single ( array(10015) ) ) {
    					$new_content .= 'Блок рекламы';
    					}
    				}
    
    					if ( $i == $paragraphAfter1 ) {
    					 if ( ! is_single ( array(10015) ) ) {
    					$new_content .= 'Блок рекламы';
    					}
    				}
    
    					if ( $i == $paragraphAfter2 ) {
    					 if ( ! is_single ( array(10015) ) ) {
    					$new_content .= 'Блок рекламы';
    					}
    				}
    
    					$new_content .= $content[$i] . "</p>";
    		}
    	return $new_content;
    }

    Может кто подскажет? Все заранее спасибо

    PHouse 24 дня назад

    Я сделал следующим образом и все работает:

    // Вывод рекламных блоков после определенного абзаца записи
    add_filter( 'the_content', 'wpse_ad_content' );
    function wpse_ad_content( $content ) {
    		if( !is_single(array('kak-pravilno-podklyuchit-uzo-i-avtomaty','proemy-v-srube')) ){} else 
    			return $content;
    			$paragraphAfter = 1; //после первого абзаца
    			$paragraphAfter1 = 5; //после пятого абзаца
    			$paragraphAfter2 = 8; //после восьмого абзаца
    
    			$content = explode ( "</p>", $content );
    			$new_content = '';
    				for ( $i = 0; $i < count ( $content ); $i ++ ) {
    					if ( $i == $paragraphAfter ) {
    						if ( ! is_single ( array(10015) ) ) {
    					$new_content .= 'Блок рекламы';
    					}
    				}
    
    					if ( $i == $paragraphAfter1 ) {
    					 if ( ! is_single ( array(10015) ) ) {
    					$new_content .= 'Блок рекламы';
    					}
    				}
    
    					if ( $i == $paragraphAfter2 ) {
    					 if ( ! is_single ( array(10015) ) ) {
    					$new_content .= 'Блок рекламы';
    					}
    				}
    
    					$new_content .= $content[$i] . "</p>";
    		}
    	return $new_content;
    }

    В записях kak-pravilno-podklyuchit-uzo-i-avtomaty и proemy-v-srube реклама не отображается, в остальных отображается. Также забыл отметить, что количество выводимых рекламных блоков не ограничено. В данном примере их три. Чтобы добавить еще блок - дописываем

    $paragraphAfter3 = 12; //после 12 абзаца

    и

    if ( $i == $paragraphAfter3 ) {
    					 if ( ! is_single ( array(10015) ) ) {
    					$new_content .= 'Блок рекламы';
    					}
    				}
    ZM-123 24 дня назад

    Супер. Спасибо огромное. Вроде все работает. Подскажите, еще последнее, пожалуйста, а как совместить исключение записей и страниц. Имеется ввиду что как я понимаю для записей используется if( !is_single а для страниц if( !is_page

    Вот как в этом коде совместить исключение к примеру 2 записей и 2 страниц ?

    Заранее спасибо

    PHouse 24 дня назад

    У меня только записи. Так что проверить не на чем. Попробуйте везде заменить is_single на is_singular. В поисковике вбейте "разница между is_singular() и is_single()".

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация