Как выводить рекламу внутри статей wp, только для определённых рубрик?
Есть код который выводит рекламу внутри статей wordpress:
add_filter( 'the_content', 'wpse_ad_content' ); function wpse_ad_content( $content ) { if( !is_single() ) return $content; $paragraphAfter = 3; //Введите номер абзаца, после которого вставляем. $content = explode ( "</p>", $content ); $new_content = ''; for ( $i = 0; $i < count ( $content ); $i ++ ) { if ( $i == $paragraphAfter ) { $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() ) return $content; $paragraphAfter = 3; //Введите номер абзаца, после которого вставляем. $content = explode ( "</p>", $content ); $new_content = ''; for ( $i = 0; $i < count ( $content ); $i ++ ) { if ( $i == $paragraphAfter ) { $new_content .= 'КОД РЕКЛАМЫ'; } $new_content .= $content[$i] . "</p>"; } return $new_content; }
Мне нужно, чтобы я мог выводить рекламу этим кодом, только для определённых рубрик. Например ввожу ID рубрики и далее код который нужно отображать, еще один ID рубрики и код который нужно отображать в другой рубрике.
Дополнительно:
Если мучает плагинофобия, то в ВП есть масса условных тегов.
И задать необходимые условия
Ответы:
in_category
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Чтобы выводить рекламный блок только в определённых рубриках, используйте условные проверки WordPress внутри фильтра
the_content. Проверять нужно не толькоis_single(), но и принадлежность записи к рубрике черезhas_category().Простой вариант для одной рубрики:
add_filter('the_content', 'my_insert_ad_by_category'); function my_insert_ad_by_category($content) { if (!is_single() || !in_the_loop() || !is_main_query()) { return $content; } if (!has_category(12)) { return $content; } return my_insert_after_paragraph($content, 3, '<div class="ad-block">КОД РЕКЛАМЫ</div>'); }
Функция вставки после абзаца:
function my_insert_after_paragraph($content, $paragraph_number, $insert) { $parts = explode('</p>', $content); $output = ''; foreach ($parts as $index => $part) { if (trim($part)) { $output .= $part . '</p>'; } if ($index + 1 === (int) $paragraph_number) { $output .= $insert; } } return $output; }
Если для разных рубрик нужны разные рекламные коды, сделайте карту:
$ads = [ 12 => '<div class="ad-block">Реклама для рубрики 12</div>', 34 => '<div class="ad-block">Реклама для рубрики 34</div>', ]; foreach ($ads as $category_id => $ad_html) { if (has_category($category_id)) { return my_insert_after_paragraph($content, 3, $ad_html); } }
Если запись находится сразу в нескольких рубриках, заранее решите приоритет. Например, если рубрика 12 важнее рубрики 34, она должна идти первой в массиве. Иначе на одной статье может появиться не тот рекламный блок, который Вы ожидаете. Если нужно выводить несколько рекламных блоков для нескольких рубрик, не возвращайте контент сразу внутри цикла, а последовательно добавляйте вставки.
Также не стоит вставлять рекламу простым разбиением по строке
</p>, если в контенте много нестандартных блоков Gutenberg. Для обычного классического редактора это работает нормально, но в блочном редакторе реклама может попасть внутрь сложного блока. В таком случае лучше вставлять рекламу через отдельный блок, shortcode или серверный парсер блоков.Не вставляйте рекламный HTML без контроля, если его редактируют пользователи. Если код содержит скрипты рекламной сети, храните его в файле/настройке, доступной только администратору. И обязательно проверяйте
is_main_query()иin_the_loop(), иначе реклама может появиться в сайдбаре, похожих записях или SEO-описаниях.