Как выводить рекламу внутри статей wp, только для определённых рубрик?

Ссылка скопирована
1 ответ

Есть код который выводит рекламу внутри статей 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 рубрики и код который нужно отображать в другой рубрике.

Дополнительно:

Если мучает плагинофобия, то в ВП есть масса условных тегов.

  • ну или вот
    И задать необходимые условия
  • Refguser, плагинофибия не мучает. Подходящего решения не нашел.
  • Я в php не очень, есть тут кто может код собрать как положено?)
  • Мне нужно чтобы одним add_filter добавить мог много раз рекламу, для разных категорий.
  • Ответы:

    in_category

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Игорь Волков Ответ

    Чтобы выводить рекламный блок только в определённых рубриках, используйте условные проверки 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>');
    }

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

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

    $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-описаниях.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно