2019-03-12 09:27:46 +00:00
< ? php
/**
* WordPress Administration Media API .
*
* @ package WordPress
* @ subpackage Administration
*/
/**
* Defines the default media upload tabs
*
* @ since 2.5 . 0
*
* @ return array default tabs
*/
function media_upload_tabs () {
$_default_tabs = array (
2019-04-16 19:56:22 +00:00
'type' => __ ( 'From Computer' ), // handler action suffix => tab text
'type_url' => __ ( 'From URL' ),
'gallery' => __ ( 'Gallery' ),
'library' => __ ( 'Media Library' ),
2019-03-12 09:27:46 +00:00
);
/**
* Filters the available tabs in the legacy ( pre - 3.5 . 0 ) media popup .
*
* @ since 2.5 . 0
*
* @ param array $_default_tabs An array of media tabs .
*/
return apply_filters ( 'media_upload_tabs' , $_default_tabs );
}
/**
* Adds the gallery tab back to the tabs array if post has image attachments
*
* @ since 2.5 . 0
*
* @ global wpdb $wpdb WordPress database abstraction object .
*
* @ param array $tabs
* @ return array $tabs with gallery if post has image attachment
*/
2019-04-16 19:56:22 +00:00
function update_gallery_tab ( $tabs ) {
2019-03-12 09:27:46 +00:00
global $wpdb ;
2019-04-16 19:56:22 +00:00
if ( ! isset ( $_REQUEST [ 'post_id' ] ) ) {
unset ( $tabs [ 'gallery' ] );
2019-03-12 09:27:46 +00:00
return $tabs ;
}
2019-04-16 19:56:22 +00:00
$post_id = intval ( $_REQUEST [ 'post_id' ] );
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( $post_id ) {
2019-03-12 09:27:46 +00:00
$attachments = intval ( $wpdb -> get_var ( $wpdb -> prepare ( " SELECT count(*) FROM $wpdb->posts WHERE post_type = 'attachment' AND post_status != 'trash' AND post_parent = %d " , $post_id ) ) );
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( empty ( $attachments ) ) {
unset ( $tabs [ 'gallery' ] );
2019-03-12 09:27:46 +00:00
return $tabs ;
}
2019-04-16 19:56:22 +00:00
$tabs [ 'gallery' ] = sprintf ( __ ( 'Gallery (%s)' ), " <span id='attachments-count'> $attachments </span> " );
2019-03-12 09:27:46 +00:00
return $tabs ;
}
/**
* Outputs the legacy media upload tabs UI .
*
* @ since 2.5 . 0
*
* @ global string $redir_tab
*/
function the_media_upload_tabs () {
global $redir_tab ;
2019-04-16 19:56:22 +00:00
$tabs = media_upload_tabs ();
2019-03-12 09:27:46 +00:00
$default = 'type' ;
2019-04-16 19:56:22 +00:00
if ( ! empty ( $tabs ) ) {
2019-03-12 09:27:46 +00:00
echo " <ul id='sidemenu'> \n " ;
2019-04-16 19:56:22 +00:00
if ( isset ( $redir_tab ) && array_key_exists ( $redir_tab , $tabs ) ) {
2019-03-12 09:27:46 +00:00
$current = $redir_tab ;
2019-04-16 19:56:22 +00:00
} elseif ( isset ( $_GET [ 'tab' ] ) && array_key_exists ( $_GET [ 'tab' ], $tabs ) ) {
2019-03-12 09:27:46 +00:00
$current = $_GET [ 'tab' ];
} else {
/** This filter is documented in wp-admin/media-upload.php */
$current = apply_filters ( 'media_upload_default_tab' , $default );
}
foreach ( $tabs as $callback => $text ) {
$class = '' ;
2019-04-16 19:56:22 +00:00
if ( $current == $callback ) {
2019-03-12 09:27:46 +00:00
$class = " class='current' " ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$href = add_query_arg (
array (
'tab' => $callback ,
's' => false ,
'paged' => false ,
'post_mime_type' => false ,
'm' => false ,
)
);
$link = " <a href=' " . esc_url ( $href ) . " ' $class > $text </a> " ;
echo " \t <li id=' " . esc_attr ( " tab- $callback " ) . " '> $link </li> \n " ;
2019-03-12 09:27:46 +00:00
}
echo " </ul> \n " ;
}
}
/**
* Retrieves the image HTML to send to the editor .
*
* @ since 2.5 . 0
*
* @ param int $id Image attachment id .
* @ param string $caption Image caption .
* @ param string $title Image title attribute .
* @ param string $align Image CSS alignment property .
* @ param string $url Optional . Image src URL . Default empty .
* @ param bool | string $rel Optional . Value for rel attribute or whether to add a default value . Default false .
* @ param string | array $size Optional . Image size . Accepts any valid image size , or an array of width
* and height values in pixels ( in that order ) . Default 'medium' .
* @ param string $alt Optional . Image alt attribute . Default empty .
* @ return string The HTML output to insert into the editor .
*/
function get_image_send_to_editor ( $id , $caption , $title , $align , $url = '' , $rel = false , $size = 'medium' , $alt = '' ) {
$html = get_image_tag ( $id , $alt , '' , $align , $size );
if ( $rel ) {
if ( is_string ( $rel ) ) {
$rel = ' rel="' . esc_attr ( $rel ) . '"' ;
} else {
$rel = ' rel="attachment wp-att-' . intval ( $id ) . '"' ;
}
} else {
$rel = '' ;
}
2019-04-16 19:56:22 +00:00
if ( $url ) {
2019-03-12 09:27:46 +00:00
$html = '<a href="' . esc_attr ( $url ) . '"' . $rel . '>' . $html . '</a>' ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
/**
* Filters the image HTML markup to send to the editor when inserting an image .
*
* @ since 2.5 . 0
*
* @ param string $html The image HTML markup to send .
* @ param int $id The attachment id .
* @ param string $caption The image caption .
* @ param string $title The image title .
* @ param string $align The image alignment .
* @ param string $url The image source URL .
* @ param string | array $size Size of image . Image size or array of width and height values
* ( in that order ) . Default 'medium' .
* @ param string $alt The image alternative , or alt , text .
*/
$html = apply_filters ( 'image_send_to_editor' , $html , $id , $caption , $title , $align , $url , $size , $alt );
return $html ;
}
/**
* Adds image shortcode with caption to editor
*
* @ since 2.6 . 0
*
2019-04-16 19:56:22 +00:00
* @ param string $html The image HTML markup to send .
* @ param integer $id Image attachment ID .
* @ param string $caption Image caption .
* @ param string $title Image title attribute ( not used ) .
* @ param string $align Image CSS alignment property .
* @ param string $url Image source URL ( not used ) .
* @ param string $size Image size ( `thumbnail` , `medium` , `large` , `full` , or added with `add_image_size()` ) ( not used ) .
* @ param string $alt Image `alt` attribute ( not used ) .
* @ return string The image HTML markup with caption shortcode .
2019-03-12 09:27:46 +00:00
*/
function image_add_caption ( $html , $id , $caption , $title , $align , $url , $size , $alt = '' ) {
/**
* Filters the caption text .
*
* Note : If the caption text is empty , the caption shortcode will not be appended
* to the image HTML when inserted into the editor .
*
* Passing an empty value also prevents the { @ see 'image_add_caption_shortcode' }
* Filters from being evaluated at the end of image_add_caption () .
*
* @ since 4.1 . 0
*
* @ param string $caption The original caption text .
* @ param int $id The attachment ID .
*/
$caption = apply_filters ( 'image_add_caption_text' , $caption , $id );
/**
* Filters whether to disable captions .
*
* Prevents image captions from being appended to image HTML when inserted into the editor .
*
* @ since 2.6 . 0
*
* @ param bool $bool Whether to disable appending captions . Returning true to the filter
* will disable captions . Default empty string .
*/
2019-04-16 19:56:22 +00:00
if ( empty ( $caption ) || apply_filters ( 'disable_captions' , '' ) ) {
2019-03-12 09:27:46 +00:00
return $html ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
$id = ( 0 < ( int ) $id ) ? 'attachment_' . $id : '' ;
2019-04-16 19:56:22 +00:00
if ( ! preg_match ( '/width=["\']([0-9]+)/' , $html , $matches ) ) {
2019-03-12 09:27:46 +00:00
return $html ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
$width = $matches [ 1 ];
2019-04-16 19:56:22 +00:00
$caption = str_replace ( array ( " \r \n " , " \r " ), " \n " , $caption );
2019-03-12 09:27:46 +00:00
$caption = preg_replace_callback ( '/<[a-zA-Z0-9]+(?: [^<>]+>)*/' , '_cleanup_image_add_caption' , $caption );
// Convert any remaining line breaks to <br>.
$caption = preg_replace ( '/[ \n\t]*\n[ \t]*/' , '<br />' , $caption );
$html = preg_replace ( '/(class=["\'][^\'"]*)align(none|left|right|center)\s?/' , '$1' , $html );
2019-04-16 19:56:22 +00:00
if ( empty ( $align ) ) {
2019-03-12 09:27:46 +00:00
$align = 'none' ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$shcode = '[caption id="' . $id . '" align="align' . $align . '" width="' . $width . '"]' . $html . ' ' . $caption . '[/caption]' ;
2019-03-12 09:27:46 +00:00
/**
* Filters the image HTML markup including the caption shortcode .
*
* @ since 2.6 . 0
*
* @ param string $shcode The image HTML markup with caption shortcode .
* @ param string $html The image HTML markup .
*/
return apply_filters ( 'image_add_caption_shortcode' , $shcode , $html );
}
/**
* Private preg_replace callback used in image_add_caption ()
*
* @ access private
* @ since 3.4 . 0
*/
function _cleanup_image_add_caption ( $matches ) {
// Remove any line breaks from inside the tags.
return preg_replace ( '/[\r\n\t]+/' , ' ' , $matches [ 0 ] );
}
/**
* Adds image html to editor
*
* @ since 2.5 . 0
*
* @ param string $html
*/
2019-04-16 19:56:22 +00:00
function media_send_to_editor ( $html ) {
?>
2019-03-12 09:27:46 +00:00
< script type = " text/javascript " >
var win = window . dialogArguments || opener || parent || top ;
win . send_to_editor ( < ? php echo wp_json_encode ( $html ); ?> );
</ script >
2019-04-16 19:56:22 +00:00
< ? php
2019-03-12 09:27:46 +00:00
exit ;
}
/**
* Save a file submitted from a POST request and create an attachment post for it .
*
* @ since 2.5 . 0
*
* @ param string $file_id Index of the `$_FILES` array that the file was sent . Required .
* @ param int $post_id The post ID of a post to attach the media item to . Required , but can
* be set to 0 , creating a media item that has no relationship to a post .
* @ param array $post_data Overwrite some of the attachment . Optional .
* @ param array $overrides Override the wp_handle_upload () behavior . Optional .
* @ return int | WP_Error ID of the attachment or a WP_Error object on failure .
*/
2019-04-16 19:56:22 +00:00
function media_handle_upload ( $file_id , $post_id , $post_data = array (), $overrides = array ( 'test_form' => false ) ) {
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$time = current_time ( 'mysql' );
if ( $post = get_post ( $post_id ) ) {
2019-03-12 09:27:46 +00:00
// The post date doesn't usually matter for pages, so don't backdate this upload.
2019-04-16 19:56:22 +00:00
if ( 'page' !== $post -> post_type && substr ( $post -> post_date , 0 , 4 ) > 0 ) {
2019-03-12 09:27:46 +00:00
$time = $post -> post_date ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
}
2019-04-16 19:56:22 +00:00
$file = wp_handle_upload ( $_FILES [ $file_id ], $overrides , $time );
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( isset ( $file [ 'error' ] ) ) {
2019-03-12 09:27:46 +00:00
return new WP_Error ( 'upload_error' , $file [ 'error' ] );
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$name = $_FILES [ $file_id ][ 'name' ];
2019-03-12 09:27:46 +00:00
$ext = pathinfo ( $name , PATHINFO_EXTENSION );
$name = wp_basename ( $name , " . $ext " );
2019-04-16 19:56:22 +00:00
$url = $file [ 'url' ];
$type = $file [ 'type' ];
$file = $file [ 'file' ];
$title = sanitize_text_field ( $name );
2019-03-12 09:27:46 +00:00
$content = '' ;
$excerpt = '' ;
if ( preg_match ( '#^audio#' , $type ) ) {
$meta = wp_read_audio_metadata ( $file );
if ( ! empty ( $meta [ 'title' ] ) ) {
$title = $meta [ 'title' ];
}
if ( ! empty ( $title ) ) {
if ( ! empty ( $meta [ 'album' ] ) && ! empty ( $meta [ 'artist' ] ) ) {
/* translators: 1: audio track title, 2: album title, 3: artist name */
$content .= sprintf ( __ ( '"%1$s" from %2$s by %3$s.' ), $title , $meta [ 'album' ], $meta [ 'artist' ] );
} elseif ( ! empty ( $meta [ 'album' ] ) ) {
/* translators: 1: audio track title, 2: album title */
$content .= sprintf ( __ ( '"%1$s" from %2$s.' ), $title , $meta [ 'album' ] );
} elseif ( ! empty ( $meta [ 'artist' ] ) ) {
/* translators: 1: audio track title, 2: artist name */
$content .= sprintf ( __ ( '"%1$s" by %2$s.' ), $title , $meta [ 'artist' ] );
} else {
/* translators: 1: audio track title */
$content .= sprintf ( __ ( '"%s".' ), $title );
}
} elseif ( ! empty ( $meta [ 'album' ] ) ) {
if ( ! empty ( $meta [ 'artist' ] ) ) {
/* translators: 1: audio album title, 2: artist name */
$content .= sprintf ( __ ( '%1$s by %2$s.' ), $meta [ 'album' ], $meta [ 'artist' ] );
} else {
$content .= $meta [ 'album' ] . '.' ;
}
} elseif ( ! empty ( $meta [ 'artist' ] ) ) {
$content .= $meta [ 'artist' ] . '.' ;
}
if ( ! empty ( $meta [ 'year' ] ) ) {
2019-04-16 19:56:22 +00:00
/* translators: Audio file track information. %d: Year of audio track release */
2019-03-12 09:27:46 +00:00
$content .= ' ' . sprintf ( __ ( 'Released: %d.' ), $meta [ 'year' ] );
}
if ( ! empty ( $meta [ 'track_number' ] ) ) {
$track_number = explode ( '/' , $meta [ 'track_number' ] );
if ( isset ( $track_number [ 1 ] ) ) {
/* translators: Audio file track information. 1: Audio track number, 2: Total audio tracks */
$content .= ' ' . sprintf ( __ ( 'Track %1$s of %2$s.' ), number_format_i18n ( $track_number [ 0 ] ), number_format_i18n ( $track_number [ 1 ] ) );
} else {
2019-04-16 19:56:22 +00:00
/* translators: Audio file track information. %s: Audio track number */
$content .= ' ' . sprintf ( __ ( 'Track %s.' ), number_format_i18n ( $track_number [ 0 ] ) );
2019-03-12 09:27:46 +00:00
}
}
if ( ! empty ( $meta [ 'genre' ] ) ) {
2019-04-16 19:56:22 +00:00
/* translators: Audio file genre information. %s: Audio genre name */
2019-03-12 09:27:46 +00:00
$content .= ' ' . sprintf ( __ ( 'Genre: %s.' ), $meta [ 'genre' ] );
}
2019-04-16 19:56:22 +00:00
// Use image exif/iptc data for title and caption defaults if possible.
2019-03-12 09:27:46 +00:00
} elseif ( 0 === strpos ( $type , 'image/' ) && $image_meta = wp_read_image_metadata ( $file ) ) {
if ( trim ( $image_meta [ 'title' ] ) && ! is_numeric ( sanitize_title ( $image_meta [ 'title' ] ) ) ) {
$title = $image_meta [ 'title' ];
}
if ( trim ( $image_meta [ 'caption' ] ) ) {
$excerpt = $image_meta [ 'caption' ];
}
}
// Construct the attachment array
2019-04-16 19:56:22 +00:00
$attachment = array_merge (
array (
'post_mime_type' => $type ,
'guid' => $url ,
'post_parent' => $post_id ,
'post_title' => $title ,
'post_content' => $content ,
'post_excerpt' => $excerpt ,
),
$post_data
);
2019-03-12 09:27:46 +00:00
// This should never be set as it would then overwrite an existing attachment.
unset ( $attachment [ 'ID' ] );
// Save the data
$id = wp_insert_attachment ( $attachment , $file , $post_id , true );
2019-04-16 19:56:22 +00:00
if ( ! is_wp_error ( $id ) ) {
2019-03-12 09:27:46 +00:00
wp_update_attachment_metadata ( $id , wp_generate_attachment_metadata ( $id , $file ) );
}
return $id ;
}
/**
* Handles a side - loaded file in the same way as an uploaded file is handled by media_handle_upload () .
*
* @ since 2.6 . 0
*
* @ param array $file_array Array similar to a `$_FILES` upload array .
* @ param int $post_id The post ID the media is associated with .
* @ param string $desc Optional . Description of the side - loaded file . Default null .
* @ param array $post_data Optional . Post data to override . Default empty array .
* @ return int | object The ID of the attachment or a WP_Error on failure .
*/
function media_handle_sideload ( $file_array , $post_id , $desc = null , $post_data = array () ) {
2019-04-16 19:56:22 +00:00
$overrides = array ( 'test_form' => false );
2019-03-12 09:27:46 +00:00
$time = current_time ( 'mysql' );
if ( $post = get_post ( $post_id ) ) {
2019-04-16 19:56:22 +00:00
if ( substr ( $post -> post_date , 0 , 4 ) > 0 ) {
2019-03-12 09:27:46 +00:00
$time = $post -> post_date ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
}
$file = wp_handle_sideload ( $file_array , $overrides , $time );
2019-04-16 19:56:22 +00:00
if ( isset ( $file [ 'error' ] ) ) {
2019-03-12 09:27:46 +00:00
return new WP_Error ( 'upload_error' , $file [ 'error' ] );
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$url = $file [ 'url' ];
$type = $file [ 'type' ];
$file = $file [ 'file' ];
$title = preg_replace ( '/\.[^.]+$/' , '' , basename ( $file ) );
2019-03-12 09:27:46 +00:00
$content = '' ;
// Use image exif/iptc data for title and caption defaults if possible.
if ( $image_meta = wp_read_image_metadata ( $file ) ) {
2019-04-16 19:56:22 +00:00
if ( trim ( $image_meta [ 'title' ] ) && ! is_numeric ( sanitize_title ( $image_meta [ 'title' ] ) ) ) {
2019-03-12 09:27:46 +00:00
$title = $image_meta [ 'title' ];
2019-04-16 19:56:22 +00:00
}
if ( trim ( $image_meta [ 'caption' ] ) ) {
2019-03-12 09:27:46 +00:00
$content = $image_meta [ 'caption' ];
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
}
2019-04-16 19:56:22 +00:00
if ( isset ( $desc ) ) {
2019-03-12 09:27:46 +00:00
$title = $desc ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
// Construct the attachment array.
2019-04-16 19:56:22 +00:00
$attachment = array_merge (
array (
'post_mime_type' => $type ,
'guid' => $url ,
'post_parent' => $post_id ,
'post_title' => $title ,
'post_content' => $content ,
),
$post_data
);
2019-03-12 09:27:46 +00:00
// This should never be set as it would then overwrite an existing attachment.
unset ( $attachment [ 'ID' ] );
// Save the attachment metadata
2019-04-16 19:56:22 +00:00
$id = wp_insert_attachment ( $attachment , $file , $post_id , true );
if ( ! is_wp_error ( $id ) ) {
2019-03-12 09:27:46 +00:00
wp_update_attachment_metadata ( $id , wp_generate_attachment_metadata ( $id , $file ) );
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
return $id ;
}
/**
* Adds the iframe to display content for the media upload page
*
* @ since 2.5 . 0
*
* @ global int $body_id
*
* @ param string | callable $content_func
*/
2019-04-16 19:56:22 +00:00
function wp_iframe ( $content_func /* ... */ ) {
2019-03-12 09:27:46 +00:00
_wp_admin_html_begin ();
2019-04-16 19:56:22 +00:00
?>
< title >< ? php bloginfo ( 'name' ); ?> › <?php _e( 'Uploads' ); ?> — <?php _e( 'WordPress' ); ?></title>
< ? php
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
wp_enqueue_style ( 'colors' );
// Check callback name for 'media'
if ( ( is_array ( $content_func ) && ! empty ( $content_func [ 1 ] ) && 0 === strpos ( ( string ) $content_func [ 1 ], 'media' ) )
|| ( ! is_array ( $content_func ) && 0 === strpos ( $content_func , 'media' ) ) ) {
wp_enqueue_style ( 'deprecated-media' );
}
wp_enqueue_style ( 'ie' );
?>
2019-03-12 09:27:46 +00:00
< script type = " text/javascript " >
addLoadEvent = function ( func ){ if ( typeof jQuery != " undefined " ) jQuery ( document ) . ready ( func ); else if ( typeof wpOnload != 'function' ){ wpOnload = func ;} else { var oldonload = wpOnload ; wpOnload = function (){ oldonload (); func ();}}};
var ajaxurl = '<?php echo admin_url( ' admin - ajax . php ', ' relative ' ); ?>' , pagenow = 'media-upload-popup' , adminpage = 'media-upload-popup' ,
isRtl = < ? php echo ( int ) is_rtl (); ?> ;
</ script >
2019-04-16 19:56:22 +00:00
< ? php
2019-03-12 09:27:46 +00:00
/** This action is documented in wp-admin/admin-header.php */
do_action ( 'admin_enqueue_scripts' , 'media-upload-popup' );
/**
* Fires when admin styles enqueued for the legacy ( pre - 3.5 . 0 ) media upload popup are printed .
*
* @ since 2.9 . 0
*/
do_action ( 'admin_print_styles-media-upload-popup' );
/** This action is documented in wp-admin/admin-header.php */
do_action ( 'admin_print_styles' );
/**
* Fires when admin scripts enqueued for the legacy ( pre - 3.5 . 0 ) media upload popup are printed .
*
* @ since 2.9 . 0
*/
do_action ( 'admin_print_scripts-media-upload-popup' );
/** This action is documented in wp-admin/admin-header.php */
do_action ( 'admin_print_scripts' );
/**
* Fires when scripts enqueued for the admin header for the legacy ( pre - 3.5 . 0 )
* media upload popup are printed .
*
* @ since 2.9 . 0
*/
do_action ( 'admin_head-media-upload-popup' );
/** This action is documented in wp-admin/admin-header.php */
do_action ( 'admin_head' );
2019-04-16 19:56:22 +00:00
if ( is_string ( $content_func ) ) {
/**
* Fires in the admin header for each specific form tab in the legacy
* ( pre - 3.5 . 0 ) media upload popup .
*
* The dynamic portion of the hook , `$content_func` , refers to the form
* callback for the media upload type . Possible values include
* 'media_upload_type_form' , 'media_upload_type_url_form' , and
* 'media_upload_library_form' .
*
* @ since 2.5 . 0
*/
do_action ( " admin_head_ { $content_func } " );
}
$body_id_attr = '' ;
if ( isset ( $GLOBALS [ 'body_id' ] ) ) {
$body_id_attr = ' id="' . $GLOBALS [ 'body_id' ] . '"' ;
}
?>
2019-03-12 09:27:46 +00:00
</ head >
2019-04-16 19:56:22 +00:00
< body < ? php echo $body_id_attr ; ?> class="wp-core-ui no-js">
2019-03-12 09:27:46 +00:00
< script type = " text/javascript " >
document . body . className = document . body . className . replace ( 'no-js' , 'js' );
</ script >
2019-04-16 19:56:22 +00:00
< ? php
2019-03-12 09:27:46 +00:00
$args = func_get_args ();
2019-04-16 19:56:22 +00:00
$args = array_slice ( $args , 1 );
call_user_func_array ( $content_func , $args );
2019-03-12 09:27:46 +00:00
/** This action is documented in wp-admin/admin-footer.php */
do_action ( 'admin_print_footer_scripts' );
2019-04-16 19:56:22 +00:00
?>
2019-03-12 09:27:46 +00:00
< script type = " text/javascript " > if ( typeof wpOnload == 'function' ) wpOnload (); </ script >
</ body >
</ html >
2019-04-16 19:56:22 +00:00
< ? php
2019-03-12 09:27:46 +00:00
}
/**
* Adds the media button to the editor
*
* @ since 2.5 . 0
*
* @ global int $post_ID
*
* @ staticvar int $instance
*
* @ param string $editor_id
*/
2019-04-16 19:56:22 +00:00
function media_buttons ( $editor_id = 'content' ) {
2019-03-12 09:27:46 +00:00
static $instance = 0 ;
$instance ++ ;
$post = get_post ();
2019-04-16 19:56:22 +00:00
if ( ! $post && ! empty ( $GLOBALS [ 'post_ID' ] ) ) {
2019-03-12 09:27:46 +00:00
$post = $GLOBALS [ 'post_ID' ];
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
wp_enqueue_media (
array (
'post' => $post ,
)
);
2019-03-12 09:27:46 +00:00
$img = '<span class="wp-media-buttons-icon"></span> ' ;
$id_attribute = $instance === 1 ? ' id="insert-media-button"' : '' ;
2019-04-16 19:56:22 +00:00
printf (
'<button type="button"%s class="button insert-media add_media" data-editor="%s">%s</button>' ,
2019-03-12 09:27:46 +00:00
$id_attribute ,
esc_attr ( $editor_id ),
$img . __ ( 'Add Media' )
);
/**
* Filters the legacy ( pre - 3.5 . 0 ) media buttons .
*
* Use { @ see 'media_buttons' } action instead .
*
* @ since 2.5 . 0
* @ deprecated 3.5 . 0 Use { @ see 'media_buttons' } action instead .
*
* @ param string $string Media buttons context . Default empty .
*/
$legacy_filter = apply_filters ( 'media_buttons_context' , '' );
if ( $legacy_filter ) {
// #WP22559. Close <a> if a plugin started by closing <a> to open their own <a> tag.
2019-04-16 19:56:22 +00:00
if ( 0 === stripos ( trim ( $legacy_filter ), '</a>' ) ) {
2019-03-12 09:27:46 +00:00
$legacy_filter .= '</a>' ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
echo $legacy_filter ;
}
}
/**
* @ global int $post_ID
* @ param string $type
* @ param int $post_id
* @ param string $tab
* @ return string
*/
function get_upload_iframe_src ( $type = null , $post_id = null , $tab = null ) {
global $post_ID ;
2019-04-16 19:56:22 +00:00
if ( empty ( $post_id ) ) {
2019-03-12 09:27:46 +00:00
$post_id = $post_ID ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$upload_iframe_src = add_query_arg ( 'post_id' , ( int ) $post_id , admin_url ( 'media-upload.php' ) );
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( $type && 'media' != $type ) {
$upload_iframe_src = add_query_arg ( 'type' , $type , $upload_iframe_src );
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( ! empty ( $tab ) ) {
$upload_iframe_src = add_query_arg ( 'tab' , $tab , $upload_iframe_src );
}
2019-03-12 09:27:46 +00:00
/**
* Filters the upload iframe source URL for a specific media type .
*
* The dynamic portion of the hook name , `$type` , refers to the type
* of media uploaded .
*
* @ since 3.0 . 0
*
* @ param string $upload_iframe_src The upload iframe source URL by type .
*/
$upload_iframe_src = apply_filters ( " { $type } _upload_iframe_src " , $upload_iframe_src );
2019-04-16 19:56:22 +00:00
return add_query_arg ( 'TB_iframe' , true , $upload_iframe_src );
2019-03-12 09:27:46 +00:00
}
/**
* Handles form submissions for the legacy media uploader .
*
* @ since 2.5 . 0
*
* @ return mixed void | object WP_Error on failure
*/
function media_upload_form_handler () {
2019-04-16 19:56:22 +00:00
check_admin_referer ( 'media-form' );
2019-03-12 09:27:46 +00:00
$errors = null ;
2019-04-16 19:56:22 +00:00
if ( isset ( $_POST [ 'send' ] ) ) {
$keys = array_keys ( $_POST [ 'send' ] );
2019-03-12 09:27:46 +00:00
$send_id = ( int ) reset ( $keys );
}
2019-04-16 19:56:22 +00:00
if ( ! empty ( $_POST [ 'attachments' ] ) ) {
foreach ( $_POST [ 'attachments' ] as $attachment_id => $attachment ) {
$post = $_post = get_post ( $attachment_id , ARRAY_A );
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( ! current_user_can ( 'edit_post' , $attachment_id ) ) {
continue ;
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( isset ( $attachment [ 'post_content' ] ) ) {
$post [ 'post_content' ] = $attachment [ 'post_content' ];
}
if ( isset ( $attachment [ 'post_title' ] ) ) {
$post [ 'post_title' ] = $attachment [ 'post_title' ];
}
if ( isset ( $attachment [ 'post_excerpt' ] ) ) {
$post [ 'post_excerpt' ] = $attachment [ 'post_excerpt' ];
}
if ( isset ( $attachment [ 'menu_order' ] ) ) {
$post [ 'menu_order' ] = $attachment [ 'menu_order' ];
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( isset ( $send_id ) && $attachment_id == $send_id ) {
if ( isset ( $attachment [ 'post_parent' ] ) ) {
$post [ 'post_parent' ] = $attachment [ 'post_parent' ];
}
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
/**
* Filters the attachment fields to be saved .
*
* @ since 2.5 . 0
*
* @ see wp_get_attachment_metadata ()
*
* @ param array $post An array of post data .
* @ param array $attachment An array of attachment metadata .
*/
$post = apply_filters ( 'attachment_fields_to_save' , $post , $attachment );
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( isset ( $attachment [ 'image_alt' ] ) ) {
$image_alt = wp_unslash ( $attachment [ 'image_alt' ] );
if ( $image_alt != get_post_meta ( $attachment_id , '_wp_attachment_image_alt' , true ) ) {
$image_alt = wp_strip_all_tags ( $image_alt , true );
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
// Update_meta expects slashed.
update_post_meta ( $attachment_id , '_wp_attachment_image_alt' , wp_slash ( $image_alt ) );
}
2019-03-12 09:27:46 +00:00
}
2019-04-16 19:56:22 +00:00
if ( isset ( $post [ 'errors' ] ) ) {
$errors [ $attachment_id ] = $post [ 'errors' ];
unset ( $post [ 'errors' ] );
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( $post != $_post ) {
wp_update_post ( $post );
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
foreach ( get_attachment_taxonomies ( $post ) as $t ) {
if ( isset ( $attachment [ $t ] ) ) {
wp_set_object_terms ( $attachment_id , array_map ( 'trim' , preg_split ( '/,+/' , $attachment [ $t ] ) ), $t , false );
}
}
2019-03-12 09:27:46 +00:00
}
}
2019-04-16 19:56:22 +00:00
if ( isset ( $_POST [ 'insert-gallery' ] ) || isset ( $_POST [ 'update-gallery' ] ) ) {
?>
2019-03-12 09:27:46 +00:00
< script type = " text/javascript " >
var win = window . dialogArguments || opener || parent || top ;
win . tb_remove ();
</ script >
< ? php
exit ;
}
2019-04-16 19:56:22 +00:00
if ( isset ( $send_id ) ) {
$attachment = wp_unslash ( $_POST [ 'attachments' ][ $send_id ] );
2019-03-12 09:27:46 +00:00
$html = isset ( $attachment [ 'post_title' ] ) ? $attachment [ 'post_title' ] : '' ;
2019-04-16 19:56:22 +00:00
if ( ! empty ( $attachment [ 'url' ] ) ) {
2019-03-12 09:27:46 +00:00
$rel = '' ;
2019-04-16 19:56:22 +00:00
if ( strpos ( $attachment [ 'url' ], 'attachment_id' ) || get_attachment_link ( $send_id ) == $attachment [ 'url' ] ) {
$rel = " rel='attachment wp-att- " . esc_attr ( $send_id ) . " ' " ;
}
2019-03-12 09:27:46 +00:00
$html = " <a href=' { $attachment [ 'url' ] } ' $rel > $html </a> " ;
}
/**
* Filters the HTML markup for a media item sent to the editor .
*
* @ since 2.5 . 0
*
* @ see wp_get_attachment_metadata ()
*
* @ param string $html HTML markup for a media item sent to the editor .
* @ param int $send_id The first key from the $_POST [ 'send' ] data .
* @ param array $attachment Array of attachment metadata .
*/
$html = apply_filters ( 'media_send_to_editor' , $html , $send_id , $attachment );
2019-04-16 19:56:22 +00:00
return media_send_to_editor ( $html );
2019-03-12 09:27:46 +00:00
}
return $errors ;
}
/**
* Handles the process of uploading media .
*
* @ since 2.5 . 0
*
* @ return null | string
*/
function wp_media_upload_handler () {
$errors = array ();
2019-04-16 19:56:22 +00:00
$id = 0 ;
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( isset ( $_POST [ 'html-upload' ] ) && ! empty ( $_FILES ) ) {
check_admin_referer ( 'media-form' );
2019-03-12 09:27:46 +00:00
// Upload File button was clicked
2019-04-16 19:56:22 +00:00
$id = media_handle_upload ( 'async-upload' , $_REQUEST [ 'post_id' ] );
unset ( $_FILES );
if ( is_wp_error ( $id ) ) {
2019-03-12 09:27:46 +00:00
$errors [ 'upload_error' ] = $id ;
2019-04-16 19:56:22 +00:00
$id = false ;
2019-03-12 09:27:46 +00:00
}
}
2019-04-16 19:56:22 +00:00
if ( ! empty ( $_POST [ 'insertonlybutton' ] ) ) {
2019-03-12 09:27:46 +00:00
$src = $_POST [ 'src' ];
2019-04-16 19:56:22 +00:00
if ( ! empty ( $src ) && ! strpos ( $src , '://' ) ) {
2019-03-12 09:27:46 +00:00
$src = " http:// $src " ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
if ( isset ( $_POST [ 'media_type' ] ) && 'image' != $_POST [ 'media_type' ] ) {
$title = esc_html ( wp_unslash ( $_POST [ 'title' ] ) );
2019-04-16 19:56:22 +00:00
if ( empty ( $title ) ) {
2019-03-12 09:27:46 +00:00
$title = esc_html ( basename ( $src ) );
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( $title && $src ) {
$html = " <a href=' " . esc_url ( $src ) . " '> $title </a> " ;
}
2019-03-12 09:27:46 +00:00
$type = 'file' ;
if ( ( $ext = preg_replace ( '/^.+?\.([^.]+)$/' , '$1' , $src ) ) && ( $ext_type = wp_ext2type ( $ext ) )
2019-04-16 19:56:22 +00:00
&& ( 'audio' == $ext_type || 'video' == $ext_type ) ) {
2019-03-12 09:27:46 +00:00
$type = $ext_type ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
/**
* 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 .
*
* @ 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 , esc_url_raw ( $src ), $title );
} else {
$align = '' ;
2019-04-16 19:56:22 +00:00
$alt = esc_attr ( wp_unslash ( $_POST [ 'alt' ] ) );
if ( isset ( $_POST [ 'align' ] ) ) {
2019-03-12 09:27:46 +00:00
$align = esc_attr ( wp_unslash ( $_POST [ 'align' ] ) );
$class = " class='align $align ' " ;
}
2019-04-16 19:56:22 +00:00
if ( ! empty ( $src ) ) {
$html = " <img src=' " . esc_url ( $src ) . " ' alt=' $alt ' $class /> " ;
}
2019-03-12 09:27:46 +00:00
/**
* 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 , esc_url_raw ( $src ), $alt , $align );
}
2019-04-16 19:56:22 +00:00
return media_send_to_editor ( $html );
2019-03-12 09:27:46 +00:00
}
if ( isset ( $_POST [ 'save' ] ) ) {
2019-04-16 19:56:22 +00:00
$errors [ 'upload_notice' ] = __ ( 'Saved.' );
2019-03-12 09:27:46 +00:00
wp_enqueue_script ( 'admin-gallery' );
2019-04-16 19:56:22 +00:00
return wp_iframe ( 'media_upload_gallery_form' , $errors );
2019-03-12 09:27:46 +00:00
} elseif ( ! empty ( $_POST ) ) {
$return = media_upload_form_handler ();
2019-04-16 19:56:22 +00:00
if ( is_string ( $return ) ) {
2019-03-12 09:27:46 +00:00
return $return ;
2019-04-16 19:56:22 +00:00
}
if ( is_array ( $return ) ) {
2019-03-12 09:27:46 +00:00
$errors = $return ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
}
2019-04-16 19:56:22 +00:00
if ( isset ( $_GET [ 'tab' ] ) && $_GET [ 'tab' ] == 'type_url' ) {
2019-03-12 09:27:46 +00:00
$type = 'image' ;
2019-04-16 19:56:22 +00:00
if ( isset ( $_GET [ 'type' ] ) && in_array ( $_GET [ 'type' ], array ( 'video' , 'audio' , 'file' ) ) ) {
2019-03-12 09:27:46 +00:00
$type = $_GET [ 'type' ];
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
return wp_iframe ( 'media_upload_type_url_form' , $type , $errors , $id );
}
return wp_iframe ( 'media_upload_type_form' , 'image' , $errors , $id );
}
/**
* Downloads an image from the specified URL and attaches it to a post .
*
* @ since 2.6 . 0
* @ since 4.2 . 0 Introduced the `$return` parameter .
* @ since 4.8 . 0 Introduced the 'id' option within the `$return` parameter .
*
* @ param string $file The URL of the image to download .
* @ param int $post_id The post ID the media is to be associated with .
* @ param string $desc Optional . Description of the image .
* @ param string $return Optional . Accepts 'html' ( image tag html ) or 'src' ( URL ), or 'id' ( attachment ID ) . Default 'html' .
* @ return string | WP_Error Populated HTML img tag on success , WP_Error object otherwise .
*/
function media_sideload_image ( $file , $post_id , $desc = null , $return = 'html' ) {
if ( ! empty ( $file ) ) {
// Set variables for storage, fix file filename for query strings.
preg_match ( '/[^\?]+\.(jpe?g|jpe|gif|png)\b/i' , $file , $matches );
if ( ! $matches ) {
return new WP_Error ( 'image_sideload_failed' , __ ( 'Invalid image URL' ) );
}
2019-04-16 19:56:22 +00:00
$file_array = array ();
2019-03-12 09:27:46 +00:00
$file_array [ 'name' ] = basename ( $matches [ 0 ] );
// Download file to temp location.
$file_array [ 'tmp_name' ] = download_url ( $file );
// If error storing temporarily, return the error.
if ( is_wp_error ( $file_array [ 'tmp_name' ] ) ) {
return $file_array [ 'tmp_name' ];
}
// Do the validation and storage stuff.
$id = media_handle_sideload ( $file_array , $post_id , $desc );
// If error storing permanently, unlink.
if ( is_wp_error ( $id ) ) {
@ unlink ( $file_array [ 'tmp_name' ] );
return $id ;
2019-04-16 19:56:22 +00:00
// If attachment id was requested, return it early.
2019-03-12 09:27:46 +00:00
} elseif ( $return === 'id' ) {
return $id ;
}
$src = wp_get_attachment_url ( $id );
}
// Finally, check to make sure the file has been saved, then return the HTML.
if ( ! empty ( $src ) ) {
if ( $return === 'src' ) {
return $src ;
}
2019-04-16 19:56:22 +00:00
$alt = isset ( $desc ) ? esc_attr ( $desc ) : '' ;
2019-03-12 09:27:46 +00:00
$html = " <img src=' $src ' alt=' $alt ' /> " ;
return $html ;
} else {
return new WP_Error ( 'image_sideload_failed' );
}
}
/**
* Retrieves the legacy media uploader form in an iframe .
*
* @ since 2.5 . 0
*
* @ return string | null
*/
function media_upload_gallery () {
$errors = array ();
2019-04-16 19:56:22 +00:00
if ( ! empty ( $_POST ) ) {
2019-03-12 09:27:46 +00:00
$return = media_upload_form_handler ();
2019-04-16 19:56:22 +00:00
if ( is_string ( $return ) ) {
2019-03-12 09:27:46 +00:00
return $return ;
2019-04-16 19:56:22 +00:00
}
if ( is_array ( $return ) ) {
2019-03-12 09:27:46 +00:00
$errors = $return ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
}
2019-04-16 19:56:22 +00:00
wp_enqueue_script ( 'admin-gallery' );
2019-03-12 09:27:46 +00:00
return wp_iframe ( 'media_upload_gallery_form' , $errors );
}
/**
* Retrieves the legacy media library form in an iframe .
*
* @ since 2.5 . 0
*
* @ return string | null
*/
function media_upload_library () {
$errors = array ();
2019-04-16 19:56:22 +00:00
if ( ! empty ( $_POST ) ) {
2019-03-12 09:27:46 +00:00
$return = media_upload_form_handler ();
2019-04-16 19:56:22 +00:00
if ( is_string ( $return ) ) {
2019-03-12 09:27:46 +00:00
return $return ;
2019-04-16 19:56:22 +00:00
}
if ( is_array ( $return ) ) {
2019-03-12 09:27:46 +00:00
$errors = $return ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
}
return wp_iframe ( 'media_upload_library_form' , $errors );
}
/**
* Retrieve HTML for the image alignment radio buttons with the specified one checked .
*
* @ since 2.7 . 0
*
* @ param WP_Post $post
* @ param string $checked
* @ return string
*/
function image_align_input_fields ( $post , $checked = '' ) {
2019-04-16 19:56:22 +00:00
if ( empty ( $checked ) ) {
$checked = get_user_setting ( 'align' , 'none' );
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$alignments = array (
'none' => __ ( 'None' ),
'left' => __ ( 'Left' ),
'center' => __ ( 'Center' ),
'right' => __ ( 'Right' ),
);
if ( ! array_key_exists ( ( string ) $checked , $alignments ) ) {
2019-03-12 09:27:46 +00:00
$checked = 'none' ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
$out = array ();
foreach ( $alignments as $name => $label ) {
2019-04-16 19:56:22 +00:00
$name = esc_attr ( $name );
$out [] = " <input type='radio' name='attachments[ { $post -> ID } ][align]' id='image-align- { $name } - { $post -> ID } ' value=' $name ' " .
( $checked == $name ? " checked='checked' " : '' ) .
2019-03-12 09:27:46 +00:00
" /><label for='image-align- { $name } - { $post -> ID } ' class='align image-align- { $name } -label'> $label </label> " ;
}
2019-04-16 19:56:22 +00:00
return join ( " \n " , $out );
2019-03-12 09:27:46 +00:00
}
/**
* Retrieve HTML for the size radio buttons with the specified one checked .
*
* @ since 2.7 . 0
*
* @ param WP_Post $post
* @ param bool | string $check
* @ return array
*/
function image_size_input_fields ( $post , $check = '' ) {
/**
* Filters the names and labels of the default image sizes .
*
* @ since 3.3 . 0
*
* @ param array $size_names Array of image sizes and their names . Default values
* include 'Thumbnail' , 'Medium' , 'Large' , 'Full Size' .
*/
2019-04-16 19:56:22 +00:00
$size_names = apply_filters (
'image_size_names_choose' ,
array (
'thumbnail' => __ ( 'Thumbnail' ),
'medium' => __ ( 'Medium' ),
'large' => __ ( 'Large' ),
'full' => __ ( 'Full Size' ),
)
);
2019-03-12 09:27:46 +00:00
if ( empty ( $check ) ) {
2019-04-16 19:56:22 +00:00
$check = get_user_setting ( 'imgsize' , 'medium' );
2019-03-12 09:27:46 +00:00
}
$out = array ();
foreach ( $size_names as $size => $label ) {
$downsize = image_downsize ( $post -> ID , $size );
2019-04-16 19:56:22 +00:00
$checked = '' ;
2019-03-12 09:27:46 +00:00
// Is this size selectable?
$enabled = ( $downsize [ 3 ] || 'full' == $size );
2019-04-16 19:56:22 +00:00
$css_id = " image-size- { $size } - { $post -> ID } " ;
2019-03-12 09:27:46 +00:00
// If this size is the default but that's not available, don't select it.
if ( $size == $check ) {
if ( $enabled ) {
$checked = " checked='checked' " ;
} else {
$check = '' ;
}
} elseif ( ! $check && $enabled && 'thumbnail' != $size ) {
/*
* If $check is not enabled , default to the first available size
* that ' s bigger than a thumbnail .
*/
2019-04-16 19:56:22 +00:00
$check = $size ;
2019-03-12 09:27:46 +00:00
$checked = " checked='checked' " ;
}
$html = " <div class='image-size-item'><input type='radio' " . disabled ( $enabled , false , false ) . " name='attachments[ $post->ID ][image-size]' id=' { $css_id } ' value=' { $size } ' $checked /> " ;
$html .= " <label for=' { $css_id } '> $label </label> " ;
// Only show the dimensions if that choice is available.
if ( $enabled ) {
2019-04-16 19:56:22 +00:00
$html .= " <label for=' { $css_id } ' class='help'> " . sprintf ( '(%d × %d)' , $downsize [ 1 ], $downsize [ 2 ] ) . '</label>' ;
2019-03-12 09:27:46 +00:00
}
$html .= '</div>' ;
$out [] = $html ;
}
return array (
'label' => __ ( 'Size' ),
'input' => 'html' ,
'html' => join ( " \n " , $out ),
);
}
/**
* Retrieve HTML for the Link URL buttons with the default link type as specified .
*
* @ since 2.7 . 0
*
* @ param WP_Post $post
* @ param string $url_type
* @ return string
*/
2019-04-16 19:56:22 +00:00
function image_link_input_fields ( $post , $url_type = '' ) {
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$file = wp_get_attachment_url ( $post -> ID );
$link = get_attachment_link ( $post -> ID );
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( empty ( $url_type ) ) {
$url_type = get_user_setting ( 'urlbutton' , 'post' );
}
2019-03-12 09:27:46 +00:00
$url = '' ;
2019-04-16 19:56:22 +00:00
if ( $url_type == 'file' ) {
2019-03-12 09:27:46 +00:00
$url = $file ;
2019-04-16 19:56:22 +00:00
} elseif ( $url_type == 'post' ) {
2019-03-12 09:27:46 +00:00
$url = $link ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
return "
2019-04-16 19:56:22 +00:00
< input type = 'text' class = 'text urlfield' name = 'attachments[$post->ID][url]' value = '" . esc_attr( $url ) . "' />< br />
< button type = 'button' class = 'button urlnone' data - link - url = '' > " . __( 'None' ) . " </ button >
< button type = 'button' class = 'button urlfile' data - link - url = '" . esc_attr( $file ) . "' > " . __( 'File URL' ) . " </ button >
< button type = 'button' class = 'button urlpost' data - link - url = '" . esc_attr( $link ) . "' > " . __( 'Attachment Post URL' ) . '</button>
' ;
2019-03-12 09:27:46 +00:00
}
/**
* Output a textarea element for inputting an attachment caption .
*
* @ since 3.4 . 0
*
* @ param WP_Post $edit_post Attachment WP_Post object .
* @ return string HTML markup for the textarea element .
*/
2019-04-16 19:56:22 +00:00
function wp_caption_input_textarea ( $edit_post ) {
2019-03-12 09:27:46 +00:00
// Post data is already escaped.
$name = " attachments[ { $edit_post -> ID } ][post_excerpt] " ;
return '<textarea name="' . $name . '" id="' . $name . '">' . $edit_post -> post_excerpt . '</textarea>' ;
}
/**
* Retrieves the image attachment fields to edit form fields .
*
* @ since 2.5 . 0
*
* @ param array $form_fields
* @ param object $post
* @ return array
*/
2019-04-16 19:56:22 +00:00
function image_attachment_fields_to_edit ( $form_fields , $post ) {
2019-03-12 09:27:46 +00:00
return $form_fields ;
}
/**
* Retrieves the single non - image attachment fields to edit form fields .
*
* @ since 2.5 . 0
*
* @ param array $form_fields An array of attachment form fields .
* @ param WP_Post $post The WP_Post attachment object .
* @ return array Filtered attachment form fields .
*/
function media_single_attachment_fields_to_edit ( $form_fields , $post ) {
2019-04-16 19:56:22 +00:00
unset ( $form_fields [ 'url' ], $form_fields [ 'align' ], $form_fields [ 'image-size' ] );
2019-03-12 09:27:46 +00:00
return $form_fields ;
}
/**
* Retrieves the post non - image attachment fields to edito form fields .
*
* @ since 2.8 . 0
*
* @ param array $form_fields An array of attachment form fields .
* @ param WP_Post $post The WP_Post attachment object .
* @ return array Filtered attachment form fields .
*/
function media_post_single_attachment_fields_to_edit ( $form_fields , $post ) {
2019-04-16 19:56:22 +00:00
unset ( $form_fields [ 'image_url' ] );
2019-03-12 09:27:46 +00:00
return $form_fields ;
}
/**
* Filters input from media_upload_form_handler () and assigns a default
* post_title from the file name if none supplied .
*
* Illustrates the use of the { @ see 'attachment_fields_to_save' } filter
* which can be used to add default values to any field before saving to DB .
*
* @ since 2.5 . 0
*
* @ param array $post The WP_Post attachment object converted to an array .
* @ param array $attachment An array of attachment metadata .
* @ return array Filtered attachment post object .
*/
function image_attachment_fields_to_save ( $post , $attachment ) {
if ( substr ( $post [ 'post_mime_type' ], 0 , 5 ) == 'image' ) {
if ( strlen ( trim ( $post [ 'post_title' ] ) ) == 0 ) {
2019-04-16 19:56:22 +00:00
$attachment_url = ( isset ( $post [ 'attachment_url' ] ) ) ? $post [ 'attachment_url' ] : $post [ 'guid' ];
$post [ 'post_title' ] = preg_replace ( '/\.\w+$/' , '' , wp_basename ( $attachment_url ) );
2019-03-12 09:27:46 +00:00
$post [ 'errors' ][ 'post_title' ][ 'errors' ][] = __ ( 'Empty Title filled from filename.' );
}
}
return $post ;
}
/**
* Retrieves the media element HTML to send to the editor .
*
* @ since 2.5 . 0
*
* @ param string $html
* @ param integer $attachment_id
* @ param array $attachment
* @ return string
*/
2019-04-16 19:56:22 +00:00
function image_media_send_to_editor ( $html , $attachment_id , $attachment ) {
$post = get_post ( $attachment_id );
if ( substr ( $post -> post_mime_type , 0 , 5 ) == 'image' ) {
$url = $attachment [ 'url' ];
$align = ! empty ( $attachment [ 'align' ] ) ? $attachment [ 'align' ] : 'none' ;
$size = ! empty ( $attachment [ 'image-size' ] ) ? $attachment [ 'image-size' ] : 'medium' ;
$alt = ! empty ( $attachment [ 'image_alt' ] ) ? $attachment [ 'image_alt' ] : '' ;
$rel = ( strpos ( $url , 'attachment_id' ) || $url === get_attachment_link ( $attachment_id ) );
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
return get_image_send_to_editor ( $attachment_id , $attachment [ 'post_excerpt' ], $attachment [ 'post_title' ], $align , $url , $rel , $size , $alt );
2019-03-12 09:27:46 +00:00
}
return $html ;
}
/**
* Retrieves the attachment fields to edit form fields .
*
* @ since 2.5 . 0
*
* @ param WP_Post $post
* @ param array $errors
* @ return array
*/
2019-04-16 19:56:22 +00:00
function get_attachment_fields_to_edit ( $post , $errors = null ) {
if ( is_int ( $post ) ) {
$post = get_post ( $post );
}
if ( is_array ( $post ) ) {
2019-03-12 09:27:46 +00:00
$post = new WP_Post ( ( object ) $post );
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$image_url = wp_get_attachment_url ( $post -> ID );
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$edit_post = sanitize_post ( $post , 'edit' );
2019-03-12 09:27:46 +00:00
$form_fields = array (
'post_title' => array (
2019-04-16 19:56:22 +00:00
'label' => __ ( 'Title' ),
'value' => $edit_post -> post_title ,
2019-03-12 09:27:46 +00:00
),
2019-04-16 19:56:22 +00:00
'image_alt' => array (),
2019-03-12 09:27:46 +00:00
'post_excerpt' => array (
2019-04-16 19:56:22 +00:00
'label' => __ ( 'Caption' ),
'input' => 'html' ,
'html' => wp_caption_input_textarea ( $edit_post ),
2019-03-12 09:27:46 +00:00
),
'post_content' => array (
2019-04-16 19:56:22 +00:00
'label' => __ ( 'Description' ),
'value' => $edit_post -> post_content ,
'input' => 'textarea' ,
2019-03-12 09:27:46 +00:00
),
'url' => array (
2019-04-16 19:56:22 +00:00
'label' => __ ( 'Link URL' ),
'input' => 'html' ,
'html' => image_link_input_fields ( $post , get_option ( 'image_default_link_type' ) ),
'helps' => __ ( 'Enter a link URL or click above for presets.' ),
2019-03-12 09:27:46 +00:00
),
'menu_order' => array (
2019-04-16 19:56:22 +00:00
'label' => __ ( 'Order' ),
'value' => $edit_post -> menu_order ,
),
'image_url' => array (
'label' => __ ( 'File URL' ),
'input' => 'html' ,
'html' => " <input type='text' class='text urlfield' readonly='readonly' name='attachments[ $post->ID ][url]' value=' " . esc_attr ( $image_url ) . " ' /><br /> " ,
'value' => wp_get_attachment_url ( $post -> ID ),
'helps' => __ ( 'Location of the uploaded file.' ),
2019-03-12 09:27:46 +00:00
),
);
2019-04-16 19:56:22 +00:00
foreach ( get_attachment_taxonomies ( $post ) as $taxonomy ) {
$t = ( array ) get_taxonomy ( $taxonomy );
if ( ! $t [ 'public' ] || ! $t [ 'show_ui' ] ) {
2019-03-12 09:27:46 +00:00
continue ;
2019-04-16 19:56:22 +00:00
}
if ( empty ( $t [ 'label' ] ) ) {
2019-03-12 09:27:46 +00:00
$t [ 'label' ] = $taxonomy ;
2019-04-16 19:56:22 +00:00
}
if ( empty ( $t [ 'args' ] ) ) {
2019-03-12 09:27:46 +00:00
$t [ 'args' ] = array ();
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$terms = get_object_term_cache ( $post -> ID , $taxonomy );
if ( false === $terms ) {
$terms = wp_get_object_terms ( $post -> ID , $taxonomy , $t [ 'args' ] );
}
2019-03-12 09:27:46 +00:00
$values = array ();
2019-04-16 19:56:22 +00:00
foreach ( $terms as $term ) {
2019-03-12 09:27:46 +00:00
$values [] = $term -> slug ;
2019-04-16 19:56:22 +00:00
}
$t [ 'value' ] = join ( ', ' , $values );
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$form_fields [ $taxonomy ] = $t ;
2019-03-12 09:27:46 +00:00
}
// Merge default fields with their errors, so any key passed with the error (e.g. 'error', 'helps', 'value') will replace the default
// The recursive merge is easily traversed with array casting: foreach ( (array) $things as $thing )
2019-04-16 19:56:22 +00:00
$form_fields = array_merge_recursive ( $form_fields , ( array ) $errors );
2019-03-12 09:27:46 +00:00
// This was formerly in image_attachment_fields_to_edit().
2019-04-16 19:56:22 +00:00
if ( substr ( $post -> post_mime_type , 0 , 5 ) == 'image' ) {
$alt = get_post_meta ( $post -> ID , '_wp_attachment_image_alt' , true );
if ( empty ( $alt ) ) {
2019-03-12 09:27:46 +00:00
$alt = '' ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
$form_fields [ 'post_title' ][ 'required' ] = true ;
$form_fields [ 'image_alt' ] = array (
'value' => $alt ,
2019-04-16 19:56:22 +00:00
'label' => __ ( 'Alternative Text' ),
'helps' => __ ( 'Alt text for the image, e.g. “The Mona Lisa”' ),
2019-03-12 09:27:46 +00:00
);
$form_fields [ 'align' ] = array (
2019-04-16 19:56:22 +00:00
'label' => __ ( 'Alignment' ),
2019-03-12 09:27:46 +00:00
'input' => 'html' ,
2019-04-16 19:56:22 +00:00
'html' => image_align_input_fields ( $post , get_option ( 'image_default_align' ) ),
2019-03-12 09:27:46 +00:00
);
2019-04-16 19:56:22 +00:00
$form_fields [ 'image-size' ] = image_size_input_fields ( $post , get_option ( 'image_default_size' , 'medium' ) );
2019-03-12 09:27:46 +00:00
} else {
unset ( $form_fields [ 'image_alt' ] );
}
/**
* Filters the attachment fields to edit .
*
* @ since 2.5 . 0
*
* @ param array $form_fields An array of attachment form fields .
* @ param WP_Post $post The WP_Post attachment object .
*/
$form_fields = apply_filters ( 'attachment_fields_to_edit' , $form_fields , $post );
return $form_fields ;
}
/**
* Retrieve HTML for media items of post gallery .
*
* The HTML markup retrieved will be created for the progress of SWF Upload
* component . Will also create link for showing and hiding the form to modify
* the image attachment .
*
* @ since 2.5 . 0
*
* @ global WP_Query $wp_the_query
*
* @ param int $post_id Optional . Post ID .
* @ param array $errors Errors for attachment , if any .
* @ return string
*/
function get_media_items ( $post_id , $errors ) {
$attachments = array ();
if ( $post_id ) {
2019-04-16 19:56:22 +00:00
$post = get_post ( $post_id );
if ( $post && $post -> post_type == 'attachment' ) {
$attachments = array ( $post -> ID => $post );
} else {
$attachments = get_children (
array (
'post_parent' => $post_id ,
'post_type' => 'attachment' ,
'orderby' => 'menu_order ASC, ID' ,
'order' => 'DESC' ,
)
);
}
2019-03-12 09:27:46 +00:00
} else {
2019-04-16 19:56:22 +00:00
if ( is_array ( $GLOBALS [ 'wp_the_query' ] -> posts ) ) {
foreach ( $GLOBALS [ 'wp_the_query' ] -> posts as $attachment ) {
$attachments [ $attachment -> ID ] = $attachment ;
}
}
2019-03-12 09:27:46 +00:00
}
$output = '' ;
foreach ( ( array ) $attachments as $id => $attachment ) {
2019-04-16 19:56:22 +00:00
if ( $attachment -> post_status == 'trash' ) {
2019-03-12 09:27:46 +00:00
continue ;
2019-04-16 19:56:22 +00:00
}
if ( $item = get_media_item ( $id , array ( 'errors' => isset ( $errors [ $id ] ) ? $errors [ $id ] : null ) ) ) {
2019-03-12 09:27:46 +00:00
$output .= " \n <div id='media-item- $id ' class='media-item child-of- $attachment->post_parent preloaded'><div class='progress hidden'><div class='bar'></div></div><div id='media-upload-error- $id ' class='hidden'></div><div class='filename hidden'></div> $item\n </div> " ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
}
return $output ;
}
/**
* Retrieve HTML form for modifying the image attachment .
*
* @ since 2.5 . 0
*
* @ global string $redir_tab
*
* @ param int $attachment_id Attachment ID for modification .
* @ param string | array $args Optional . Override defaults .
* @ return string HTML form for attachment .
*/
function get_media_item ( $attachment_id , $args = null ) {
global $redir_tab ;
2019-04-16 19:56:22 +00:00
if ( ( $attachment_id = intval ( $attachment_id ) ) && $thumb_url = wp_get_attachment_image_src ( $attachment_id , 'thumbnail' , true ) ) {
2019-03-12 09:27:46 +00:00
$thumb_url = $thumb_url [ 0 ];
2019-04-16 19:56:22 +00:00
} else {
2019-03-12 09:27:46 +00:00
$thumb_url = false ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$post = get_post ( $attachment_id );
$current_post_id = ! empty ( $_GET [ 'post_id' ] ) ? ( int ) $_GET [ 'post_id' ] : 0 ;
2019-03-12 09:27:46 +00:00
$default_args = array (
2019-04-16 19:56:22 +00:00
'errors' => null ,
'send' => $current_post_id ? post_type_supports ( get_post_type ( $current_post_id ), 'editor' ) : true ,
'delete' => true ,
'toggle' => true ,
'show_title' => true ,
2019-03-12 09:27:46 +00:00
);
2019-04-16 19:56:22 +00:00
$args = wp_parse_args ( $args , $default_args );
2019-03-12 09:27:46 +00:00
/**
* Filters the arguments used to retrieve an image for the edit image form .
*
* @ since 3.1 . 0
*
* @ see get_media_item
*
* @ param array $args An array of arguments .
*/
$r = apply_filters ( 'get_media_item_args' , $args );
$toggle_on = __ ( 'Show' );
$toggle_off = __ ( 'Hide' );
2019-04-16 19:56:22 +00:00
$file = get_attached_file ( $post -> ID );
2019-03-12 09:27:46 +00:00
$filename = esc_html ( wp_basename ( $file ) );
2019-04-16 19:56:22 +00:00
$title = esc_attr ( $post -> post_title );
2019-03-12 09:27:46 +00:00
$post_mime_types = get_post_mime_types ();
2019-04-16 19:56:22 +00:00
$keys = array_keys ( wp_match_mime_types ( array_keys ( $post_mime_types ), $post -> post_mime_type ) );
$type = reset ( $keys );
$type_html = " <input type='hidden' id='type-of- $attachment_id ' value=' " . esc_attr ( $type ) . " ' /> " ;
2019-03-12 09:27:46 +00:00
$form_fields = get_attachment_fields_to_edit ( $post , $r [ 'errors' ] );
if ( $r [ 'toggle' ] ) {
2019-04-16 19:56:22 +00:00
$class = empty ( $r [ 'errors' ] ) ? 'startclosed' : 'startopen' ;
2019-03-12 09:27:46 +00:00
$toggle_links = "
< a class = 'toggle describe-toggle-on' href = '#' > $toggle_on </ a >
< a class = 'toggle describe-toggle-off' href = '#' > $toggle_off </ a > " ;
} else {
2019-04-16 19:56:22 +00:00
$class = '' ;
2019-03-12 09:27:46 +00:00
$toggle_links = '' ;
}
2019-04-16 19:56:22 +00:00
$display_title = ( ! empty ( $title ) ) ? $title : $filename ; // $title shouldn't ever be empty, but just in case
$display_title = $r [ 'show_title' ] ? " <div class='filename new'><span class='title'> " . wp_html_excerpt ( $display_title , 60 , '…' ) . '</span></div>' : '' ;
2019-03-12 09:27:46 +00:00
$gallery = ( ( isset ( $_REQUEST [ 'tab' ] ) && 'gallery' == $_REQUEST [ 'tab' ] ) || ( isset ( $redir_tab ) && 'gallery' == $redir_tab ) );
2019-04-16 19:56:22 +00:00
$order = '' ;
2019-03-12 09:27:46 +00:00
foreach ( $form_fields as $key => $val ) {
if ( 'menu_order' == $key ) {
2019-04-16 19:56:22 +00:00
if ( $gallery ) {
$order = " <div class='menu_order'> <input class='menu_order_input' type='text' id='attachments[ $attachment_id ][menu_order]' name='attachments[ $attachment_id ][menu_order]' value=' " . esc_attr ( $val [ 'value' ] ) . " ' /></div> " ;
} else {
2019-03-12 09:27:46 +00:00
$order = " <input type='hidden' name='attachments[ $attachment_id ][menu_order]' value=' " . esc_attr ( $val [ 'value' ] ) . " ' /> " ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
unset ( $form_fields [ 'menu_order' ] );
break ;
}
}
$media_dims = '' ;
2019-04-16 19:56:22 +00:00
$meta = wp_get_attachment_metadata ( $post -> ID );
if ( isset ( $meta [ 'width' ], $meta [ 'height' ] ) ) {
2019-03-12 09:27:46 +00:00
$media_dims .= " <span id='media-dims- $post->ID '> { $meta [ 'width' ] } × { $meta [ 'height' ] } </span> " ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
/**
* Filters the media metadata .
*
* @ since 2.5 . 0
*
* @ param string $media_dims The HTML markup containing the media dimensions .
* @ param WP_Post $post The WP_Post attachment object .
*/
$media_dims = apply_filters ( 'media_meta' , $media_dims , $post );
$image_edit_button = '' ;
if ( wp_attachment_is_image ( $post -> ID ) && wp_image_editor_supports ( array ( 'mime_type' => $post -> post_mime_type ) ) ) {
2019-04-16 19:56:22 +00:00
$nonce = wp_create_nonce ( " image_editor- $post->ID " );
2019-03-12 09:27:46 +00:00
$image_edit_button = " <input type='button' id='imgedit-open-btn- $post->ID ' onclick='imageEdit.open( $post->ID , \" $nonce\ " ) ' class=' button ' value=' " . esc_attr__( 'Edit Image' ) . " ' /> <span class=' spinner ' ></ span > " ;
}
$attachment_url = get_permalink ( $attachment_id );
$item = "
$type_html
$toggle_links
$order
$display_title
< table class = 'slidetoggle describe $class' >
< thead class = 'media-item-info' id = 'media-head-$post->ID' >
< tr >
< td class = 'A1B1' id = 'thumbnail-head-$post->ID' >
< p >< a href = '$attachment_url' target = '_blank' >< img class = 'thumbnail' src = '$thumb_url' alt = '' /></ a ></ p >
< p > $image_edit_button </ p >
</ td >
< td >
2019-04-16 19:56:22 +00:00
< p >< strong > " . __( 'File name:' ) . " </ strong > $filename </ p >
< p >< strong > " . __( 'File type:' ) . " </ strong > $post -> post_mime_type </ p >
< p >< strong > " . __( 'Upload date:' ) . '</strong> ' . mysql2date( __( 'F j, Y' ), $post->post_date ) . '</p>';
if ( ! empty ( $media_dims ) ) {
$item .= '<p><strong>' . __ ( 'Dimensions:' ) . " </strong> $media_dims </p> \n " ;
}
2019-03-12 09:27:46 +00:00
$item .= " </td></tr> \n " ;
$item .= "
</ thead >
< tbody >
< tr >< td colspan = '2' class = 'imgedit-response' id = 'imgedit-response-$post->ID' ></ td ></ tr > \n
< tr >< td style = 'display:none' colspan = '2' class = 'image-editor' id = 'image-editor-$post->ID' ></ td ></ tr > \n
< tr >< td colspan = '2' >< p class = 'media-types media-types-required-info' > " . sprintf( __( 'Required fields are marked %s' ), '<span class= " required " >*</span>' ) . " </ p ></ td ></ tr > \n " ;
$defaults = array (
'input' => 'text' ,
'required' => false ,
'value' => '' ,
'extra_rows' => array (),
);
if ( $r [ 'send' ] ) {
$r [ 'send' ] = get_submit_button ( __ ( 'Insert into Post' ), '' , " send[ $attachment_id ] " , false );
}
$delete = empty ( $r [ 'delete' ] ) ? '' : $r [ 'delete' ];
if ( $delete && current_user_can ( 'delete_post' , $attachment_id ) ) {
2019-04-16 19:56:22 +00:00
if ( ! EMPTY_TRASH_DAYS ) {
2019-03-12 09:27:46 +00:00
$delete = " <a href=' " . wp_nonce_url ( " post.php?action=delete&post= $attachment_id " , 'delete-post_' . $attachment_id ) . " ' id='del[ $attachment_id ]' class='delete-permanently'> " . __ ( 'Delete Permanently' ) . '</a>' ;
2019-04-16 19:56:22 +00:00
} elseif ( ! MEDIA_TRASH ) {
2019-03-12 09:27:46 +00:00
$delete = " <a href='#' class='del-link' onclick= \" document.getElementById('del_attachment_ $attachment_id ').style.display='block';return false; \" > " . __ ( 'Delete' ) . " </a>
2019-04-16 19:56:22 +00:00
< div id = 'del_attachment_$attachment_id' class = 'del-attachment' style = 'display:none;' > " .
/* translators: %s: file name */
'<p>' . sprintf ( __ ( 'You are about to delete %s.' ), '<strong>' . $filename . '</strong>' ) . " </p>
< a href = '" . wp_nonce_url( "post.php?action=delete&post=$attachment_id", ' delete - post_ ' . $attachment_id ) . "' id = 'del[$attachment_id]' class = 'button' > " . __( 'Continue' ) . " </ a >
< a href = '#' class = 'button' onclick = \ " this.parentNode.style.display='none';return false; \" > " . __ ( 'Cancel' ) . ' </ a >
</ div > ' ;
2019-03-12 09:27:46 +00:00
} else {
$delete = " <a href=' " . wp_nonce_url ( " post.php?action=trash&post= $attachment_id " , 'trash-post_' . $attachment_id ) . " ' id='del[ $attachment_id ]' class='delete'> " . __ ( 'Move to Trash' ) . " </a>
2019-04-16 19:56:22 +00:00
< a href = '" . wp_nonce_url( "post.php?action=untrash&post=$attachment_id", ' untrash - post_ ' . $attachment_id ) . "' id = 'undo[$attachment_id]' class = 'undo hidden' > " . __( 'Undo' ) . '</a>';
2019-03-12 09:27:46 +00:00
}
} else {
$delete = '' ;
}
2019-04-16 19:56:22 +00:00
$thumbnail = '' ;
2019-03-12 09:27:46 +00:00
$calling_post_id = 0 ;
if ( isset ( $_GET [ 'post_id' ] ) ) {
$calling_post_id = absint ( $_GET [ 'post_id' ] );
} elseif ( isset ( $_POST ) && count ( $_POST ) ) { // Like for async-upload where $_GET['post_id'] isn't set
$calling_post_id = $post -> post_parent ;
}
if ( 'image' == $type && $calling_post_id && current_theme_supports ( 'post-thumbnails' , get_post_type ( $calling_post_id ) )
&& post_type_supports ( get_post_type ( $calling_post_id ), 'thumbnail' ) && get_post_thumbnail_id ( $calling_post_id ) != $attachment_id ) {
2019-04-16 19:56:22 +00:00
$calling_post = get_post ( $calling_post_id );
2019-03-12 09:27:46 +00:00
$calling_post_type_object = get_post_type_object ( $calling_post -> post_type );
$ajax_nonce = wp_create_nonce ( " set_post_thumbnail- $calling_post_id " );
2019-04-16 19:56:22 +00:00
$thumbnail = " <a class='wp-post-thumbnail' id='wp-post-thumbnail- " . $attachment_id . " ' href='#' onclick='WPSetAsThumbnail( \" $attachment_id\ " , \ " $ajax_nonce\ " ); return false ; '>" . esc_html( $calling_post_type_object->labels->use_featured_image ) . ' </ a > ' ;
2019-03-12 09:27:46 +00:00
}
2019-04-16 19:56:22 +00:00
if ( ( $r [ 'send' ] || $thumbnail || $delete ) && ! isset ( $form_fields [ 'buttons' ] ) ) {
2019-03-12 09:27:46 +00:00
$form_fields [ 'buttons' ] = array ( 'tr' => " \t \t <tr class='submit'><td></td><td class='savesend'> " . $r [ 'send' ] . " $thumbnail $delete </td></tr> \n " );
}
$hidden_fields = array ();
foreach ( $form_fields as $id => $field ) {
2019-04-16 19:56:22 +00:00
if ( $id [ 0 ] == '_' ) {
2019-03-12 09:27:46 +00:00
continue ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( ! empty ( $field [ 'tr' ] ) ) {
2019-03-12 09:27:46 +00:00
$item .= $field [ 'tr' ];
continue ;
}
$field = array_merge ( $defaults , $field );
2019-04-16 19:56:22 +00:00
$name = " attachments[ $attachment_id ][ $id ] " ;
2019-03-12 09:27:46 +00:00
if ( $field [ 'input' ] == 'hidden' ) {
2019-04-16 19:56:22 +00:00
$hidden_fields [ $name ] = $field [ 'value' ];
2019-03-12 09:27:46 +00:00
continue ;
}
$required = $field [ 'required' ] ? '<span class="required">*</span>' : '' ;
$required_attr = $field [ 'required' ] ? ' required' : '' ;
2019-04-16 19:56:22 +00:00
$class = $id ;
$class .= $field [ 'required' ] ? ' form-required' : '' ;
2019-03-12 09:27:46 +00:00
$item .= " \t \t <tr class=' $class '> \n \t \t \t <th scope='row' class='label'><label for=' $name '><span class='alignleft'> { $field [ 'label' ] } { $required } </span><br class='clear' /></label></th> \n \t \t \t <td class='field'> " ;
2019-04-16 19:56:22 +00:00
if ( ! empty ( $field [ $field [ 'input' ] ] ) ) {
2019-03-12 09:27:46 +00:00
$item .= $field [ $field [ 'input' ] ];
2019-04-16 19:56:22 +00:00
} elseif ( $field [ 'input' ] == 'textarea' ) {
2019-03-12 09:27:46 +00:00
if ( 'post_content' == $id && user_can_richedit () ) {
// Sanitize_post() skips the post_content when user_can_richedit.
$field [ 'value' ] = htmlspecialchars ( $field [ 'value' ], ENT_QUOTES );
}
// Post_excerpt is already escaped by sanitize_post() in get_attachment_fields_to_edit().
2019-04-16 19:56:22 +00:00
$item .= " <textarea id=' $name ' name=' $name ' { $required_attr } > " . $field [ 'value' ] . '</textarea>' ;
2019-03-12 09:27:46 +00:00
} else {
2019-04-16 19:56:22 +00:00
$item .= " <input type='text' class='text' id=' $name ' name=' $name ' value=' " . esc_attr ( $field [ 'value' ] ) . " ' { $required_attr } /> " ;
2019-03-12 09:27:46 +00:00
}
2019-04-16 19:56:22 +00:00
if ( ! empty ( $field [ 'helps' ] ) ) {
2019-03-12 09:27:46 +00:00
$item .= " <p class='help'> " . join ( " </p> \n <p class='help'> " , array_unique ( ( array ) $field [ 'helps' ] ) ) . '</p>' ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
$item .= " </td> \n \t \t </tr> \n " ;
$extra_rows = array ();
2019-04-16 19:56:22 +00:00
if ( ! empty ( $field [ 'errors' ] ) ) {
foreach ( array_unique ( ( array ) $field [ 'errors' ] ) as $error ) {
2019-03-12 09:27:46 +00:00
$extra_rows [ 'error' ][] = $error ;
2019-04-16 19:56:22 +00:00
}
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( ! empty ( $field [ 'extra_rows' ] ) ) {
foreach ( $field [ 'extra_rows' ] as $class => $rows ) {
foreach ( ( array ) $rows as $html ) {
$extra_rows [ $class ][] = $html ;
}
}
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
foreach ( $extra_rows as $class => $rows ) {
foreach ( $rows as $html ) {
2019-03-12 09:27:46 +00:00
$item .= " \t \t <tr><td></td><td class=' $class '> $html </td></tr> \n " ;
2019-04-16 19:56:22 +00:00
}
}
2019-03-12 09:27:46 +00:00
}
2019-04-16 19:56:22 +00:00
if ( ! empty ( $form_fields [ '_final' ] ) ) {
2019-03-12 09:27:46 +00:00
$item .= " \t \t <tr class='final'><td colspan='2'> { $form_fields [ '_final' ] } </td></tr> \n " ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
$item .= " \t </tbody> \n " ;
$item .= " \t </table> \n " ;
2019-04-16 19:56:22 +00:00
foreach ( $hidden_fields as $name => $value ) {
2019-03-12 09:27:46 +00:00
$item .= " \t <input type='hidden' name=' $name ' id=' $name ' value=' " . esc_attr ( $value ) . " ' /> \n " ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
if ( $post -> post_parent < 1 && isset ( $_REQUEST [ 'post_id' ] ) ) {
2019-04-16 19:56:22 +00:00
$parent = ( int ) $_REQUEST [ 'post_id' ];
2019-03-12 09:27:46 +00:00
$parent_name = " attachments[ $attachment_id ][post_parent] " ;
2019-04-16 19:56:22 +00:00
$item .= " \t <input type='hidden' name=' $parent_name ' id=' $parent_name ' value=' $parent ' /> \n " ;
2019-03-12 09:27:46 +00:00
}
return $item ;
}
/**
* @ since 3.5 . 0
*
* @ param int $attachment_id
* @ param array $args
* @ return array
*/
function get_compat_media_markup ( $attachment_id , $args = null ) {
$post = get_post ( $attachment_id );
$default_args = array (
2019-04-16 19:56:22 +00:00
'errors' => null ,
2019-03-12 09:27:46 +00:00
'in_modal' => false ,
);
$user_can_edit = current_user_can ( 'edit_post' , $attachment_id );
$args = wp_parse_args ( $args , $default_args );
/** This filter is documented in wp-admin/includes/media.php */
$args = apply_filters ( 'get_media_item_args' , $args );
$form_fields = array ();
if ( $args [ 'in_modal' ] ) {
2019-04-16 19:56:22 +00:00
foreach ( get_attachment_taxonomies ( $post ) as $taxonomy ) {
$t = ( array ) get_taxonomy ( $taxonomy );
if ( ! $t [ 'public' ] || ! $t [ 'show_ui' ] ) {
2019-03-12 09:27:46 +00:00
continue ;
2019-04-16 19:56:22 +00:00
}
if ( empty ( $t [ 'label' ] ) ) {
2019-03-12 09:27:46 +00:00
$t [ 'label' ] = $taxonomy ;
2019-04-16 19:56:22 +00:00
}
if ( empty ( $t [ 'args' ] ) ) {
2019-03-12 09:27:46 +00:00
$t [ 'args' ] = array ();
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$terms = get_object_term_cache ( $post -> ID , $taxonomy );
if ( false === $terms ) {
$terms = wp_get_object_terms ( $post -> ID , $taxonomy , $t [ 'args' ] );
}
2019-03-12 09:27:46 +00:00
$values = array ();
2019-04-16 19:56:22 +00:00
foreach ( $terms as $term ) {
2019-03-12 09:27:46 +00:00
$values [] = $term -> slug ;
2019-04-16 19:56:22 +00:00
}
$t [ 'value' ] = join ( ', ' , $values );
2019-03-12 09:27:46 +00:00
$t [ 'taxonomy' ] = true ;
2019-04-16 19:56:22 +00:00
$form_fields [ $taxonomy ] = $t ;
2019-03-12 09:27:46 +00:00
}
}
// Merge default fields with their errors, so any key passed with the error (e.g. 'error', 'helps', 'value') will replace the default
// The recursive merge is easily traversed with array casting: foreach ( (array) $things as $thing )
2019-04-16 19:56:22 +00:00
$form_fields = array_merge_recursive ( $form_fields , ( array ) $args [ 'errors' ] );
2019-03-12 09:27:46 +00:00
/** This filter is documented in wp-admin/includes/media.php */
$form_fields = apply_filters ( 'attachment_fields_to_edit' , $form_fields , $post );
2019-04-16 19:56:22 +00:00
unset (
$form_fields [ 'image-size' ],
$form_fields [ 'align' ],
$form_fields [ 'image_alt' ],
$form_fields [ 'post_title' ],
$form_fields [ 'post_excerpt' ],
$form_fields [ 'post_content' ],
$form_fields [ 'url' ],
$form_fields [ 'menu_order' ],
$form_fields [ 'image_url' ]
);
2019-03-12 09:27:46 +00:00
/** This filter is documented in wp-admin/includes/media.php */
$media_meta = apply_filters ( 'media_meta' , '' , $post );
$defaults = array (
'input' => 'text' ,
'required' => false ,
'value' => '' ,
'extra_rows' => array (),
'show_in_edit' => true ,
'show_in_modal' => true ,
);
$hidden_fields = array ();
$item = '' ;
foreach ( $form_fields as $id => $field ) {
2019-04-16 19:56:22 +00:00
if ( $id [ 0 ] == '_' ) {
2019-03-12 09:27:46 +00:00
continue ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$name = " attachments[ $attachment_id ][ $id ] " ;
2019-03-12 09:27:46 +00:00
$id_attr = " attachments- $attachment_id - $id " ;
2019-04-16 19:56:22 +00:00
if ( ! empty ( $field [ 'tr' ] ) ) {
2019-03-12 09:27:46 +00:00
$item .= $field [ 'tr' ];
continue ;
}
$field = array_merge ( $defaults , $field );
2019-04-16 19:56:22 +00:00
if ( ( ! $field [ 'show_in_edit' ] && ! $args [ 'in_modal' ] ) || ( ! $field [ 'show_in_modal' ] && $args [ 'in_modal' ] ) ) {
2019-03-12 09:27:46 +00:00
continue ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
if ( $field [ 'input' ] == 'hidden' ) {
2019-04-16 19:56:22 +00:00
$hidden_fields [ $name ] = $field [ 'value' ];
2019-03-12 09:27:46 +00:00
continue ;
}
$readonly = ! $user_can_edit && ! empty ( $field [ 'taxonomy' ] ) ? " readonly='readonly' " : '' ;
$required = $field [ 'required' ] ? '<span class="required">*</span>' : '' ;
$required_attr = $field [ 'required' ] ? ' required' : '' ;
2019-04-16 19:56:22 +00:00
$class = 'compat-field-' . $id ;
$class .= $field [ 'required' ] ? ' form-required' : '' ;
2019-03-12 09:27:46 +00:00
$item .= " \t \t <tr class=' $class '> " ;
$item .= " \t \t \t <th scope='row' class='label'><label for=' $id_attr '><span class='alignleft'> { $field [ 'label' ] } </span> $required <br class='clear' /></label> " ;
$item .= " </th> \n \t \t \t <td class='field'> " ;
2019-04-16 19:56:22 +00:00
if ( ! empty ( $field [ $field [ 'input' ] ] ) ) {
2019-03-12 09:27:46 +00:00
$item .= $field [ $field [ 'input' ] ];
2019-04-16 19:56:22 +00:00
} elseif ( $field [ 'input' ] == 'textarea' ) {
2019-03-12 09:27:46 +00:00
if ( 'post_content' == $id && user_can_richedit () ) {
// sanitize_post() skips the post_content when user_can_richedit.
$field [ 'value' ] = htmlspecialchars ( $field [ 'value' ], ENT_QUOTES );
}
2019-04-16 19:56:22 +00:00
$item .= " <textarea id=' $id_attr ' name=' $name ' { $required_attr } > " . $field [ 'value' ] . '</textarea>' ;
2019-03-12 09:27:46 +00:00
} else {
2019-04-16 19:56:22 +00:00
$item .= " <input type='text' class='text' id=' $id_attr ' name=' $name ' value=' " . esc_attr ( $field [ 'value' ] ) . " ' $readonly { $required_attr } /> " ;
2019-03-12 09:27:46 +00:00
}
2019-04-16 19:56:22 +00:00
if ( ! empty ( $field [ 'helps' ] ) ) {
2019-03-12 09:27:46 +00:00
$item .= " <p class='help'> " . join ( " </p> \n <p class='help'> " , array_unique ( ( array ) $field [ 'helps' ] ) ) . '</p>' ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
$item .= " </td> \n \t \t </tr> \n " ;
$extra_rows = array ();
2019-04-16 19:56:22 +00:00
if ( ! empty ( $field [ 'errors' ] ) ) {
foreach ( array_unique ( ( array ) $field [ 'errors' ] ) as $error ) {
2019-03-12 09:27:46 +00:00
$extra_rows [ 'error' ][] = $error ;
2019-04-16 19:56:22 +00:00
}
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( ! empty ( $field [ 'extra_rows' ] ) ) {
foreach ( $field [ 'extra_rows' ] as $class => $rows ) {
foreach ( ( array ) $rows as $html ) {
$extra_rows [ $class ][] = $html ;
}
}
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
foreach ( $extra_rows as $class => $rows ) {
foreach ( $rows as $html ) {
2019-03-12 09:27:46 +00:00
$item .= " \t \t <tr><td></td><td class=' $class '> $html </td></tr> \n " ;
2019-04-16 19:56:22 +00:00
}
}
2019-03-12 09:27:46 +00:00
}
2019-04-16 19:56:22 +00:00
if ( ! empty ( $form_fields [ '_final' ] ) ) {
2019-03-12 09:27:46 +00:00
$item .= " \t \t <tr class='final'><td colspan='2'> { $form_fields [ '_final' ] } </td></tr> \n " ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
if ( $item ) {
$item = '<p class="media-types media-types-required-info">' .
sprintf ( __ ( 'Required fields are marked %s' ), '<span class="required">*</span>' ) . ' </ p >
< table class = " compat-attachment-fields " > ' . $item . ' </ table > ' ;
}
foreach ( $hidden_fields as $hidden_field => $value ) {
$item .= '<input type="hidden" name="' . esc_attr ( $hidden_field ) . '" value="' . esc_attr ( $value ) . '" />' . " \n " ;
}
2019-04-16 19:56:22 +00:00
if ( $item ) {
2019-03-12 09:27:46 +00:00
$item = '<input type="hidden" name="attachments[' . $attachment_id . '][menu_order]" value="' . esc_attr ( $post -> menu_order ) . '" />' . $item ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
return array (
2019-04-16 19:56:22 +00:00
'item' => $item ,
'meta' => $media_meta ,
2019-03-12 09:27:46 +00:00
);
}
/**
* Outputs the legacy media upload header .
*
* @ since 2.5 . 0
*/
function media_upload_header () {
$post_id = isset ( $_REQUEST [ 'post_id' ] ) ? intval ( $_REQUEST [ 'post_id' ] ) : 0 ;
echo '<script type="text/javascript">post_id = ' . $post_id . ';</script>' ;
if ( empty ( $_GET [ 'chromeless' ] ) ) {
echo '<div id="media-upload-header">' ;
the_media_upload_tabs ();
echo '</div>' ;
}
}
/**
* Outputs the legacy media upload form .
*
* @ since 2.5 . 0
*
* @ global string $type
* @ global string $tab
* @ global bool $is_IE
* @ global bool $is_opera
*
* @ param array $errors
*/
function media_upload_form ( $errors = null ) {
global $type , $tab , $is_IE , $is_opera ;
if ( ! _device_can_upload () ) {
2019-04-16 19:56:22 +00:00
echo '<p>' . sprintf ( __ ( 'The web browser on your device cannot be used to upload files. You may be able to use the <a href="%s">native app for your device</a> instead.' ), 'https://apps.wordpress.org/' ) . '</p>' ;
2019-03-12 09:27:46 +00:00
return ;
}
2019-04-16 19:56:22 +00:00
$upload_action_url = admin_url ( 'async-upload.php' );
$post_id = isset ( $_REQUEST [ 'post_id' ] ) ? intval ( $_REQUEST [ 'post_id' ] ) : 0 ;
$_type = isset ( $type ) ? $type : '' ;
$_tab = isset ( $tab ) ? $tab : '' ;
2019-03-12 09:27:46 +00:00
$max_upload_size = wp_max_upload_size ();
if ( ! $max_upload_size ) {
$max_upload_size = 0 ;
}
2019-04-16 19:56:22 +00:00
?>
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
< div id = " media-upload-notice " >
< ? php
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( isset ( $errors [ 'upload_notice' ] ) ) {
2019-03-12 09:27:46 +00:00
echo $errors [ 'upload_notice' ];
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
?>
</ div >
< div id = " media-upload-error " >
< ? php
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( isset ( $errors [ 'upload_error' ] ) && is_wp_error ( $errors [ 'upload_error' ] ) ) {
2019-03-12 09:27:46 +00:00
echo $errors [ 'upload_error' ] -> get_error_message ();
2019-04-16 19:56:22 +00:00
}
?>
</ div >
< ? php
if ( is_multisite () && ! is_upload_space_available () ) {
/**
* Fires when an upload will exceed the defined upload space quota for a network site .
*
* @ since 3.5 . 0
*/
do_action ( 'upload_ui_over_quota' );
return ;
}
2019-03-12 09:27:46 +00:00
/**
2019-04-16 19:56:22 +00:00
* Fires just before the legacy ( pre - 3.5 . 0 ) upload interface is loaded .
2019-03-12 09:27:46 +00:00
*
2019-04-16 19:56:22 +00:00
* @ since 2.6 . 0
2019-03-12 09:27:46 +00:00
*/
2019-04-16 19:56:22 +00:00
do_action ( 'pre-upload-ui' );
$post_params = array (
'post_id' => $post_id ,
'_wpnonce' => wp_create_nonce ( 'media-form' ),
'type' => $_type ,
'tab' => $_tab ,
'short' => '1' ,
);
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
/**
* Filters the media upload post parameters .
*
* @ since 3.1 . 0 As 'swfupload_post_params'
* @ since 3.3 . 0
*
* @ param array $post_params An array of media upload parameters used by Plupload .
*/
$post_params = apply_filters ( 'upload_post_params' , $post_params );
/*
* Since 4.9 the `runtimes` setting is hardcoded in our version of Plupload to `html5,html4` ,
* and the `flash_swf_url` and `silverlight_xap_url` are not used .
*/
$plupload_init = array (
'browse_button' => 'plupload-browse-button' ,
'container' => 'plupload-upload-ui' ,
'drop_element' => 'drag-drop-area' ,
'file_data_name' => 'async-upload' ,
'url' => $upload_action_url ,
'filters' => array (
'max_file_size' => $max_upload_size . 'b' ,
),
'multipart_params' => $post_params ,
);
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
// Currently only iOS Safari supports multiple files uploading but iOS 7.x has a bug that prevents uploading of videos
// when enabled. See #29602.
if ( wp_is_mobile () && strpos ( $_SERVER [ 'HTTP_USER_AGENT' ], 'OS 7_' ) !== false &&
2019-03-12 09:27:46 +00:00
strpos ( $_SERVER [ 'HTTP_USER_AGENT' ], 'like Mac OS X' ) !== false ) {
2019-04-16 19:56:22 +00:00
$plupload_init [ 'multi_selection' ] = false ;
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
/**
* Filters the default Plupload settings .
*
* @ since 3.3 . 0
*
* @ param array $plupload_init An array of default settings used by Plupload .
*/
$plupload_init = apply_filters ( 'plupload_init' , $plupload_init );
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
?>
2019-03-12 09:27:46 +00:00
< script type = " text/javascript " >
2019-04-16 19:56:22 +00:00
< ? php
// Verify size is an int. If not return default value.
$large_size_h = absint ( get_option ( 'large_size_h' ) );
if ( ! $large_size_h ) {
$large_size_h = 1024 ;
}
$large_size_w = absint ( get_option ( 'large_size_w' ) );
if ( ! $large_size_w ) {
$large_size_w = 1024 ;
}
?>
2019-03-12 09:27:46 +00:00
var resize_height = < ? php echo $large_size_h ; ?> , resize_width = <?php echo $large_size_w; ?>,
wpUploaderInit = < ? php echo wp_json_encode ( $plupload_init ); ?> ;
</ script >
< div id = " plupload-upload-ui " class = " hide-if-no-js " >
2019-04-16 19:56:22 +00:00
< ? php
/**
* Fires before the upload interface loads .
*
* @ since 2.6 . 0 As 'pre-flash-upload-ui'
* @ since 3.3 . 0
*/
do_action ( 'pre-plupload-upload-ui' );
?>
2019-03-12 09:27:46 +00:00
< div id = " drag-drop-area " >
< div class = " drag-drop-inside " >
2019-04-16 19:56:22 +00:00
< p class = " drag-drop-info " >< ? php _e ( 'Drop files here' ); ?> </p>
< p >< ? php _ex ( 'or' , 'Uploader: Drop files here - or - Select Files' ); ?> </p>
< p class = " drag-drop-buttons " >< input id = " plupload-browse-button " type = " button " value = " <?php esc_attr_e( 'Select Files' ); ?> " class = " button " /></ p >
2019-03-12 09:27:46 +00:00
</ div >
</ div >
2019-04-16 19:56:22 +00:00
< ? php
/**
* Fires after the upload interface loads .
*
* @ since 2.6 . 0 As 'post-flash-upload-ui'
* @ since 3.3 . 0
*/
do_action ( 'post-plupload-upload-ui' );
?>
2019-03-12 09:27:46 +00:00
</ div >
< div id = " html-upload-ui " class = " hide-if-js " >
< ? php
/**
* Fires before the upload button in the media upload interface .
*
* @ since 2.6 . 0
*/
do_action ( 'pre-html-upload-ui' );
?>
< p id = " async-upload-wrap " >
2019-04-16 19:56:22 +00:00
< label class = " screen-reader-text " for = " async-upload " >< ? php _e ( 'Upload' ); ?> </label>
2019-03-12 09:27:46 +00:00
< input type = " file " name = " async-upload " id = " async-upload " />
< ? php submit_button ( __ ( 'Upload' ), 'primary' , 'html-upload' , false ); ?>
2019-04-16 19:56:22 +00:00
< a href = " # " onclick = " try { top.tb_remove();}catch(e) { }; return false; " >< ? php _e ( 'Cancel' ); ?> </a>
2019-03-12 09:27:46 +00:00
</ p >
< div class = " clear " ></ div >
2019-04-16 19:56:22 +00:00
< ? php
/**
* Fires after the upload button in the media upload interface .
*
* @ since 2.6 . 0
*/
do_action ( 'post-html-upload-ui' );
?>
2019-03-12 09:27:46 +00:00
</ div >
< p class = " max-upload-size " >< ? php printf ( __ ( 'Maximum upload file size: %s.' ), esc_html ( size_format ( $max_upload_size ) ) ); ?> </p>
2019-04-16 19:56:22 +00:00
< ? php
2019-03-12 09:27:46 +00:00
/**
* Fires on the post upload UI screen .
*
* Legacy ( pre - 3.5 . 0 ) media workflow hook .
*
* @ since 2.6 . 0
*/
do_action ( 'post-upload-ui' );
}
/**
* Outputs the legacy media upload form for a given media type .
*
* @ since 2.5 . 0
*
* @ param string $type
* @ param object $errors
* @ param integer $id
*/
2019-04-16 19:56:22 +00:00
function media_upload_type_form ( $type = 'file' , $errors = null , $id = null ) {
2019-03-12 09:27:46 +00:00
media_upload_header ();
2019-04-16 19:56:22 +00:00
$post_id = isset ( $_REQUEST [ 'post_id' ] ) ? intval ( $_REQUEST [ 'post_id' ] ) : 0 ;
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$form_action_url = admin_url ( " media-upload.php?type= $type &tab=type&post_id= $post_id " );
2019-03-12 09:27:46 +00:00
/**
* Filters the media upload form action URL .
*
* @ since 2.6 . 0
*
* @ param string $form_action_url The media upload form action URL .
* @ param string $type The type of media . Default 'file' .
*/
$form_action_url = apply_filters ( 'media_upload_form_url' , $form_action_url , $type );
2019-04-16 19:56:22 +00:00
$form_class = 'media-upload-form type-form validate' ;
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( get_user_setting ( 'uploader' ) ) {
2019-03-12 09:27:46 +00:00
$form_class .= ' html-uploader' ;
2019-04-16 19:56:22 +00:00
}
?>
2019-03-12 09:27:46 +00:00
< form enctype = " multipart/form-data " method = " post " action = " <?php echo esc_url( $form_action_url ); ?> " class = " <?php echo $form_class ; ?> " id = " <?php echo $type ; ?>-form " >
2019-04-16 19:56:22 +00:00
< ? php submit_button ( '' , 'hidden' , 'save' , false ); ?>
2019-03-12 09:27:46 +00:00
< input type = " hidden " name = " post_id " id = " post_id " value = " <?php echo (int) $post_id ; ?> " />
2019-04-16 19:56:22 +00:00
< ? php wp_nonce_field ( 'media-form' ); ?>
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
< h3 class = " media-title " >< ? php _e ( 'Add media files from your computer' ); ?> </h3>
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
< ? php media_upload_form ( $errors ); ?>
2019-03-12 09:27:46 +00:00
< script type = " text/javascript " >
jQuery ( function ( $ ){
var preloaded = $ ( " .media-item.preloaded " );
if ( preloaded . length > 0 ) {
preloaded . each ( function (){ prepareMediaItem ({ id : this . id . replace ( / [ ^ 0 - 9 ] / g , '' )}, '' );});
}
updateMediaForm ();
});
</ script >
2019-04-16 19:56:22 +00:00
< div id = " media-items " >
< ? php
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( $id ) {
if ( ! is_wp_error ( $id ) ) {
add_filter ( 'attachment_fields_to_edit' , 'media_post_single_attachment_fields_to_edit' , 10 , 2 );
echo get_media_items ( $id , $errors );
} else {
echo '<div id="media-upload-error">' . esc_html ( $id -> get_error_message () ) . '</div></div>' ;
exit ;
}
2019-03-12 09:27:46 +00:00
}
2019-04-16 19:56:22 +00:00
?>
</ div >
2019-03-12 09:27:46 +00:00
< p class = " savebutton ml-submit " >
2019-04-16 19:56:22 +00:00
< ? php submit_button ( __ ( 'Save all changes' ), '' , 'save' , false ); ?>
2019-03-12 09:27:46 +00:00
</ p >
</ form >
2019-04-16 19:56:22 +00:00
< ? php
2019-03-12 09:27:46 +00:00
}
/**
* Outputs the legacy media upload form for external media .
*
* @ since 2.7 . 0
*
* @ param string $type
* @ param object $errors
* @ param integer $id
*/
2019-04-16 19:56:22 +00:00
function media_upload_type_url_form ( $type = null , $errors = null , $id = null ) {
if ( null === $type ) {
2019-03-12 09:27:46 +00:00
$type = 'image' ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
media_upload_header ();
$post_id = isset ( $_REQUEST [ 'post_id' ] ) ? intval ( $_REQUEST [ 'post_id' ] ) : 0 ;
2019-04-16 19:56:22 +00:00
$form_action_url = admin_url ( " media-upload.php?type= $type &tab=type&post_id= $post_id " );
2019-03-12 09:27:46 +00:00
/** This filter is documented in wp-admin/includes/media.php */
$form_action_url = apply_filters ( 'media_upload_form_url' , $form_action_url , $type );
2019-04-16 19:56:22 +00:00
$form_class = 'media-upload-form type-form validate' ;
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( get_user_setting ( 'uploader' ) ) {
2019-03-12 09:27:46 +00:00
$form_class .= ' html-uploader' ;
2019-04-16 19:56:22 +00:00
}
?>
2019-03-12 09:27:46 +00:00
< form enctype = " multipart/form-data " method = " post " action = " <?php echo esc_url( $form_action_url ); ?> " class = " <?php echo $form_class ; ?> " id = " <?php echo $type ; ?>-form " >
< input type = " hidden " name = " post_id " id = " post_id " value = " <?php echo (int) $post_id ; ?> " />
2019-04-16 19:56:22 +00:00
< ? php wp_nonce_field ( 'media-form' ); ?>
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
< h3 class = " media-title " >< ? php _e ( 'Insert media from another website' ); ?> </h3>
2019-03-12 09:27:46 +00:00
< script type = " text/javascript " >
var addExtImage = {
width : '' ,
height : '' ,
align : 'alignnone' ,
insert : function () {
var t = this , html , f = document . forms [ 0 ], cls , title = '' , alt = '' , caption = '' ;
if ( '' == f . src . value || '' == t . width )
return false ;
if ( f . alt . value )
alt = f . alt . value . replace ( / '/g, ' & #039;').replace(/"/g, '"').replace(/</g, '<').replace(/>/g, '>');
2019-04-16 19:56:22 +00:00
< ? php
2019-03-12 09:27:46 +00:00
/** This filter is documented in wp-admin/includes/media.php */
if ( ! apply_filters ( 'disable_captions' , '' ) ) {
?>
2019-04-16 19:56:22 +00:00
if ( f . caption . value ) {
caption = f . caption . value . replace ( / \r\n | \r / g , '\n' );
caption = caption . replace ( /< [ a - zA - Z0 - 9 ] + ( [ ^<> ] + ) ?> /g, function(a){
return a . replace ( / [ \r\n\t ] +/ , ' ' );
});
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
caption = caption . replace ( / \s * \n\s */ g , '<br />' );
}
< ? php } ?>
2019-03-12 09:27:46 +00:00
cls = caption ? '' : ' class="' + t . align + '"' ;
html = '<img alt="' + alt + '" src="' + f . src . value + '"' + cls + ' width="' + t . width + '" height="' + t . height + '" />' ;
if ( f . url . value ) {
url = f . url . value . replace ( / '/g, ' & #039;').replace(/"/g, '"').replace(/</g, '<').replace(/>/g, '>');
html = '<a href="' + url + '">' + html + '</a>' ;
}
if ( caption )
html = '[caption id="" align="' + t . align + '" width="' + t . width + '"]' + html + caption + '[/caption]' ;
var win = window . dialogArguments || opener || parent || top ;
win . send_to_editor ( html );
return false ;
},
resetImageData : function () {
var t = addExtImage ;
t . width = t . height = '' ;
document . getElementById ( 'go_button' ) . style . color = '#bbb' ;
if ( ! document . forms [ 0 ] . src . value )
document . getElementById ( 'status_img' ) . innerHTML = '' ;
else document . getElementById ( 'status_img' ) . innerHTML = '<img src="<?php echo esc_url( admin_url( ' images / no . png ' ) ); ?>" alt="" />' ;
},
updateImageData : function () {
var t = addExtImage ;
t . width = t . preloadImg . width ;
t . height = t . preloadImg . height ;
document . getElementById ( 'go_button' ) . style . color = '#333' ;
document . getElementById ( 'status_img' ) . innerHTML = '<img src="<?php echo esc_url( admin_url( ' images / yes . png ' ) ); ?>" alt="" />' ;
},
getImageData : function () {
if ( jQuery ( 'table.describe' ) . hasClass ( 'not-image' ) )
return ;
var t = addExtImage , src = document . forms [ 0 ] . src . value ;
if ( ! src ) {
t . resetImageData ();
return false ;
}
document . getElementById ( 'status_img' ) . innerHTML = '<img src="<?php echo esc_url( admin_url( ' images / spinner - 2 x . gif ' ) ); ?>" alt="" width="16" height="16" />' ;
t . preloadImg = new Image ();
t . preloadImg . onload = t . updateImageData ;
t . preloadImg . onerror = t . resetImageData ;
t . preloadImg . src = src ;
}
};
jQuery ( document ) . ready ( function ( $ ) {
$ ( '.media-types input' ) . click ( function () {
$ ( 'table.describe' ) . toggleClass ( 'not-image' , $ ( '#not-image' ) . prop ( 'checked' ) );
});
});
</ script >
< div id = " media-items " >
< div class = " media-item media-blank " >
2019-04-16 19:56:22 +00:00
< ? php
/**
* Filters the insert media from URL form HTML .
*
* @ since 3.3 . 0
*
* @ param string $form_html The insert from URL form HTML .
*/
echo apply_filters ( 'type_url_form_media' , wp_media_insert_url_form ( $type ) );
?>
2019-03-12 09:27:46 +00:00
</ div >
</ div >
</ form >
2019-04-16 19:56:22 +00:00
< ? php
2019-03-12 09:27:46 +00:00
}
/**
* Adds gallery form to upload iframe
*
* @ since 2.5 . 0
*
* @ global string $redir_tab
* @ global string $type
* @ global string $tab
*
* @ param array $errors
*/
2019-04-16 19:56:22 +00:00
function media_upload_gallery_form ( $errors ) {
2019-03-12 09:27:46 +00:00
global $redir_tab , $type ;
$redir_tab = 'gallery' ;
media_upload_header ();
2019-04-16 19:56:22 +00:00
$post_id = intval ( $_REQUEST [ 'post_id' ] );
$form_action_url = admin_url ( " media-upload.php?type= $type &tab=gallery&post_id= $post_id " );
2019-03-12 09:27:46 +00:00
/** This filter is documented in wp-admin/includes/media.php */
$form_action_url = apply_filters ( 'media_upload_form_url' , $form_action_url , $type );
2019-04-16 19:56:22 +00:00
$form_class = 'media-upload-form validate' ;
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( get_user_setting ( 'uploader' ) ) {
2019-03-12 09:27:46 +00:00
$form_class .= ' html-uploader' ;
2019-04-16 19:56:22 +00:00
}
?>
2019-03-12 09:27:46 +00:00
< script type = " text/javascript " >
jQuery ( function ( $ ){
var preloaded = $ ( " .media-item.preloaded " );
if ( preloaded . length > 0 ) {
preloaded . each ( function (){ prepareMediaItem ({ id : this . id . replace ( / [ ^ 0 - 9 ] / g , '' )}, '' );});
updateMediaForm ();
}
});
</ script >
< div id = " sort-buttons " class = " hide-if-no-js " >
< span >
2019-04-16 19:56:22 +00:00
< ? php _e ( 'All Tabs:' ); ?>
< a href = " # " id = " showall " >< ? php _e ( 'Show' ); ?> </a>
< a href = " # " id = " hideall " style = " display:none; " >< ? php _e ( 'Hide' ); ?> </a>
2019-03-12 09:27:46 +00:00
</ span >
2019-04-16 19:56:22 +00:00
< ? php _e ( 'Sort Order:' ); ?>
< a href = " # " id = " asc " >< ? php _e ( 'Ascending' ); ?> </a> |
< a href = " # " id = " desc " >< ? php _e ( 'Descending' ); ?> </a> |
< a href = " # " id = " clear " >< ? php _ex ( 'Clear' , 'verb' ); ?> </a>
2019-03-12 09:27:46 +00:00
</ div >
< form enctype = " multipart/form-data " method = " post " action = " <?php echo esc_url( $form_action_url ); ?> " class = " <?php echo $form_class ; ?> " id = " gallery-form " >
2019-04-16 19:56:22 +00:00
< ? php wp_nonce_field ( 'media-form' ); ?>
< ? php //media_upload_form( $errors ); ?>
2019-03-12 09:27:46 +00:00
< table class = " widefat " >
< thead >< tr >
2019-04-16 19:56:22 +00:00
< th >< ? php _e ( 'Media' ); ?> </th>
< th class = " order-head " >< ? php _e ( 'Order' ); ?> </th>
< th class = " actions-head " >< ? php _e ( 'Actions' ); ?> </th>
2019-03-12 09:27:46 +00:00
</ tr ></ thead >
</ table >
< div id = " media-items " >
2019-04-16 19:56:22 +00:00
< ? php add_filter ( 'attachment_fields_to_edit' , 'media_post_single_attachment_fields_to_edit' , 10 , 2 ); ?>
< ? php echo get_media_items ( $post_id , $errors ); ?>
2019-03-12 09:27:46 +00:00
</ div >
< p class = " ml-submit " >
2019-04-16 19:56:22 +00:00
< ? php
submit_button (
__ ( 'Save all changes' ),
'savebutton' ,
'save' ,
false ,
array (
'id' => 'save-all' ,
'style' => 'display: none;' ,
)
);
?>
2019-03-12 09:27:46 +00:00
< input type = " hidden " name = " post_id " id = " post_id " value = " <?php echo (int) $post_id ; ?> " />
< input type = " hidden " name = " type " value = " <?php echo esc_attr( $GLOBALS['type'] ); ?> " />
< input type = " hidden " name = " tab " value = " <?php echo esc_attr( $GLOBALS['tab'] ); ?> " />
</ p >
< div id = " gallery-settings " style = " display:none; " >
2019-04-16 19:56:22 +00:00
< div class = " title " >< ? php _e ( 'Gallery Settings' ); ?> </div>
2019-03-12 09:27:46 +00:00
< table id = " basic " class = " describe " >< tbody >
< tr >
< th scope = " row " class = " label " >
< label >
2019-04-16 19:56:22 +00:00
< span class = " alignleft " >< ? php _e ( 'Link thumbnails to:' ); ?> </span>
2019-03-12 09:27:46 +00:00
</ label >
</ th >
< td class = " field " >
< input type = " radio " name = " linkto " id = " linkto-file " value = " file " />
2019-04-16 19:56:22 +00:00
< label for = " linkto-file " class = " radio " >< ? php _e ( 'Image File' ); ?> </label>
2019-03-12 09:27:46 +00:00
< input type = " radio " checked = " checked " name = " linkto " id = " linkto-post " value = " post " />
2019-04-16 19:56:22 +00:00
< label for = " linkto-post " class = " radio " >< ? php _e ( 'Attachment Page' ); ?> </label>
2019-03-12 09:27:46 +00:00
</ td >
</ tr >
< tr >
< th scope = " row " class = " label " >
< label >
2019-04-16 19:56:22 +00:00
< span class = " alignleft " >< ? php _e ( 'Order images by:' ); ?> </span>
2019-03-12 09:27:46 +00:00
</ label >
</ th >
< td class = " field " >
< select id = " orderby " name = " orderby " >
2019-04-16 19:56:22 +00:00
< option value = " menu_order " selected = " selected " >< ? php _e ( 'Menu order' ); ?> </option>
< option value = " title " >< ? php _e ( 'Title' ); ?> </option>
< option value = " post_date " >< ? php _e ( 'Date/Time' ); ?> </option>
< option value = " rand " >< ? php _e ( 'Random' ); ?> </option>
2019-03-12 09:27:46 +00:00
</ select >
</ td >
</ tr >
< tr >
< th scope = " row " class = " label " >
< label >
2019-04-16 19:56:22 +00:00
< span class = " alignleft " >< ? php _e ( 'Order:' ); ?> </span>
2019-03-12 09:27:46 +00:00
</ label >
</ th >
< td class = " field " >
< input type = " radio " checked = " checked " name = " order " id = " order-asc " value = " asc " />
2019-04-16 19:56:22 +00:00
< label for = " order-asc " class = " radio " >< ? php _e ( 'Ascending' ); ?> </label>
2019-03-12 09:27:46 +00:00
< input type = " radio " name = " order " id = " order-desc " value = " desc " />
2019-04-16 19:56:22 +00:00
< label for = " order-desc " class = " radio " >< ? php _e ( 'Descending' ); ?> </label>
2019-03-12 09:27:46 +00:00
</ td >
</ tr >
< tr >
< th scope = " row " class = " label " >
< label >
2019-04-16 19:56:22 +00:00
< span class = " alignleft " >< ? php _e ( 'Gallery columns:' ); ?> </span>
2019-03-12 09:27:46 +00:00
</ label >
</ th >
< td class = " field " >
< select id = " columns " name = " columns " >
< option value = " 1 " > 1 </ option >
< option value = " 2 " > 2 </ option >
< option value = " 3 " selected = " selected " > 3 </ option >
< option value = " 4 " > 4 </ option >
< option value = " 5 " > 5 </ option >
< option value = " 6 " > 6 </ option >
< option value = " 7 " > 7 </ option >
< option value = " 8 " > 8 </ option >
< option value = " 9 " > 9 </ option >
</ select >
</ td >
</ tr >
</ tbody ></ table >
< p class = " ml-submit " >
< input type = " button " class = " button " style = " display:none; " onMouseDown = " wpgallery.update(); " name = " insert-gallery " id = " insert-gallery " value = " <?php esc_attr_e( 'Insert gallery' ); ?> " />
< input type = " button " class = " button " style = " display:none; " onMouseDown = " wpgallery.update(); " name = " update-gallery " id = " update-gallery " value = " <?php esc_attr_e( 'Update gallery settings' ); ?> " />
</ p >
</ div >
</ form >
2019-04-16 19:56:22 +00:00
< ? php
2019-03-12 09:27:46 +00:00
}
/**
* Outputs the legacy media upload form for the media library .
*
* @ since 2.5 . 0
*
* @ global wpdb $wpdb
* @ global WP_Query $wp_query
* @ global WP_Locale $wp_locale
* @ global string $type
* @ global string $tab
* @ global array $post_mime_types
*
* @ param array $errors
*/
2019-04-16 19:56:22 +00:00
function media_upload_library_form ( $errors ) {
2019-03-12 09:27:46 +00:00
global $wpdb , $wp_query , $wp_locale , $type , $tab , $post_mime_types ;
media_upload_header ();
$post_id = isset ( $_REQUEST [ 'post_id' ] ) ? intval ( $_REQUEST [ 'post_id' ] ) : 0 ;
2019-04-16 19:56:22 +00:00
$form_action_url = admin_url ( " media-upload.php?type= $type &tab=library&post_id= $post_id " );
2019-03-12 09:27:46 +00:00
/** This filter is documented in wp-admin/includes/media.php */
$form_action_url = apply_filters ( 'media_upload_form_url' , $form_action_url , $type );
2019-04-16 19:56:22 +00:00
$form_class = 'media-upload-form validate' ;
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( get_user_setting ( 'uploader' ) ) {
2019-03-12 09:27:46 +00:00
$form_class .= ' html-uploader' ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$q = $_GET ;
2019-03-12 09:27:46 +00:00
$q [ 'posts_per_page' ] = 10 ;
2019-04-16 19:56:22 +00:00
$q [ 'paged' ] = isset ( $q [ 'paged' ] ) ? intval ( $q [ 'paged' ] ) : 0 ;
2019-03-12 09:27:46 +00:00
if ( $q [ 'paged' ] < 1 ) {
$q [ 'paged' ] = 1 ;
}
$q [ 'offset' ] = ( $q [ 'paged' ] - 1 ) * 10 ;
if ( $q [ 'offset' ] < 1 ) {
$q [ 'offset' ] = 0 ;
}
list ( $post_mime_types , $avail_post_mime_types ) = wp_edit_attachments_query ( $q );
2019-04-16 19:56:22 +00:00
?>
2019-03-12 09:27:46 +00:00
< form id = " filter " method = " get " >
< input type = " hidden " name = " type " value = " <?php echo esc_attr( $type ); ?> " />
< input type = " hidden " name = " tab " value = " <?php echo esc_attr( $tab ); ?> " />
< input type = " hidden " name = " post_id " value = " <?php echo (int) $post_id ; ?> " />
< input type = " hidden " name = " post_mime_type " value = " <?php echo isset( $_GET['post_mime_type'] ) ? esc_attr( $_GET['post_mime_type'] ) : ''; ?> " />
< input type = " hidden " name = " context " value = " <?php echo isset( $_GET['context'] ) ? esc_attr( $_GET['context'] ) : ''; ?> " />
< p id = " media-search " class = " search-box " >
2019-04-16 19:56:22 +00:00
< label class = " screen-reader-text " for = " media-search-input " >< ? php _e ( 'Search Media' ); ?> :</label>
2019-03-12 09:27:46 +00:00
< input type = " search " id = " media-search-input " name = " s " value = " <?php the_search_query(); ?> " />
< ? php submit_button ( __ ( 'Search Media' ), '' , '' , false ); ?>
</ p >
< ul class = " subsubsub " >
2019-04-16 19:56:22 +00:00
< ? php
$type_links = array ();
$_num_posts = ( array ) wp_count_attachments ();
$matches = wp_match_mime_types ( array_keys ( $post_mime_types ), array_keys ( $_num_posts ) );
foreach ( $matches as $_type => $reals ) {
foreach ( $reals as $real ) {
if ( isset ( $num_posts [ $_type ] ) ) {
$num_posts [ $_type ] += $_num_posts [ $real ];
} else {
$num_posts [ $_type ] = $_num_posts [ $real ];
}
}
}
// If available type specified by media button clicked, filter by that type
if ( empty ( $_GET [ 'post_mime_type' ] ) && ! empty ( $num_posts [ $type ] ) ) {
$_GET [ 'post_mime_type' ] = $type ;
list ( $post_mime_types , $avail_post_mime_types ) = wp_edit_attachments_query ();
}
if ( empty ( $_GET [ 'post_mime_type' ] ) || $_GET [ 'post_mime_type' ] == 'all' ) {
2019-03-12 09:27:46 +00:00
$class = ' class="current"' ;
2019-04-16 19:56:22 +00:00
} else {
$class = '' ;
}
$type_links [] = '<li><a href="' . esc_url (
add_query_arg (
array (
'post_mime_type' => 'all' ,
'paged' => false ,
'm' => false ,
)
)
) . '"' . $class . '>' . __ ( 'All Types' ) . '</a>' ;
foreach ( $post_mime_types as $mime_type => $label ) {
$class = '' ;
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( ! wp_match_mime_types ( $mime_type , $avail_post_mime_types ) ) {
continue ;
}
if ( isset ( $_GET [ 'post_mime_type' ] ) && wp_match_mime_types ( $mime_type , $_GET [ 'post_mime_type' ] ) ) {
$class = ' class="current"' ;
}
$type_links [] = '<li><a href="' . esc_url (
add_query_arg (
array (
'post_mime_type' => $mime_type ,
'paged' => false ,
)
)
) . '"' . $class . '>' . sprintf ( translate_nooped_plural ( $label [ 2 ], $num_posts [ $mime_type ] ), '<span id="' . $mime_type . '-counter">' . number_format_i18n ( $num_posts [ $mime_type ] ) . '</span>' ) . '</a>' ;
}
/**
* Filters the media upload mime type list items .
*
* Returned values should begin with an `<li>` tag .
*
* @ since 3.1 . 0
*
* @ param string [] $type_links An array of list items containing mime type link HTML .
*/
echo implode ( ' | </li>' , apply_filters ( 'media_upload_mime_type_links' , $type_links ) ) . '</li>' ;
unset ( $type_links );
?>
2019-03-12 09:27:46 +00:00
</ ul >
< div class = " tablenav " >
2019-04-16 19:56:22 +00:00
< ? php
$page_links = paginate_links (
array (
'base' => add_query_arg ( 'paged' , '%#%' ),
'format' => '' ,
'prev_text' => __ ( '«' ),
'next_text' => __ ( '»' ),
'total' => ceil ( $wp_query -> found_posts / 10 ),
'current' => $q [ 'paged' ],
)
);
if ( $page_links ) {
echo " <div class='tablenav-pages'> $page_links </div> " ;
}
?>
2019-03-12 09:27:46 +00:00
< div class = " alignleft actions " >
2019-04-16 19:56:22 +00:00
< ? php
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$arc_query = " SELECT DISTINCT YEAR(post_date) AS yyear, MONTH(post_date) AS mmonth FROM $wpdb->posts WHERE post_type = 'attachment' ORDER BY post_date DESC " ;
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$arc_result = $wpdb -> get_results ( $arc_query );
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
$month_count = count ( $arc_result );
$selected_month = isset ( $_GET [ 'm' ] ) ? $_GET [ 'm' ] : 0 ;
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( $month_count && ! ( 1 == $month_count && 0 == $arc_result [ 0 ] -> mmonth ) ) {
?>
2019-03-12 09:27:46 +00:00
< select name = 'm' >
< option < ? php selected ( $selected_month , 0 ); ?> value='0'><?php _e( 'All dates' ); ?></option>
2019-04-16 19:56:22 +00:00
< ? php
foreach ( $arc_result as $arc_row ) {
if ( $arc_row -> yyear == 0 ) {
continue ;
}
$arc_row -> mmonth = zeroise ( $arc_row -> mmonth , 2 );
if ( $arc_row -> yyear . $arc_row -> mmonth == $selected_month ) {
$default = ' selected="selected"' ;
} else {
$default = '' ;
}
echo " <option $default value=' " . esc_attr ( $arc_row -> yyear . $arc_row -> mmonth ) . " '> " ;
echo esc_html ( $wp_locale -> get_month ( $arc_row -> mmonth ) . " $arc_row->yyear " );
echo " </option> \n " ;
}
?>
2019-03-12 09:27:46 +00:00
</ select >
2019-04-16 19:56:22 +00:00
< ? php } ?>
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
< ? php submit_button ( __ ( 'Filter »' ), '' , 'post-query-submit' , false ); ?>
2019-03-12 09:27:46 +00:00
</ div >
< br class = " clear " />
</ div >
</ form >
< form enctype = " multipart/form-data " method = " post " action = " <?php echo esc_url( $form_action_url ); ?> " class = " <?php echo $form_class ; ?> " id = " library-form " >
2019-04-16 19:56:22 +00:00
< ? php wp_nonce_field ( 'media-form' ); ?>
< ? php //media_upload_form( $errors ); ?>
2019-03-12 09:27:46 +00:00
< script type = " text/javascript " >
<!--
jQuery ( function ( $ ){
var preloaded = $ ( " .media-item.preloaded " );
if ( preloaded . length > 0 ) {
preloaded . each ( function (){ prepareMediaItem ({ id : this . id . replace ( / [ ^ 0 - 9 ] / g , '' )}, '' );});
updateMediaForm ();
}
});
-->
</ script >
< div id = " media-items " >
2019-04-16 19:56:22 +00:00
< ? php add_filter ( 'attachment_fields_to_edit' , 'media_post_single_attachment_fields_to_edit' , 10 , 2 ); ?>
< ? php echo get_media_items ( null , $errors ); ?>
2019-03-12 09:27:46 +00:00
</ div >
< p class = " ml-submit " >
2019-04-16 19:56:22 +00:00
< ? php submit_button ( __ ( 'Save all changes' ), 'savebutton' , 'save' , false ); ?>
2019-03-12 09:27:46 +00:00
< input type = " hidden " name = " post_id " id = " post_id " value = " <?php echo (int) $post_id ; ?> " />
</ p >
</ form >
2019-04-16 19:56:22 +00:00
< ? php
2019-03-12 09:27:46 +00:00
}
/**
* Creates the form for external url
*
* @ since 2.7 . 0
*
* @ param string $default_view
* @ return string the form html
*/
function wp_media_insert_url_form ( $default_view = 'image' ) {
/** This filter is documented in wp-admin/includes/media.php */
if ( ! apply_filters ( 'disable_captions' , '' ) ) {
$caption = '
< tr class = " image-only " >
< th scope = " row " class = " label " >
2019-04-16 19:56:22 +00:00
< label for = " caption " >< span class = " alignleft " > ' . __( ' Image Caption ' ) . ' </ span ></ label >
2019-03-12 09:27:46 +00:00
</ th >
< td class = " field " >< textarea id = " caption " name = " caption " ></ textarea ></ td >
</ tr >
' ;
} else {
$caption = '' ;
}
2019-04-16 19:56:22 +00:00
$default_align = get_option ( 'image_default_align' );
if ( empty ( $default_align ) ) {
2019-03-12 09:27:46 +00:00
$default_align = 'none' ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
if ( 'image' == $default_view ) {
2019-04-16 19:56:22 +00:00
$view = 'image-only' ;
2019-03-12 09:27:46 +00:00
$table_class = '' ;
} else {
$view = $table_class = 'not-image' ;
}
return '
< p class = " media-types " >< label >< input type = " radio " name = " media_type " value = " image " id = " image-only " ' . checked( ' image - only ', $view, false ) . ' /> ' . __( ' Image ' ) . ' </ label > & nbsp ; & nbsp ; < label >< input type = " radio " name = " media_type " value = " generic " id = " not-image " ' . checked( ' not - image ', $view, false ) . ' /> ' . __( ' Audio , Video , or Other File ' ) . ' </ label ></ p >
< p class = " media-types media-types-required-info " > ' . sprintf( __( ' Required fields are marked % s ' ), ' < span class = " required " >*</ span > ' ) . ' </ p >
< table class = " describe ' . $table_class . ' " >< tbody >
< tr >
< th scope = " row " class = " label " style = " width:130px; " >
< label for = " src " >< span class = " alignleft " > ' . __( ' URL ' ) . ' </ span > < span class = " required " >*</ span ></ label >
< span class = " alignright " id = " status_img " ></ span >
</ th >
2019-04-16 19:56:22 +00:00
< td class = " field " >< input id = " src " name = " src " value = " " type = " text " required onblur = " addExtImage.getImageData() " /></ td >
2019-03-12 09:27:46 +00:00
</ tr >
< tr >
< th scope = " row " class = " label " >
< label for = " title " >< span class = " alignleft " > ' . __( ' Title ' ) . ' </ span > < span class = " required " >*</ span ></ label >
</ th >
2019-04-16 19:56:22 +00:00
< td class = " field " >< input id = " title " name = " title " value = " " type = " text " required /></ td >
2019-03-12 09:27:46 +00:00
</ tr >
2019-04-16 19:56:22 +00:00
< tr class = " not-image " >< td ></ td >< td >< p class = " help " > ' . __( ' Link text , e . g . & #8220;Ransom Demands (PDF)”' ) . '</p></td></tr>
2019-03-12 09:27:46 +00:00
< tr class = " image-only " >
< th scope = " row " class = " label " >
2019-04-16 19:56:22 +00:00
< label for = " alt " >< span class = " alignleft " > ' . __( ' Alternative Text ' ) . ' </ span ></ label >
2019-03-12 09:27:46 +00:00
</ th >
2019-04-16 19:56:22 +00:00
< td class = " field " >< input id = " alt " name = " alt " value = " " type = " text " required />
< p class = " help " > ' . __( ' Alt text for the image , e . g . & #8220;The Mona Lisa”' ) . '</p></td>
2019-03-12 09:27:46 +00:00
</ tr >
' . $caption . '
< tr class = " align image-only " >
2019-04-16 19:56:22 +00:00
< th scope = " row " class = " label " >< p >< label for = " align " > ' . __( ' Alignment ' ) . ' </ label ></ p ></ th >
2019-03-12 09:27:46 +00:00
< td class = " field " >
2019-04-16 19:56:22 +00:00
< input name = " align " id = " align-none " value = " none " onclick = " addExtImage.align= \ 'align \ '+this.value " type = " radio " ' . ( $default_align == ' none ' ? ' checked = " checked " ' : ' ' ) . ' />
< label for = " align-none " class = " align image-align-none-label " > ' . __( ' None ' ) . ' </ label >
< input name = " align " id = " align-left " value = " left " onclick = " addExtImage.align= \ 'align \ '+this.value " type = " radio " ' . ( $default_align == ' left ' ? ' checked = " checked " ' : ' ' ) . ' />
< label for = " align-left " class = " align image-align-left-label " > ' . __( ' Left ' ) . ' </ label >
< input name = " align " id = " align-center " value = " center " onclick = " addExtImage.align= \ 'align \ '+this.value " type = " radio " ' . ( $default_align == ' center ' ? ' checked = " checked " ' : ' ' ) . ' />
< label for = " align-center " class = " align image-align-center-label " > ' . __( ' Center ' ) . ' </ label >
< input name = " align " id = " align-right " value = " right " onclick = " addExtImage.align= \ 'align \ '+this.value " type = " radio " ' . ( $default_align == ' right ' ? ' checked = " checked " ' : ' ' ) . ' />
< label for = " align-right " class = " align image-align-right-label " > ' . __( ' Right ' ) . ' </ label >
2019-03-12 09:27:46 +00:00
</ td >
</ tr >
< tr class = " image-only " >
< th scope = " row " class = " label " >
2019-04-16 19:56:22 +00:00
< label for = " url " >< span class = " alignleft " > ' . __( ' Link Image To : ' ) . ' </ span ></ label >
2019-03-12 09:27:46 +00:00
</ th >
< td class = " field " >< input id = " url " name = " url " value = " " type = " text " />< br />
2019-04-16 19:56:22 +00:00
< button type = " button " class = " button " value = " " onclick = " document.forms[0].url.value=null " > ' . __( ' None ' ) . ' </ button >
< button type = " button " class = " button " value = " " onclick = " document.forms[0].url.value=document.forms[0].src.value " > ' . __( ' Link to image ' ) . ' </ button >
< p class = " help " > ' . __( ' Enter a link URL or click above for presets . ' ) . ' </ p ></ td >
2019-03-12 09:27:46 +00:00
</ tr >
< tr class = " image-only " >
< td ></ td >
< td >
2019-04-16 19:56:22 +00:00
< input type = " button " class = " button " id = " go_button " style = " color:#bbb; " onclick = " addExtImage.insert() " value = " ' . esc_attr__( 'Insert into Post' ) . ' " />
2019-03-12 09:27:46 +00:00
</ td >
</ tr >
< tr class = " not-image " >
< td ></ td >
< td >
' . get_submit_button( __( ' Insert into Post ' ), ' ', ' insertonlybutton ', false ) . '
</ td >
</ tr >
</ tbody ></ table >
' ;
}
/**
* Displays the multi - file uploader message .
*
* @ since 2.6 . 0
*
* @ global int $post_ID
*/
function media_upload_flash_bypass () {
$browser_uploader = admin_url ( 'media-new.php?browser-uploader' );
2019-04-16 19:56:22 +00:00
if ( $post = get_post () ) {
2019-03-12 09:27:46 +00:00
$browser_uploader .= '&post_id=' . intval ( $post -> ID );
2019-04-16 19:56:22 +00:00
} elseif ( ! empty ( $GLOBALS [ 'post_ID' ] ) ) {
2019-03-12 09:27:46 +00:00
$browser_uploader .= '&post_id=' . intval ( $GLOBALS [ 'post_ID' ] );
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
?>
< p class = " upload-flash-bypass " >
< ? php printf ( __ ( 'You are using the multi-file uploader. Problems? Try the <a href="%1$s" target="%2$s">browser uploader</a> instead.' ), $browser_uploader , '_blank' ); ?>
</ p >
< ? php
}
/**
* Displays the browser ' s built - in uploader message .
*
* @ since 2.6 . 0
*/
function media_upload_html_bypass () {
?>
< p class = " upload-html-bypass hide-if-no-js " >
2019-04-16 19:56:22 +00:00
< ? php _e ( 'You are using the browser’s built-in file uploader. The WordPress uploader includes multiple file selection and drag and drop capability. <a href="#">Switch to the multi-file uploader</a>.' ); ?>
2019-03-12 09:27:46 +00:00
</ p >
< ? php
}
/**
* Used to display a " After a file has been uploaded... " help message .
*
* @ since 3.3 . 0
*/
function media_upload_text_after () {}
/**
* Displays the checkbox to scale images .
*
* @ since 3.3 . 0
*/
function media_upload_max_image_resize () {
2019-04-16 19:56:22 +00:00
$checked = get_user_setting ( 'upload_resize' ) ? ' checked="true"' : '' ;
$a = $end = '' ;
2019-03-12 09:27:46 +00:00
if ( current_user_can ( 'manage_options' ) ) {
2019-04-16 19:56:22 +00:00
$a = '<a href="' . esc_url ( admin_url ( 'options-media.php' ) ) . '" target="_blank">' ;
2019-03-12 09:27:46 +00:00
$end = '</a>' ;
}
2019-04-16 19:56:22 +00:00
?>
2019-03-12 09:27:46 +00:00
< p class = " hide-if-no-js " >< label >
< input name = " image_resize " type = " checkbox " id = " image_resize " value = " true " < ? php echo $checked ; ?> />
2019-04-16 19:56:22 +00:00
< ? php
/* translators: 1: link start tag, 2: link end tag, 3: width, 4: height */
2019-03-12 09:27:46 +00:00
printf ( __ ( 'Scale images to match the large size selected in %1$simage options%2$s (%3$d × %4$d).' ), $a , $end , ( int ) get_option ( 'large_size_w' , '1024' ), ( int ) get_option ( 'large_size_h' , '1024' ) );
2019-04-16 19:56:22 +00:00
?>
2019-03-12 09:27:46 +00:00
</ label ></ p >
2019-04-16 19:56:22 +00:00
< ? php
2019-03-12 09:27:46 +00:00
}
/**
* Displays the out of storage quota message in Multisite .
*
* @ since 3.5 . 0
*/
function multisite_over_quota_message () {
echo '<p>' . sprintf ( __ ( 'Sorry, you have used all of your storage quota of %s MB.' ), get_space_allowed () ) . '</p>' ;
}
/**
* Displays the image and editor in the post editor
*
* @ since 3.5 . 0
*
* @ param WP_Post $post A post object .
*/
function edit_form_image_editor ( $post ) {
$open = isset ( $_GET [ 'image-editor' ] );
2019-04-16 19:56:22 +00:00
if ( $open ) {
2019-03-12 09:27:46 +00:00
require_once ABSPATH . 'wp-admin/includes/image-edit.php' ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
$thumb_url = false ;
2019-04-16 19:56:22 +00:00
if ( $attachment_id = intval ( $post -> ID ) ) {
2019-03-12 09:27:46 +00:00
$thumb_url = wp_get_attachment_image_src ( $attachment_id , array ( 900 , 450 ), true );
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
$alt_text = get_post_meta ( $post -> ID , '_wp_attachment_image_alt' , true );
2019-04-16 19:56:22 +00:00
$att_url = wp_get_attachment_url ( $post -> ID );
?>
2019-03-12 09:27:46 +00:00
< div class = " wp_attachment_holder wp-clearfix " >
< ? php
if ( wp_attachment_is_image ( $post -> ID ) ) :
$image_edit_button = '' ;
if ( wp_image_editor_supports ( array ( 'mime_type' => $post -> post_mime_type ) ) ) {
2019-04-16 19:56:22 +00:00
$nonce = wp_create_nonce ( " image_editor- $post->ID " );
2019-03-12 09:27:46 +00:00
$image_edit_button = " <input type='button' id='imgedit-open-btn- $post->ID ' onclick='imageEdit.open( $post->ID , \" $nonce\ " ) ' class=' button ' value=' " . esc_attr__( 'Edit Image' ) . " ' /> <span class=' spinner ' ></ span > " ;
}
2019-04-16 19:56:22 +00:00
$open_style = $not_open_style = '' ;
if ( $open ) {
$open_style = ' style="display:none"' ;
} else {
$not_open_style = ' style="display:none"' ;
}
?>
2019-03-12 09:27:46 +00:00
< div class = " imgedit-response " id = " imgedit-response-<?php echo $attachment_id ; ?> " ></ div >
2019-04-16 19:56:22 +00:00
< div < ? php echo $open_style ; ?> class="wp_attachment_image wp-clearfix" id="media-head-<?php echo $attachment_id; ?>">
2019-03-12 09:27:46 +00:00
< p id = " thumbnail-head-<?php echo $attachment_id ; ?> " >< img class = " thumbnail " src = " <?php echo set_url_scheme( $thumb_url[0] ); ?> " style = " max-width:100% " alt = " " /></ p >
< p >< ? php echo $image_edit_button ; ?> </p>
</ div >
2019-04-16 19:56:22 +00:00
< div < ? php echo $not_open_style ; ?> class="image-editor" id="image-editor-<?php echo $attachment_id; ?>">
< ? php
if ( $open ) {
wp_image_editor ( $attachment_id );}
?>
2019-03-12 09:27:46 +00:00
</ div >
2019-04-16 19:56:22 +00:00
< ? php
elseif ( $attachment_id && wp_attachment_is ( 'audio' , $post ) ) :
2019-03-12 09:27:46 +00:00
wp_maybe_generate_attachment_metadata ( $post );
echo wp_audio_shortcode ( array ( 'src' => $att_url ) );
2019-04-16 19:56:22 +00:00
elseif ( $attachment_id && wp_attachment_is ( 'video' , $post ) ) :
2019-03-12 09:27:46 +00:00
wp_maybe_generate_attachment_metadata ( $post );
$meta = wp_get_attachment_metadata ( $attachment_id );
2019-04-16 19:56:22 +00:00
$w = ! empty ( $meta [ 'width' ] ) ? min ( $meta [ 'width' ], 640 ) : 0 ;
$h = ! empty ( $meta [ 'height' ] ) ? $meta [ 'height' ] : 0 ;
2019-03-12 09:27:46 +00:00
if ( $h && $w < $meta [ 'width' ] ) {
$h = round ( ( $meta [ 'height' ] * $w ) / $meta [ 'width' ] );
}
$attr = array ( 'src' => $att_url );
if ( ! empty ( $w ) && ! empty ( $h ) ) {
2019-04-16 19:56:22 +00:00
$attr [ 'width' ] = $w ;
2019-03-12 09:27:46 +00:00
$attr [ 'height' ] = $h ;
}
$thumb_id = get_post_thumbnail_id ( $attachment_id );
if ( ! empty ( $thumb_id ) ) {
$attr [ 'poster' ] = wp_get_attachment_url ( $thumb_id );
}
echo wp_video_shortcode ( $attr );
2019-04-16 19:56:22 +00:00
elseif ( isset ( $thumb_url [ 0 ] ) ) :
2019-03-12 09:27:46 +00:00
?>
< div class = " wp_attachment_image wp-clearfix " id = " media-head-<?php echo $attachment_id ; ?> " >
< p id = " thumbnail-head-<?php echo $attachment_id ; ?> " >
< img class = " thumbnail " src = " <?php echo set_url_scheme( $thumb_url[0] ); ?> " style = " max-width:100% " alt = " " />
</ p >
</ div >
< ? php
2019-04-16 19:56:22 +00:00
else :
2019-03-12 09:27:46 +00:00
/**
* Fires when an attachment type can ' t be rendered in the edit form .
*
* @ since 4.6 . 0
*
* @ param WP_Post $post A post object .
*/
do_action ( 'wp_edit_form_attachment_display' , $post );
2019-04-16 19:56:22 +00:00
endif ;
?>
2019-03-12 09:27:46 +00:00
</ div >
< div class = " wp_attachment_details edit-form-section " >
< p >
< label for = " attachment_caption " >< strong >< ? php _e ( 'Caption' ); ?> </strong></label><br />
< textarea class = " widefat " name = " excerpt " id = " attachment_caption " >< ? php echo $post -> post_excerpt ; ?> </textarea>
</ p >
< ? php if ( 'image' === substr ( $post -> post_mime_type , 0 , 5 ) ) : ?>
< p >
< label for = " attachment_alt " >< strong >< ? php _e ( 'Alternative Text' ); ?> </strong></label><br />
< input type = " text " class = " widefat " name = " _wp_attachment_image_alt " id = " attachment_alt " value = " <?php echo esc_attr( $alt_text ); ?> " />
</ p >
< ? php endif ; ?>
< ? php
$quicktags_settings = array ( 'buttons' => 'strong,em,link,block,del,ins,img,ul,ol,li,code,close' );
2019-04-16 19:56:22 +00:00
$editor_args = array (
2019-03-12 09:27:46 +00:00
'textarea_name' => 'content' ,
'textarea_rows' => 5 ,
'media_buttons' => false ,
2019-04-16 19:56:22 +00:00
'tinymce' => false ,
'quicktags' => $quicktags_settings ,
2019-03-12 09:27:46 +00:00
);
?>
2019-04-16 19:56:22 +00:00
< label for = " attachment_content " >< strong >< ? php _e ( 'Description' ); ?> </strong>
< ? php
if ( preg_match ( '#^(audio|video)/#' , $post -> post_mime_type ) ) {
echo ': ' . __ ( 'Displayed on attachment pages.' );
}
?>
</ label >
2019-03-12 09:27:46 +00:00
< ? php wp_editor ( $post -> post_content , 'attachment_content' , $editor_args ); ?>
</ div >
< ? php
$extras = get_compat_media_markup ( $post -> ID );
echo $extras [ 'item' ];
echo '<input type="hidden" id="image-edit-context" value="edit-attachment" />' . " \n " ;
}
/**
* Displays non - editable attachment metadata in the publish meta box .
*
* @ since 3.5 . 0
*/
function attachment_submitbox_metadata () {
$post = get_post ();
2019-04-16 19:56:22 +00:00
$file = get_attached_file ( $post -> ID );
2019-03-12 09:27:46 +00:00
$filename = esc_html ( wp_basename ( $file ) );
$media_dims = '' ;
2019-04-16 19:56:22 +00:00
$meta = wp_get_attachment_metadata ( $post -> ID );
if ( isset ( $meta [ 'width' ], $meta [ 'height' ] ) ) {
2019-03-12 09:27:46 +00:00
$media_dims .= " <span id='media-dims- $post->ID '> { $meta [ 'width' ] } × { $meta [ 'height' ] } </span> " ;
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
/** This filter is documented in wp-admin/includes/media.php */
$media_dims = apply_filters ( 'media_meta' , $media_dims , $post );
$att_url = wp_get_attachment_url ( $post -> ID );
2019-04-16 19:56:22 +00:00
?>
2019-03-12 09:27:46 +00:00
< div class = " misc-pub-section misc-pub-attachment " >
< label for = " attachment_url " >< ? php _e ( 'File URL:' ); ?> </label>
< input type = " text " class = " widefat urlfield " readonly = " readonly " name = " attachment_url " id = " attachment_url " value = " <?php echo esc_attr( $att_url ); ?> " />
</ div >
< div class = " misc-pub-section misc-pub-filename " >
< ? php _e ( 'File name:' ); ?> <strong><?php echo $filename; ?></strong>
</ div >
< div class = " misc-pub-section misc-pub-filetype " >
2019-04-16 19:56:22 +00:00
< ? php _e ( 'File type:' ); ?> <strong>
< ? php
if ( preg_match ( '/^.*?\.(\w+)$/' , get_attached_file ( $post -> ID ), $matches ) ) {
echo esc_html ( strtoupper ( $matches [ 1 ] ) );
list ( $mime_type ) = explode ( '/' , $post -> post_mime_type );
if ( $mime_type !== 'image' && ! empty ( $meta [ 'mime_type' ] ) ) {
if ( $meta [ 'mime_type' ] !== " $mime_type / " . strtolower ( $matches [ 1 ] ) ) {
echo ' (' . $meta [ 'mime_type' ] . ')' ;
}
}
} else {
echo strtoupper ( str_replace ( 'image/' , '' , $post -> post_mime_type ) );
2019-03-12 09:27:46 +00:00
}
2019-04-16 19:56:22 +00:00
?>
</ strong >
2019-03-12 09:27:46 +00:00
</ div >
< ? php
$file_size = false ;
2019-04-16 19:56:22 +00:00
if ( isset ( $meta [ 'filesize' ] ) ) {
$file_size = $meta [ 'filesize' ];
} elseif ( file_exists ( $file ) ) {
$file_size = filesize ( $file );
}
2019-03-12 09:27:46 +00:00
2019-04-16 19:56:22 +00:00
if ( ! empty ( $file_size ) ) :
?>
2019-03-12 09:27:46 +00:00
< div class = " misc-pub-section misc-pub-filesize " >
< ? php _e ( 'File size:' ); ?> <strong><?php echo size_format( $file_size ); ?></strong>
</ div >
< ? php
endif ;
if ( preg_match ( '#^(audio|video)/#' , $post -> post_mime_type ) ) {
$fields = array (
'length_formatted' => __ ( 'Length:' ),
'bitrate' => __ ( 'Bitrate:' ),
);
/**
* Filters the audio and video metadata fields to be shown in the publish meta box .
*
* The key for each item in the array should correspond to an attachment
* metadata key , and the value should be the desired label .
*
* @ since 3.7 . 0
* @ since 4.9 . 0 Added the `$post` parameter .
*
* @ param array $fields An array of the attachment metadata keys and labels .
* @ param WP_Post $post WP_Post object for the current attachment .
*/
$fields = apply_filters ( 'media_submitbox_misc_sections' , $fields , $post );
foreach ( $fields as $key => $label ) {
if ( empty ( $meta [ $key ] ) ) {
continue ;
}
2019-04-16 19:56:22 +00:00
?>
2019-03-12 09:27:46 +00:00
< div class = " misc-pub-section misc-pub-mime-meta misc-pub-<?php echo sanitize_html_class( $key ); ?> " >
2019-04-16 19:56:22 +00:00
< ? php echo $label ; ?> <strong>
< ? php
switch ( $key ) {
case 'bitrate' :
echo round ( $meta [ 'bitrate' ] / 1000 ) . 'kb/s' ;
if ( ! empty ( $meta [ 'bitrate_mode' ] ) ) {
echo ' ' . strtoupper ( esc_html ( $meta [ 'bitrate_mode' ] ) );
}
break ;
default :
echo esc_html ( $meta [ $key ] );
break ;
2019-03-12 09:27:46 +00:00
}
2019-04-16 19:56:22 +00:00
?>
</ strong >
2019-03-12 09:27:46 +00:00
</ div >
2019-04-16 19:56:22 +00:00
< ? php
2019-03-12 09:27:46 +00:00
}
$fields = array (
'dataformat' => __ ( 'Audio Format:' ),
2019-04-16 19:56:22 +00:00
'codec' => __ ( 'Audio Codec:' ),
2019-03-12 09:27:46 +00:00
);
/**
* Filters the audio attachment metadata fields to be shown in the publish meta box .
*
* The key for each item in the array should correspond to an attachment
* metadata key , and the value should be the desired label .
*
* @ since 3.7 . 0
* @ since 4.9 . 0 Added the `$post` parameter .
*
* @ param array $fields An array of the attachment metadata keys and labels .
* @ param WP_Post $post WP_Post object for the current attachment .
*/
$audio_fields = apply_filters ( 'audio_submitbox_misc_sections' , $fields , $post );
foreach ( $audio_fields as $key => $label ) {
if ( empty ( $meta [ 'audio' ][ $key ] ) ) {
continue ;
}
2019-04-16 19:56:22 +00:00
?>
2019-03-12 09:27:46 +00:00
< div class = " misc-pub-section misc-pub-audio misc-pub-<?php echo sanitize_html_class( $key ); ?> " >
2019-04-16 19:56:22 +00:00
< ? php echo $label ; ?> <strong><?php echo esc_html( $meta['audio'][ $key ] ); ?></strong>
2019-03-12 09:27:46 +00:00
</ div >
2019-04-16 19:56:22 +00:00
< ? php
2019-03-12 09:27:46 +00:00
}
}
2019-04-16 19:56:22 +00:00
if ( $media_dims ) :
?>
2019-03-12 09:27:46 +00:00
< div class = " misc-pub-section misc-pub-dimensions " >
< ? php _e ( 'Dimensions:' ); ?> <strong><?php echo $media_dims; ?></strong>
</ div >
2019-04-16 19:56:22 +00:00
< ? php
2019-03-12 09:27:46 +00:00
endif ;
}
/**
* Parse ID3v2 , ID3v1 , and getID3 comments to extract usable data
*
* @ since 3.6 . 0
*
* @ param array $metadata An existing array with data
* @ param array $data Data supplied by ID3 tags
*/
function wp_add_id3_tag_data ( & $metadata , $data ) {
foreach ( array ( 'id3v2' , 'id3v1' ) as $version ) {
2019-04-16 19:56:22 +00:00
if ( ! empty ( $data [ $version ][ 'comments' ] ) ) {
foreach ( $data [ $version ][ 'comments' ] as $key => $list ) {
2019-03-12 09:27:46 +00:00
if ( 'length' !== $key && ! empty ( $list ) ) {
2019-04-16 19:56:22 +00:00
$metadata [ $key ] = wp_kses_post ( reset ( $list ) );
2019-03-12 09:27:46 +00:00
// Fix bug in byte stream analysis.
2019-04-16 19:56:22 +00:00
if ( 'terms_of_use' === $key && 0 === strpos ( $metadata [ $key ], 'yright notice.' ) ) {
$metadata [ $key ] = 'Cop' . $metadata [ $key ];
}
2019-03-12 09:27:46 +00:00
}
}
break ;
}
}
if ( ! empty ( $data [ 'id3v2' ][ 'APIC' ] ) ) {
2019-04-16 19:56:22 +00:00
$image = reset ( $data [ 'id3v2' ][ 'APIC' ] );
2019-03-12 09:27:46 +00:00
if ( ! empty ( $image [ 'data' ] ) ) {
$metadata [ 'image' ] = array (
2019-04-16 19:56:22 +00:00
'data' => $image [ 'data' ],
'mime' => $image [ 'image_mime' ],
'width' => $image [ 'image_width' ],
'height' => $image [ 'image_height' ],
2019-03-12 09:27:46 +00:00
);
}
} elseif ( ! empty ( $data [ 'comments' ][ 'picture' ] ) ) {
$image = reset ( $data [ 'comments' ][ 'picture' ] );
if ( ! empty ( $image [ 'data' ] ) ) {
$metadata [ 'image' ] = array (
'data' => $image [ 'data' ],
2019-04-16 19:56:22 +00:00
'mime' => $image [ 'image_mime' ],
2019-03-12 09:27:46 +00:00
);
}
}
}
/**
* Retrieve metadata from a video file ' s ID3 tags
*
* @ since 3.6 . 0
*
* @ param string $file Path to file .
* @ return array | bool Returns array of metadata , if found .
*/
function wp_read_video_metadata ( $file ) {
if ( ! file_exists ( $file ) ) {
return false ;
}
$metadata = array ();
if ( ! defined ( 'GETID3_TEMP_DIR' ) ) {
define ( 'GETID3_TEMP_DIR' , get_temp_dir () );
}
if ( ! class_exists ( 'getID3' , false ) ) {
require ( ABSPATH . WPINC . '/ID3/getid3.php' );
}
2019-04-16 19:56:22 +00:00
$id3 = new getID3 ();
2019-03-12 09:27:46 +00:00
$data = $id3 -> analyze ( $file );
2019-04-16 19:56:22 +00:00
if ( isset ( $data [ 'video' ][ 'lossless' ] ) ) {
2019-03-12 09:27:46 +00:00
$metadata [ 'lossless' ] = $data [ 'video' ][ 'lossless' ];
2019-04-16 19:56:22 +00:00
}
if ( ! empty ( $data [ 'video' ][ 'bitrate' ] ) ) {
2019-03-12 09:27:46 +00:00
$metadata [ 'bitrate' ] = ( int ) $data [ 'video' ][ 'bitrate' ];
2019-04-16 19:56:22 +00:00
}
if ( ! empty ( $data [ 'video' ][ 'bitrate_mode' ] ) ) {
2019-03-12 09:27:46 +00:00
$metadata [ 'bitrate_mode' ] = $data [ 'video' ][ 'bitrate_mode' ];
2019-04-16 19:56:22 +00:00
}
if ( ! empty ( $data [ 'filesize' ] ) ) {
2019-03-12 09:27:46 +00:00
$metadata [ 'filesize' ] = ( int ) $data [ 'filesize' ];
2019-04-16 19:56:22 +00:00
}
if ( ! empty ( $data [ 'mime_type' ] ) ) {
2019-03-12 09:27:46 +00:00
$metadata [ 'mime_type' ] = $data [ 'mime_type' ];
2019-04-16 19:56:22 +00:00
}
if ( ! empty ( $data [ 'playtime_seconds' ] ) ) {
2019-03-12 09:27:46 +00:00
$metadata [ 'length' ] = ( int ) round ( $data [ 'playtime_seconds' ] );
2019-04-16 19:56:22 +00:00
}
if ( ! empty ( $data [ 'playtime_string' ] ) ) {
2019-03-12 09:27:46 +00:00
$metadata [ 'length_formatted' ] = $data [ 'playtime_string' ];
2019-04-16 19:56:22 +00:00
}
if ( ! empty ( $data [ 'video' ][ 'resolution_x' ] ) ) {
2019-03-12 09:27:46 +00:00
$metadata [ 'width' ] = ( int ) $data [ 'video' ][ 'resolution_x' ];
2019-04-16 19:56:22 +00:00
}
if ( ! empty ( $data [ 'video' ][ 'resolution_y' ] ) ) {
2019-03-12 09:27:46 +00:00
$metadata [ 'height' ] = ( int ) $data [ 'video' ][ 'resolution_y' ];
2019-04-16 19:56:22 +00:00
}
if ( ! empty ( $data [ 'fileformat' ] ) ) {
2019-03-12 09:27:46 +00:00
$metadata [ 'fileformat' ] = $data [ 'fileformat' ];
2019-04-16 19:56:22 +00:00
}
if ( ! empty ( $data [ 'video' ][ 'dataformat' ] ) ) {
2019-03-12 09:27:46 +00:00
$metadata [ 'dataformat' ] = $data [ 'video' ][ 'dataformat' ];
2019-04-16 19:56:22 +00:00
}
if ( ! empty ( $data [ 'video' ][ 'encoder' ] ) ) {
2019-03-12 09:27:46 +00:00
$metadata [ 'encoder' ] = $data [ 'video' ][ 'encoder' ];
2019-04-16 19:56:22 +00:00
}
if ( ! empty ( $data [ 'video' ][ 'codec' ] ) ) {
2019-03-12 09:27:46 +00:00
$metadata [ 'codec' ] = $data [ 'video' ][ 'codec' ];
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
if ( ! empty ( $data [ 'audio' ] ) ) {
unset ( $data [ 'audio' ][ 'streams' ] );
$metadata [ 'audio' ] = $data [ 'audio' ];
}
if ( empty ( $metadata [ 'created_timestamp' ] ) ) {
$created_timestamp = wp_get_media_creation_timestamp ( $data );
if ( $created_timestamp !== false ) {
$metadata [ 'created_timestamp' ] = $created_timestamp ;
}
}
wp_add_id3_tag_data ( $metadata , $data );
$file_format = isset ( $metadata [ 'fileformat' ] ) ? $metadata [ 'fileformat' ] : null ;
/**
* Filters the array of metadata retrieved from a video .
*
* In core , usually this selection is what is stored .
* More complete data can be parsed from the `$data` parameter .
*
* @ since 4.9 . 0
*
* @ param array $metadata Filtered Video metadata .
* @ param string $file Path to video file .
* @ param string $file_format File format of video , as analyzed by getID3 .
* @ param string $data Raw metadata from getID3 .
*/
return apply_filters ( 'wp_read_video_metadata' , $metadata , $file , $file_format , $data );
}
/**
2019-04-16 19:56:22 +00:00
* Retrieve metadata from an audio file ' s ID3 tags .
2019-03-12 09:27:46 +00:00
*
* @ since 3.6 . 0
*
* @ param string $file Path to file .
* @ return array | bool Returns array of metadata , if found .
*/
function wp_read_audio_metadata ( $file ) {
if ( ! file_exists ( $file ) ) {
return false ;
}
$metadata = array ();
if ( ! defined ( 'GETID3_TEMP_DIR' ) ) {
define ( 'GETID3_TEMP_DIR' , get_temp_dir () );
}
if ( ! class_exists ( 'getID3' , false ) ) {
require ( ABSPATH . WPINC . '/ID3/getid3.php' );
}
2019-04-16 19:56:22 +00:00
$id3 = new getID3 ();
2019-03-12 09:27:46 +00:00
$data = $id3 -> analyze ( $file );
if ( ! empty ( $data [ 'audio' ] ) ) {
unset ( $data [ 'audio' ][ 'streams' ] );
$metadata = $data [ 'audio' ];
}
2019-04-16 19:56:22 +00:00
if ( ! empty ( $data [ 'fileformat' ] ) ) {
2019-03-12 09:27:46 +00:00
$metadata [ 'fileformat' ] = $data [ 'fileformat' ];
2019-04-16 19:56:22 +00:00
}
if ( ! empty ( $data [ 'filesize' ] ) ) {
2019-03-12 09:27:46 +00:00
$metadata [ 'filesize' ] = ( int ) $data [ 'filesize' ];
2019-04-16 19:56:22 +00:00
}
if ( ! empty ( $data [ 'mime_type' ] ) ) {
2019-03-12 09:27:46 +00:00
$metadata [ 'mime_type' ] = $data [ 'mime_type' ];
2019-04-16 19:56:22 +00:00
}
if ( ! empty ( $data [ 'playtime_seconds' ] ) ) {
2019-03-12 09:27:46 +00:00
$metadata [ 'length' ] = ( int ) round ( $data [ 'playtime_seconds' ] );
2019-04-16 19:56:22 +00:00
}
if ( ! empty ( $data [ 'playtime_string' ] ) ) {
2019-03-12 09:27:46 +00:00
$metadata [ 'length_formatted' ] = $data [ 'playtime_string' ];
2019-04-16 19:56:22 +00:00
}
if ( empty ( $metadata [ 'created_timestamp' ] ) ) {
$created_timestamp = wp_get_media_creation_timestamp ( $data );
if ( false !== $created_timestamp ) {
$metadata [ 'created_timestamp' ] = $created_timestamp ;
}
}
2019-03-12 09:27:46 +00:00
wp_add_id3_tag_data ( $metadata , $data );
return $metadata ;
}
/**
* Parse creation date from media metadata .
*
* The getID3 library doesn ' t have a standard method for getting creation dates ,
* so the location of this data can vary based on the MIME type .
*
* @ since 4.9 . 0
*
* @ link https :// github . com / JamesHeinrich / getID3 / blob / master / structure . txt
*
* @ param array $metadata The metadata returned by getID3 :: analyze () .
* @ return int | bool A UNIX timestamp for the media ' s creation date if available
* or a boolean FALSE if a timestamp could not be determined .
*/
function wp_get_media_creation_timestamp ( $metadata ) {
$creation_date = false ;
if ( empty ( $metadata [ 'fileformat' ] ) ) {
return $creation_date ;
}
switch ( $metadata [ 'fileformat' ] ) {
case 'asf' :
if ( isset ( $metadata [ 'asf' ][ 'file_properties_object' ][ 'creation_date_unix' ] ) ) {
$creation_date = ( int ) $metadata [ 'asf' ][ 'file_properties_object' ][ 'creation_date_unix' ];
}
break ;
case 'matroska' :
case 'webm' :
if ( isset ( $metadata [ 'matroska' ][ 'comments' ][ 'creation_time' ][ '0' ] ) ) {
$creation_date = strtotime ( $metadata [ 'matroska' ][ 'comments' ][ 'creation_time' ][ '0' ] );
2019-04-16 19:56:22 +00:00
} elseif ( isset ( $metadata [ 'matroska' ][ 'info' ][ '0' ][ 'DateUTC_unix' ] ) ) {
2019-03-12 09:27:46 +00:00
$creation_date = ( int ) $metadata [ 'matroska' ][ 'info' ][ '0' ][ 'DateUTC_unix' ];
}
break ;
case 'quicktime' :
case 'mp4' :
if ( isset ( $metadata [ 'quicktime' ][ 'moov' ][ 'subatoms' ][ '0' ][ 'creation_time_unix' ] ) ) {
$creation_date = ( int ) $metadata [ 'quicktime' ][ 'moov' ][ 'subatoms' ][ '0' ][ 'creation_time_unix' ];
}
break ;
}
return $creation_date ;
}
/**
* Encapsulate logic for Attach / Detach actions
*
* @ since 4.2 . 0
*
* @ global wpdb $wpdb WordPress database abstraction object .
*
* @ param int $parent_id Attachment parent ID .
* @ param string $action Optional . Attach / detach action . Accepts 'attach' or 'detach' .
* Default 'attach' .
*/
function wp_media_attach_action ( $parent_id , $action = 'attach' ) {
global $wpdb ;
if ( ! $parent_id ) {
return ;
}
if ( ! current_user_can ( 'edit_post' , $parent_id ) ) {
wp_die ( __ ( 'Sorry, you are not allowed to edit this post.' ) );
}
$ids = array ();
foreach ( ( array ) $_REQUEST [ 'media' ] as $att_id ) {
$att_id = ( int ) $att_id ;
if ( ! current_user_can ( 'edit_post' , $att_id ) ) {
continue ;
}
$ids [] = $att_id ;
}
if ( ! empty ( $ids ) ) {
$ids_string = implode ( ',' , $ids );
if ( 'attach' === $action ) {
$result = $wpdb -> query ( $wpdb -> prepare ( " UPDATE $wpdb->posts SET post_parent = %d WHERE post_type = 'attachment' AND ID IN ( $ids_string ) " , $parent_id ) );
} else {
$result = $wpdb -> query ( " UPDATE $wpdb->posts SET post_parent = 0 WHERE post_type = 'attachment' AND ID IN ( $ids_string ) " );
}
foreach ( $ids as $att_id ) {
clean_attachment_cache ( $att_id );
}
}
if ( isset ( $result ) ) {
$location = 'upload.php' ;
if ( $referer = wp_get_referer () ) {
if ( false !== strpos ( $referer , 'upload.php' ) ) {
$location = remove_query_arg ( array ( 'attached' , 'detach' ), $referer );
}
}
2019-04-16 19:56:22 +00:00
$key = 'attach' === $action ? 'attached' : 'detach' ;
2019-03-12 09:27:46 +00:00
$location = add_query_arg ( array ( $key => $result ), $location );
wp_redirect ( $location );
exit ;
}
}