do_enclose() │ WP 1.5.0
Checks the specified post for links to Video and Audio in its content. If links are found, it adds these URLs to the meta-fields enclosure.
Before adding the next meta-field enclosure, it checks if such data already exists. It removes the meta-field enclosure that were deleted from the post.
This is an internal WP function. It is triggered in the function do_all_enclosures() , which in turn is executed by cron on the hook do_all_pings :
add_action( 'publish_post', '_publish_post_hook', 5, 1 ); // here the cron task is created
→ wp_schedule_single_event( time(), 'do_pings' );
// this is triggered by Cron
→ add_action( 'do_pings', 'do_all_pings', 10, 0 );
→ add_action( 'do_all_pings', 'do_all_enclosures', 10, 0 );
How it works read more here .
Returns
null|false . Null on success and false if the post is not found.
Usage
do_enclose( $content, $post );
$content(string|null) (required)
Usually here is specified null! The content of the post. If null , the post_content field from $post is used.
$post(int|WP_Post ) (required)
ID of the post or post object.
Examples
Add Your Own Example
Notes
Global. wpdb. $wpdb WordPress database abstraction object.
Changelog
Since 1.5.0
Introduced.
Since 5.3.0
The $content parameter was made optional, and the $post parameter was updated to accept a post ID or a WP_Post object.
Since 5.6.0
The $content parameter is no longer optional, but passing null to skip it is still supported.
do_enclose() do enclose code
WP 7.0
function do_enclose( $content, $post ) {
global $wpdb;
// @todo Tidy this code and make the debug code optional.
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 ) {
// 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 the list of enclosure links before querying the database.
*
* Allows for the addition and/or removal of potential enclosures to save
* to postmeta before checking the database for existing enclosures.
*
* @since 4.4.0
*
* @param string[] $post_links An 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 && ! $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 = (int) ( $headers['Content-Length'] ?? 0 );
$type = $headers['Content-Type'] ?? '';
$allowed_types = array( 'video', 'audio' );
// Check to see if we can figure out the mime type from the 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', "$url\n$len\n$mime\n" );
}
}
}
}
}
Related Functions