Handles sending a link to the editor via AJAX.
Description
Generates the HTML to send a non-image embed link to the editor.
Backward compatible with the following filters:
- file_send_to_editor_url
- audio_send_to_editor_url
- video_send_to_editor_url
Source
function wp_ajax_send_link_to_editor() {
global $post, $wp_embed;
check_ajax_referer( 'media-send-to-editor', 'nonce' );
$src = wp_unslash( $_POST['src'] );
if ( ! $src ) {
wp_send_json_error();
}
if ( ! strpos( $src, '://' ) ) {
$src = 'http://' . $src;
}
$src = sanitize_url( $src );
if ( ! $src ) {
wp_send_json_error();
}
$link_text = trim( wp_unslash( $_POST['link_text'] ) );
if ( ! $link_text ) {
$link_text = wp_basename( $src );
}
$post = get_post( isset( $_POST['post_id'] ) ? $_POST['post_id'] : 0 );
// Ping WordPress for an embed.
$check_embed = $wp_embed->run_shortcode( '' . $src . '' );
// Fallback that WordPress creates when no oEmbed was found.
$fallback = $wp_embed->maybe_make_link( $src );
if ( $check_embed !== $fallback ) {
// TinyMCE view for will parse this.
$html = '' . $src . '';
} elseif ( $link_text ) {
$html = '<a href="' . esc_url( $src ) . '">' . $link_text . '</a>';
} else {
$html = '';
}
// Figure out what filter to run:
$type = 'file';
$ext = preg_replace( '/^.+?\.([^.]+)$/', '$1', $src );
if ( $ext ) {
$ext_type = wp_ext2type( $ext );
if ( 'audio' === $ext_type || 'video' === $ext_type ) {
$type = $ext_type;
}
}
/** This filter is documented in wp-admin/includes/media.php */
$html = apply_filters( "{$type}_send_to_editor_url", $html, $src, $link_text );
wp_send_json_success( $html );
}
Hooks
- apply_filters( “{$type}_send_to_editor_url”,
string $html ,string $src ,string $title ) Filters the URL sent to the editor for a specific media type.
Changelog
Version | Description |
---|---|
3.5.0 | Introduced. |
User Contributed Notes
You must log in before being able to contribute a note or feedback.