Перевіряє вказаний запис на наявність у його контенті посилань на Відео та Аудіо. Якщо посилання знайдені, то додає ці URL до мета-поля enclosure
.
Перед додаванням чергового мета-поля enclosure
перевіряє чи немає таких самих даних. Видаляє метаполі enclosure
, які були видалені з посту.
Це внутрішня функція WP. Запускається у функції do_all_pings :
add_action( 'publish_post', '_publish_post_hook', 5, 1); // Тут створюється крон завдання
→ wp_schedule_single_event( time(), 'do_pings');
// це спрацьовує за Кроном
→ add_action( 'do_pings', 'do_all_pings', 10, 0);
→ add_action( 'do_all_pings', 'do_all_enclosures', 10, 0);
Як це працює детальніше читайте тут .
Хуки з функції
нотатки
- Global. wpdb. $wpdb WordPress database abstraction object.
список змін
З версії 1.5.0 | Введено. |
З версії 5.3.0 | $content parameter був зроблений optional, і $ post parameter був updated to accept a post ID або WP_Post object. |
З версії 5.6.0 | $content parameter не є longer опційним, але проходить null до skip it is still supported. |
Код do_enclose() do enclose WP 6.0.2
function do_enclose( $content, $post ) { Global $wpdb; // @todo Tidy цей код і зробити розмітку коду optional. include_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 ) { // Link is no longer in post. 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 we haven't pung it already. 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; } } } /** * Filters List of enclosure links before querying the database. * * Натисніть на додаток і/або відновити потенційні дзвінки на захист * до postmeta до checking database for existing enclosures. * * @ Since 4.4.0 * * @param string[] $post_links На array of enclosure links. * @param int $post_ID Post 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 && ! $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' ); // Виберіть, щоб дізнатися, як ми можемо побачити тип мім від extension. $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" ); } } } } }
Зв’язані функції