ДОКУМЕНТАЦИЯ ФУНКЦИИ DO_ENCLOSE() │ WP 1.5.0
Функция do_enclose
проверяет содержимое поста на наличие ссылок на видео и аудио для добавления их в виде вложений.
Она не добавляет вложения, которые уже были добавлены, и удаляет вложения, если они больше не присутствуют в посте. Это взаимодействие происходит в форме пингбеков и трекбеков.
Используемые функции
get_enclosed()
— получает вложения поста.wp_extract_urls()
— извлекает URL-ссылки из текста.
Хуки функции
enclosure_links
— фильтр для списка ссылок на вложения.
Возвращаемое значение
Функция возвращает null
или false
. Она возвращает false
, если пост не найден, и null
при успешном выполнении.
Как использовать
do_enclose( $content, $post );
Параметры:
- $content (строка или null, обязательный): Содержимое поста. Если параметр равен null, используются данные из
$post->post_content
. - $post (int или объект WP_Post, обязательный): ID поста или объект поста.
Примеры использования
Пример 0
Пример 1: Использование в ядре WordPress
Посмотрите код функции do_all_enclosures()
.
Заметки
- Глобальная переменная:
wpdb
— объект, представляющий абстракцию базы данных WordPress.
Изменения
- С версии 1.5.0: Функция была введена.
- С версии 5.3.0: Параметр
$content
стал необязательным, а параметр$post
был обновлен для приема ID поста или объекта WP_Post. - С версии 5.6.0: Параметр
$content
более не является необязательным, но все еще поддерживается передача null для его игнорирования.
Код функции do_enclose()
function do_enclose( $content, $post ) {
global $wpdb;
// Подключаем необходимый класс
require_once ABSPATH . WPINC . '/class-IXR.php';
$post = get_post( $post );
if ( ! $post ) {
return false;
}
if ( null === $content ) {
$content = $post->post_content;
}
$post_links = array();
// Получаем ссылки на вложения
$pung = get_enclosed( $post->ID );
// Извлекаем все ссылки из содержания поста
$post_links_temp = wp_extract_urls( $content );
foreach ( $pung as $link_test ) {
// Если ссылка больше не в посте
if ( ! in_array( $link_test, $post_links_temp, true ) ) {
$mids = $wpdb->get_col( $wpdb->prepare( "SELECT meta_id FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = 'enclosure' AND meta_value LIKE %s", $post->ID, $wpdb->esc_like( $link_test ) . '%' ) );
foreach ( $mids as $mid ) {
delete_metadata_by_mid( 'post', $mid );
}
}
}
foreach ( (array) $post_links_temp as $link_test ) {
// Если ссылка еще не добавлена в вложения
if ( ! in_array( $link_test, $pung, true ) ) {
$test = parse_url( $link_test );
if ( false === $test ) {
continue;
}
if ( isset( $test['query'] ) ) {
$post_links[] = $link_test;
} elseif ( isset( $test['path'] ) && ( '/' !== $test['path'] ) && ( '' !== $test['path'] ) ) {
$post_links[] = $link_test;
}
}
}
/**
* Фильтрует список ссылок на вложения перед запросом к базе данных.
*
* Позволяет добавлять и/или удалять потенциальные вложения
* в метаданные поста перед проверкой существующих вложений в базе данных.
*
* @since 4.4.0
*
* @param string[] $post_links Массив ссылок на вложения.
* @param int $post_id ID поста.
*/
$post_links = apply_filters( 'enclosure_links', $post_links, $post->ID );
foreach ( (array) $post_links as $url ) {
$url = strip_fragment_from_url( $url );
if ( '' !== $url && ! $wpdb->get_var( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = 'enclosure' AND meta_value LIKE %s", $post->ID, $wpdb->esc_like( $url ) . '%' ) ) ) {
$headers = wp_get_http_headers( $url );
if ( $headers ) {
$len = isset( $headers['Content-Length'] ) ? (int) $headers['Content-Length'] : 0;
$type = isset( $headers['Content-Type'] ) ? $headers['Content-Type'] : '';
$allowed_types = array( 'video', 'audio' );
// Проверяем, можем ли мы определить mime-тип по расширению
$url_parts = parse_url( $url );
if ( false !== $url_parts && ! empty( $url_parts['path'] ) ) {
$extension = pathinfo( $url_parts['path'], PATHINFO_EXTENSION );
if ( ! empty( $extension ) ) {
foreach ( wp_get_mime_types() as $exts => $mime ) {
if ( preg_match( '!^(' . $exts . ')$!i', $extension ) ) {
$type = $mime;
break;
}
}
}
}
// Если слышимость типа соответствует видео или аудио, до��авляем его
if ( in_array( substr( $type, 0, strpos( $type, '/' ) ), $allowed_types, true ) ) {
add_post_meta( $post->ID, 'enclosure', "$urln$lenn$mimen" );
}
}
}
}
}
Связанные функции
Функции API CRON:
wp_clear_scheduled_hook()
wp_cron()
wp_doing_cron()
wp_get_scheduled_event()
wp_get_schedules()
wp_next_scheduled()
wp_schedule_event()
wp_schedule_single_event()
wp_unschedule_event()
wp_unschedule_hook()