Если вы просматриваете мой сайт на этой неделе, вы можете увидеть не совсем подходящую рекламу. Я работал над тем, чтобы все работало правильно, и большая часть исправлена. Я делаю это для повышения монетизации на сайте, чтобы не зависеть от 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
функция, объясняющая каждую часть шаг за шагом:
- Определение функции:
function insert_ad_in_middle_of_content( $content ) {
Эта строка определяет именованную функцию insert_ad_in_middle_of_content
требуется один аргумент, $content
. Этот аргумент представляет содержимое публикации или страницы.
- Статус отдельных сообщений/страниц:
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' );
- Определения переменных:
$closing_p = '</p>';
$block_columns_class="wp-block-columns";
Здесь определены две переменные. $closing_p
это тег конца абзаца </p>
. $block_columns_class
— это строка, представляющая класс CSS, который WordPress использует для блочных столбцов.
- Нахождение середины пути:
$halfway_mark = strlen( $content ) / 2;
$first_half = substr( $content, 0, $halfway_mark );
$second_half = substr( $content, $halfway_mark );
Длина контента уменьшается вдвое, чтобы найти приблизительную середину. На этом этапе содержимое разделяется на две части.
- Настройка блочных столбцов:
if (...) {
...
}
Этот блок кода проверяет наличие замыканий wp-block-columns
два в первой половине содержания. Если да, он корректирует точку разделения, чтобы объявление не помещалось в столбец блокировки.
- Находим подходящее место для рекламы:
while (!$suitable_place_found) {
...
}
Этот цикл while ищет подходящее место для размещения рекламы во второй половине контента. Он ищет конец абзаца (</p>
), которому непосредственно не предшествует тег заголовка. Если такая позиция будет найдена, $suitable_place_found
установлено на true
.
- Вставка промокода:
$ad_code="<!-- Ad Code Here -->";
if ($suitable_place_found) {
...
} else {
...
}
Вот фактический рекламный код (представленный <!-- Ad Code Here -->
) установлено. Если подходящее место найдено, промокод размещается на соответствующей второй половине контента. Если нет, промокод добавляется в конец второй половины.
- Повторная сборка контента:
$content = $first_half . $second_half;
После размещения объявления первая и вторая половины контента сшиваются вместе.
- Возврат измененного контента:
return $content;
}
Возвращается измененный контент, в котором теперь размещено объявление.
- Добавление фильтра:
php add_filter( 'the_content', 'insert_ad_in_middle_of_content' );
Наконец, функция связанаthe_content
фильтр. Это заставляет WordPress запускать эту функцию для содержимого сообщений и страниц, позволяя функции изменять содержимое перед его отображением на сайте.
Этот код полезен для динамической вставки рекламы в контент, что потенциально увеличивает вовлеченность и доход. Использование резервного механизма гарантирует, что объявления будут показываться всегда, увеличивая шансы на просмотры и клики по объявлениям, даже если подходящее место размещения не найдено в соответствии с приведенной выше логикой.