Если вы просматриваете мой сайт на этой неделе, вы можете увидеть не совсем подходящую рекламу. Я работал над тем, чтобы все работало правильно, и большая часть исправлена. Я делаю это для повышения монетизации на сайте, чтобы не зависеть от Google AdSense и не засорять ваш просмотр контента навязчивой и неприятной рекламой.

Мне было предложено разместить рекламу посередине сообщения в блоге или содержимого страницы. Хотя это звучит просто, это может нанести ущерб макетам колонок или разрывам абзацев. Это не так просто, как сложить общее количество символов, разделить на два и вставить промокод. Есть некоторые дополнительные исключения:

  • Заголовки – Я не хочу, чтобы реклама следовала за заголовком.
  • Абзацы Я хочу, чтобы реклама вставлялась после завершения абзаца.
  • Столбцы – Я не хочу, чтобы в колонке размещалась реклама.

Для этого я добавил функцию functions.php в моей дочерней теме, чтобы разместить рекламу на странице или в публикации с помощью следующего кода:

function insert_ad_in_middle_of_content( $content ) {
    // Only run this on single posts/pages
    if ( is_single() || is_page() ) {
        $closing_p = '</p>';
        $block_columns_class="wp-block-columns";

        // Split content to find the middle
        $halfway_mark = strlen( $content ) / 2;
        $first_half = substr( $content, 0, $halfway_mark );
        $second_half = substr( $content, $halfway_mark );

        // Adjust for wp-block-columns
        if (strpos($first_half, '<div class="' . $block_columns_class . '">') !== false &&
            substr_count($first_half, '<div class="' . $block_columns_class . '">') > substr_count($first_half, '</div>')) {
            $end_of_block_columns = strpos($second_half, '</div>') + strlen('</div>');
            $first_half .= substr($second_half, 0, $end_of_block_columns);
            $second_half = substr($second_half, $end_of_block_columns);
        }

        // Find a suitable place for the ad
        $suitable_place_found = false;
        while (!$suitable_place_found) {
            $position_of_p = strpos($second_half, $closing_p);
            if ($position_of_p !== false) {
                $substring_before_p = substr($second_half, 0, $position_of_p);
                // Check if the paragraph is immediately preceded by a heading tag
                if (!preg_match("/<h[1-6]>.*<\/h[1-6]>$/", $substring_before_p)) {
                    $suitable_place_found = true;
                } else {
                    // Move past this paragraph and continue searching
                    $second_half = substr($second_half, $position_of_p + strlen($closing_p));
                }
            } else {
                // No more paragraphs, exit the loop
                break;
            }
        }

        // Insert ad code
        $ad_code="<!-- Ad Code Here -->";
        if ($suitable_place_found) {
            $second_half = substr_replace($second_half, $ad_code, $position_of_p, 0);
        } else {
            // Fallback: Append ad at the end of the content
            $second_half .= $ad_code;
        }

        // Reassemble content
        $content = $first_half . $second_half;
    }

    return $content;
}

add_filter( 'the_content', 'insert_ad_in_middle_of_content' );

Здесь подробная информация о insert_ad_in_middle_of_content функция, объясняющая каждую часть шаг за шагом:

  1. Определение функции:
function insert_ad_in_middle_of_content( $content ) {

Эта строка определяет именованную функцию insert_ad_in_middle_of_content требуется один аргумент, $content. Этот аргумент представляет содержимое публикации или страницы.

  1. Статус отдельных сообщений/страниц:
if ( is_single() || is_page() ) {

Функция сначала проверяет, относится ли текущий запрос к одному сообщению или странице, используя is_single() и is_page() функции. Логика размещения рекламы будет работать только в том случае, если это условие верно. Если вы хотите включить пользовательские типы сообщений, вы также можете добавить их:

function insert_ad_in_middle_of_content( $content ) {
    $current_post_type = get_post_type();

    // Check for single standard posts, pages, or custom post types
    if ( is_single() || is_page() || $current_post_type == 'my_custom_post_type' ) {
        // ... rest of the code remains the same
    }

    return $content;
}

add_filter( 'the_content', 'insert_ad_in_middle_of_content' );
  1. Определения переменных:
$closing_p = '</p>';
$block_columns_class="wp-block-columns";

Здесь определены две переменные. $closing_p это тег конца абзаца </p>. $block_columns_class — это строка, представляющая класс CSS, который WordPress использует для блочных столбцов.

  1. Нахождение середины пути:
$halfway_mark = strlen( $content ) / 2;
$first_half = substr( $content, 0, $halfway_mark );
$second_half = substr( $content, $halfway_mark );

Длина контента уменьшается вдвое, чтобы найти приблизительную середину. На этом этапе содержимое разделяется на две части.

  1. Настройка блочных столбцов:
if (...) {
   ...
}

Этот блок кода проверяет наличие замыканий wp-block-columns два в первой половине содержания. Если да, он корректирует точку разделения, чтобы объявление не помещалось в столбец блокировки.

  1. Находим подходящее место для рекламы:
while (!$suitable_place_found) {
   ...
}

Этот цикл while ищет подходящее место для размещения рекламы во второй половине контента. Он ищет конец абзаца (</p>), которому непосредственно не предшествует тег заголовка. Если такая позиция будет найдена, $suitable_place_found установлено на true.

  1. Вставка промокода:
$ad_code="<!-- Ad Code Here -->";
if ($suitable_place_found) {
   ...
} else {
   ...
}

Вот фактический рекламный код (представленный <!-- Ad Code Here -->) установлено. Если подходящее место найдено, промокод размещается на соответствующей второй половине контента. Если нет, промокод добавляется в конец второй половины.

  1. Повторная сборка контента:
$content = $first_half . $second_half;

После размещения объявления первая и вторая половины контента сшиваются вместе.

  1. Возврат измененного контента:
return $content;
}

Возвращается измененный контент, в котором теперь размещено объявление.

  1. Добавление фильтра:
    php add_filter( 'the_content', 'insert_ad_in_middle_of_content' );
    Наконец, функция связана the_content фильтр. Это заставляет WordPress запускать эту функцию для содержимого сообщений и страниц, позволяя функции изменять содержимое перед его отображением на сайте.
ЧИТАТЬ  Google может встряхнуть поиск на компьютере новым каналом открытий

Этот код полезен для динамической вставки рекламы в контент, что потенциально увеличивает вовлеченность и доход. Использование резервного механизма гарантирует, что объявления будут показываться всегда, увеличивая шансы на просмотры и клики по объявлениям, даже если подходящее место размещения не найдено в соответствии с приведенной выше логикой.

Source