Функция do_enclose()
в WordPress используется для поиска видео и аудио ссылок в контенте записи и автоматического добавления их в мета-поля типа enclosure. Это полезно для работы с мультимедийными файлами, когда необходимо указать ссылки на внешние ресурсы для подкастов, аудио или видео, поддерживая совместимость с RSS-лентами.
do_enclose( string|null $content, int|WP_Post $post ): void|false
Описание
Функция проверяет содержимое поста на наличие ссылок на мультимедийные файлы (видео или аудио). Если такие ссылки найдены, они добавляются как мета-поля с типом enclosure. Если ссылок нет, функция удаляет уже существующие мета-поля, если они больше не актуальны.
- $content — строка или
null
. Если переданоnull
, используется содержимое поста из поляpost_content
. - $post — идентификатор поста или объект поста, который необходимо проанализировать на наличие ссылок.
Возвращаемое значение
void
— если функция успешно выполняется и ссылки обрабатываются.false
— если пост не найден.
Как это работает
Функция запускается автоматически при публикации поста и проверяет контент на наличие мультимедийных ссылок. Она работает в связке с функцией do_all_enclosures()
, которая вызывается по крон-задаче. Если в посте появляются новые ссылки на мультимедиа, они автоматически добавляются как enclosures, а если ссылки были удалены, соответствующие enclosures удаляются.
Функция вызывается через систему хуков WordPress, которая управляет процессом обновления мета-полей:
add_action( 'publish_post', '_publish_post_hook', 5, 1 );
Это запускает cron-задачу, которая в конечном итоге вызывает do_all_pings()
, а та — do_all_enclosures()
, которая и использует do_enclose()
.
Пример 1: Автоматическое добавление ссылки на видео в мета-поле
Предположим, у нас есть пост с видео ссылкой, и мы хотим убедиться, что эта ссылка добавлена в мета-поля как enclosure. Для этого используем do_enclose()
:
// Получаем объект поста
$post_id = 123;
$post = get_post( $post_id );
// Проверяем контент поста на наличие мультимедиа ссылок
do_enclose( null, $post );
В этом примере мы передаем null
в качестве контента, и функция автоматически возьмет содержимое поста для поиска ссылок на видео или аудио.
Пример 2: Удаление неактуальных мультимедиа ссылок
Если вы удалили мультимедийные ссылки из контента записи, do_enclose()
также удалит соответствующие записи из мета-полей enclosure:
// Обновляем содержимое поста
$new_content = "Этот пост больше не содержит видео или аудио ссылок.";
$post_id = 124;
// Обновляем контент записи
wp_update_post( array( 'ID' => $post_id, 'post_content' => $new_content ) );
// Проверяем контент на наличие ссылок и удаляем устаревшие мета-поля
do_enclose( null, $post_id );
Здесь после обновления поста и удаления ссылок на мультимедиа, функция do_enclose()
удалит соответствующие мета-поля, если они больше не нужны.
Пример 3: Обработка мультимедиа ссылок из произвольного контента
Иногда нужно явно указать контент для анализа, отличающийся от post_content
. Например, если вы обрабатываете мультимедиа ссылки вручную.
// Альтернативный контент для обработки
$custom_content = "Посмотрите это видео: https://example.com/video.mp4";
// Анализируем указанный контент на наличие мультимедиа
$post_id = 125;
do_enclose( $custom_content, $post_id );
В этом случае, функция обрабатывает предоставленный контент и добавляет найденные ссылки в мета-поля поста.
Хуки, связанные с do_enclose()
Функция do_enclose()
может взаимодействовать с другими функциями через хуки:
enclosure_links
— этот фильтр позволяет модифицировать или дополнительно обработать ссылки перед их добавлением в мета-поля. Вы можете использовать этот фильтр для проверки, какие ссылки будут добавлены как enclosures.
Пример использования фильтра:
add_filter( 'enclosure_links', function( $links, $post_id ) {
// Добавим проверку на наличие определенного домена
foreach ( $links as $key => $link ) {
if ( ! strstr( $link, 'example.com' ) ) {
unset( $links[$key] );
}
}
return $links;
}, 10, 2 );
Когда использовать do_enclose()
- Автоматизация мультимедиа: Если вы работаете с подкастами или видеоконтентом, WordPress сам будет добавлять ссылки на мультимедиа в мета-поля.
- Поддержка RSS: Мета-поля enclosure особенно полезны для RSS-лент, поддерживающих подкасты и аудио- или видеовещание.
- Удаление устаревших данных: Если ссылки на мультимедиа больше не актуальны, функция автоматически удаляет соответствующие записи из мета-полей.
Заключение
Функция do_enclose()
помогает автоматизировать процесс обработки мультимедийного контента в WordPress, обеспечивая добавление ссылок на видео и аудио в мета-поля поста. Это особенно полезно для проектов, связанных с подкастами или видеовещанием.