WordPress Version: 6.1
/**
* Handles the process of uploading media.
*
* @since 2.5.0
*
* @return null|string
*/
function wp_media_upload_handler()
{
$errors = array();
$id = 0;
if (isset($_POST['html-upload']) && !empty($_FILES)) {
check_admin_referer('media-form');
// Upload File button was clicked.
$id = media_handle_upload('async-upload', $_REQUEST['post_id']);
unset($_FILES);
if (is_wp_error($id)) {
$errors['upload_error'] = $id;
$id = false;
}
}
if (!empty($_POST['insertonlybutton'])) {
$src = $_POST['src'];
if (!empty($src) && !strpos($src, '://')) {
$src = "http://{$src}";
}
if (isset($_POST['media_type']) && 'image' !== $_POST['media_type']) {
$title = esc_html(wp_unslash($_POST['title']));
if (empty($title)) {
$title = esc_html(wp_basename($src));
}
if ($title && $src) {
$html = "<a href='" . esc_url($src) . "'>{$title}</a>";
}
$type = 'file';
$ext = preg_replace('/^.+?\.([^.]+)$/', '$1', $src);
if ($ext) {
$ext_type = wp_ext2type($ext);
if ('audio' === $ext_type || 'video' === $ext_type) {
$type = $ext_type;
}
}
/**
* Filters the URL sent to the editor for a specific media type.
*
* The dynamic portion of the hook name, `$type`, refers to the type
* of media being sent.
*
* Possible hook names include:
*
* - `audio_send_to_editor_url`
* - `file_send_to_editor_url`
* - `video_send_to_editor_url`
*
* @since 3.3.0
*
* @param string $html HTML markup sent to the editor.
* @param string $src Media source URL.
* @param string $title Media title.
*/
$html = apply_filters("{$type}_send_to_editor_url", $html, sanitize_url($src), $title);
} else {
$align = '';
$alt = esc_attr(wp_unslash($_POST['alt']));
if (isset($_POST['align'])) {
$align = esc_attr(wp_unslash($_POST['align']));
$class = " class='align{$align}'";
}
if (!empty($src)) {
$html = "<img src='" . esc_url($src) . "' alt='{$alt}'{$class} />";
}
/**
* Filters the image URL sent to the editor.
*
* @since 2.8.0
*
* @param string $html HTML markup sent to the editor for an image.
* @param string $src Image source URL.
* @param string $alt Image alternate, or alt, text.
* @param string $align The image alignment. Default 'alignnone'. Possible values include
* 'alignleft', 'aligncenter', 'alignright', 'alignnone'.
*/
$html = apply_filters('image_send_to_editor_url', $html, sanitize_url($src), $alt, $align);
}
return media_send_to_editor($html);
}
if (isset($_POST['save'])) {
$errors['upload_notice'] = __('Saved.');
wp_enqueue_script('admin-gallery');
return wp_iframe('media_upload_gallery_form', $errors);
} elseif (!empty($_POST)) {
$return = media_upload_form_handler();
if (is_string($return)) {
return $return;
}
if (is_array($return)) {
$errors = $return;
}
}
if (isset($_GET['tab']) && 'type_url' === $_GET['tab']) {
$type = 'image';
if (isset($_GET['type']) && in_array($_GET['type'], array('video', 'audio', 'file'), true)) {
$type = $_GET['type'];
}
return wp_iframe('media_upload_type_url_form', $type, $errors, $id);
}
return wp_iframe('media_upload_type_form', 'image', $errors, $id);
}