Доработка функции 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 таких страниц будет).
Всем спасибо
По первому пункту можно попробовать следующую функцию:
// Вывод рекламных блоков после определенного абзаца записи 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; }Супер, работает. Но только для записей, а как сделать чтобы и для страниц и для записей одновременно работало?
Уже разобрался относительно вывода для всех страниц. ПОжскажите, а по второму пунтку как сделать так чтобы не показывалась для указанных страниц?
К сожалению в php не силен. Возможно поможет следующая конструкция, которую нужно доработать для рассмотренной выше функции.
<?php if( is_single(123) ){ ?> Этот текст показывать, когда открыт пост №123 (можно оставить пустым) <?php } else { ?> Этот текст показывать на остальных страницах сайта <?php } ?>Спасибо. Однако тут у Вас как раз показывать а мне просто нужно не показывать вот всю ту рекламу на указанных страницах, то есть что-то типа вот такого
только вот не могу понять как это правильно интегрировать вот в эту уже работающую функцию:
// Вывод рекламных блоков после определенного абзаца записи 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; }Может кто подскажет? Все заранее спасибо
Я сделал следующим образом и все работает:
// Вывод рекламных блоков после определенного абзаца записи 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 реклама не отображается, в остальных отображается. Также забыл отметить, что количество выводимых рекламных блоков не ограничено. В данном примере их три. Чтобы добавить еще блок - дописываем
и
if ( $i == $paragraphAfter3 ) { if ( ! is_single ( array(10015) ) ) { $new_content .= 'Блок рекламы'; } }Супер. Спасибо огромное. Вроде все работает. Подскажите, еще последнее, пожалуйста, а как совместить исключение записей и страниц. Имеется ввиду что как я понимаю для записей используется if( !is_single а для страниц if( !is_page
Вот как в этом коде совместить исключение к примеру 2 записей и 2 страниц ?
Заранее спасибо
У меня только записи. Так что проверить не на чем. Попробуйте везде заменить is_single на is_singular. В поисковике вбейте "разница между is_singular() и is_single()".