Хук the_content
— это один из фильтров WordPress, предназначенный для изменения контента поста до того, как он будет отображен на сайте. Он позволяет добавлять, удалять или изменять элементы контента записи, благодаря чему может быть полезен для внедрения рекламы, кастомных полей или специальных HTML-тегов.
apply_filters( ‘the_content’, string $content )
Основной синтаксис использования
Для фильтрации контента поста используется следующая конструкция:
add_filter( 'the_content', 'custom_content_filter' );
function custom_content_filter( $content ) {
// Ваш код фильтрации здесь.
return $content;
}
Где:
- $content — это текст текущего поста, который будет передан в фильтр для обработки и затем возвращен.
При использовании этого фильтра важно применять условные теги, такие как is_main_query()
, is_singular()
, in_the_loop()
, чтобы фильтр корректно применялся только к основному контенту.
Пример 1: Добавление текста только для страниц
Этот пример демонстрирует добавление уникального текста ко всем страницам, исключая записи.
add_filter( 'the_content', 'add_custom_text_to_pages' );
function add_custom_text_to_pages( $content ) {
if ( is_page() && is_main_query() ) {
$content .= '<p>Добавленный текст только для страниц.</p>';
}
return $content;
}
Здесь фильтр проверяет, является ли текущая страница именно страницей (не постом) и добавляет текст в её конец.
Пример 2: Добавление иконки перед контентом поста
Можно добавить иконку перед текстом записи (поста) с помощью условия is_single()
.
add_filter( 'the_content', 'prepend_icon_to_post' );
function prepend_icon_to_post( $content ) {
if ( is_single() ) {
$icon_html = '<img src="' . get_template_directory_uri() . '/images/icon.png" alt="Иконка поста">';
$content = $icon_html . $content;
}
return $content;
}
В этом примере иконка добавляется перед основным текстом поста только для одиночных записей.
Пример 3: Вставка рекламы после каждого третьего параграфа
Частый случай использования the_content
— добавление рекламного блока после определенного количества абзацев. Следующий код добавит рекламу после каждого третьего абзаца.
add_filter( 'the_content', 'insert_ad_after_paragraphs' );
function insert_ad_after_paragraphs( $content ) {
if ( is_single() && in_the_loop() ) {
$ad_code = '<div class="ad">Ваш рекламный блок</div>';
$paragraphs = explode( '</p>', $content );
foreach ( $paragraphs as $index => $paragraph ) {
if ( ($index + 1) % 3 === 0 ) {
$paragraphs[$index] .= $ad_code;
}
}
$content = implode( '</p>', $paragraphs );
}
return $content;
}
Здесь реклама будет вставляться после каждого третьего абзаца, что может быть полезно для монетизации контента.
Пример 4: Автоматическое добавление миниатюры перед контентом
Если записи на сайте содержат миниатюру, можно использовать фильтр the_content
, чтобы отображать её перед основным текстом.
add_filter( 'the_content', 'display_featured_image' );
function display_featured_image( $content ) {
if ( is_singular('post') && has_post_thumbnail() ) {
$featured_image = get_the_post_thumbnail();
$content = $featured_image . $content;
}
return $content;
}
В данном примере миниатюра добавляется перед контентом, но только если она установлена и если текущая страница — это пост.
Пример 5: Замена пустого атрибута alt
у изображений
Этот код заменяет пустой атрибут alt
у всех изображений в посте на название файла, если alt
изначально не был задан.
add_filter( 'the_content', 'set_image_alt_from_filename' );
function set_image_alt_from_filename( $content ) {
if ( is_single() && in_the_loop() ) {
$doc = new DOMDocument();
libxml_use_internal_errors(true); // Игнорируем ошибки загрузки HTML
$doc->loadHTML($content);
$images = $doc->getElementsByTagName('img');
foreach ($images as $img) {
if (!$img->getAttribute('alt')) {
$src = $img->getAttribute('src');
$alt = pathinfo($src, PATHINFO_FILENAME);
$img->setAttribute('alt', $alt);
}
}
$content = $doc->saveHTML();
}
return $content;
}
Этот пример удобен, когда необходимо автоматически проставить описательные атрибуты alt
для изображений.
Пример 6: Добавление кастомных полей к контенту
Фильтр the_content
может использоваться для вывода кастомных полей записи в её контенте.
add_filter( 'the_content', 'display_custom_fields' );
function display_custom_fields( $content ) {
if ( is_single() && in_the_loop() ) {
$custom_data = '<div class="custom-fields">';
$fields = get_post_custom();
foreach ( $fields as $key => $value ) {
if ( strpos( $key, '_' ) !== 0 ) { // Пропускаем системные поля
$custom_data .= "<p><strong>{$key}</strong>: {$value[0]}</p>";
}
}
$custom_data .= '</div>';
$content .= $custom_data;
}
return $content;
}
Этот пример добавляет все кастомные поля текущей записи в её конец, фильтруя системные поля, начинающиеся с символа _
.
Заключение
Хук the_content
— это мощный инструмент для изменения отображаемого контента на сайте WordPress. Благодаря разнообразию его применения, можно легко адаптировать контент под конкретные требования.