function render_attachment($id = 0, $field) { // vars $attachment = wp_prepare_attachment_for_js($id); $thumb = ''; $prefix = "attachments[{$id}]"; $compat = get_compat_media_markup($id); $dimentions = ''; // thumb if (isset($attachment['thumb']['src'])) { // video $thumb = $attachment['thumb']['src']; } elseif (isset($attachment['sizes']['thumbnail']['url'])) { // image $thumb = $attachment['sizes']['thumbnail']['url']; } elseif ($attachment['type'] === 'image') { // svg $thumb = $attachment['url']; } else { // fallback (perhaps attachment does not exist) $thumb = $attachment['icon']; } // dimentions if ($attachment['type'] === 'audio') { $dimentions = __('Length', 'acf') . ': ' . $attachment['fileLength']; } elseif (!empty($attachment['width'])) { $dimentions = $attachment['width'] . ' x ' . $attachment['height']; } if ($attachment['filesizeHumanReadable']) { $dimentions .= ' (' . $attachment['filesizeHumanReadable'] . ')'; } ?> <div class="acf-gallery-side-info acf-cf"> <img src="<?php echo $thumb; ?> " alt="<?php echo $attachment['alt']; ?> " /> <p class="filename"><strong><?php echo $attachment['filename']; ?> </strong></p> <p class="uploaded"><?php echo $attachment['dateFormatted']; ?> </p> <p class="dimensions"><?php echo $dimentions; ?> </p> <p class="actions"><a href="#" class="edit-attachment" data-id="<?php echo $id; ?> "><?php _e('Edit', 'acf'); ?> </a> <a href="#" class="remove-attachment" data-id="<?php echo $id; ?> "><?php _e('Remove', 'acf'); ?> </a></p> </div> <table class="form-table"> <tbody> <?php acf_render_field_wrap(array('name' => 'title', 'prefix' => $prefix, 'type' => 'text', 'label' => 'Title', 'value' => $attachment['title']), 'tr'); acf_render_field_wrap(array('name' => 'caption', 'prefix' => $prefix, 'type' => 'textarea', 'label' => 'Caption', 'value' => $attachment['caption']), 'tr'); acf_render_field_wrap(array('name' => 'alt', 'prefix' => $prefix, 'type' => 'text', 'label' => 'Alt Text', 'value' => $attachment['alt']), 'tr'); acf_render_field_wrap(array('name' => 'description', 'prefix' => $prefix, 'type' => 'textarea', 'label' => 'Description', 'value' => $attachment['description']), 'tr'); ?> </tbody> </table> <?php echo $compat['item']; ?> <?php }
/** * Displays the image and editor in the post editor * * @since 3.5.0 */ function edit_form_image_editor($post) { $open = isset($_GET['image-editor']); if ($open) { require_once ABSPATH . 'wp-admin/includes/image-edit.php'; } $thumb_url = false; if ($attachment_id = intval($post->ID)) { $thumb_url = wp_get_attachment_image_src($attachment_id, array(900, 450), true); } $alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true); $att_url = wp_get_attachment_url($post->ID); ?> <div class="wp_attachment_holder"> <?php if (wp_attachment_is_image($post->ID)) { $image_edit_button = ''; if (wp_image_editor_supports(array('mime_type' => $post->post_mime_type))) { $nonce = wp_create_nonce("image_editor-{$post->ID}"); $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>"; } ?> <div class="imgedit-response" id="imgedit-response-<?php echo $attachment_id; ?> "></div> <div<?php if ($open) { echo ' style="display:none"'; } ?> class="wp_attachment_image" 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> <p><?php echo $image_edit_button; ?> </p> </div> <div<?php if (!$open) { echo ' style="display:none"'; } ?> class="image-editor" id="image-editor-<?php echo $attachment_id; ?> "> <?php if ($open) { wp_image_editor($attachment_id); } ?> </div> <?php } elseif ($attachment_id && 0 === strpos($post->post_mime_type, 'audio/')) { wp_maybe_generate_attachment_metadata($post); echo wp_audio_shortcode(array('src' => $att_url)); } elseif ($attachment_id && 0 === strpos($post->post_mime_type, 'video/')) { wp_maybe_generate_attachment_metadata($post); $meta = wp_get_attachment_metadata($attachment_id); $w = !empty($meta['width']) ? min($meta['width'], 640) : 0; $h = !empty($meta['height']) ? $meta['height'] : 0; if ($h && $w < $meta['width']) { $h = round($meta['height'] * $w / $meta['width']); } $attr = array('src' => $att_url); if (!empty($w) && !empty($h)) { $attr['width'] = $w; $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); } ?> </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 } ?> <?php $quicktags_settings = array('buttons' => 'strong,em,link,block,del,ins,img,ul,ol,li,code,close'); $editor_args = array('textarea_name' => 'content', 'textarea_rows' => 5, 'media_buttons' => false, 'tinymce' => false, 'quicktags' => $quicktags_settings); ?> <label for="content"><strong><?php _e('Description'); ?> </strong><?php if (preg_match('#^(audio|video)/#', $post->post_mime_type)) { echo ': ' . __('Displayed on attachment pages.'); } ?> </label> <?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 the image and editor in the post editor * * @since 3.5.0 */ function edit_form_image_editor() { $post = get_post(); $thumb_url = false; if ($attachment_id = intval($post->ID)) { $thumb_url = wp_get_attachment_image_src($attachment_id, array(900, 600), true); } $filename = esc_html(basename($post->guid)); $title = esc_attr($post->post_title); $alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true); $media_dims = ''; $meta = wp_get_attachment_metadata($post->ID); if (is_array($meta) && array_key_exists('width', $meta) && array_key_exists('height', $meta)) { $media_dims .= "<span id='media-dims-{$post->ID}'>{$meta['width']} × {$meta['height']}</span> "; } $media_dims = apply_filters('media_meta', $media_dims, $post); $att_url = wp_get_attachment_url($post->ID); $image_edit_button = ''; if (wp_image_editor_supports(array('mime_type' => $post->post_mime_type))) { $nonce = wp_create_nonce("image_editor-{$post->ID}"); $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>"; } ?> <div class="wp_attachment_holder"> <div class="imgedit-response" id="imgedit-response-<?php echo $attachment_id; ?> "></div> <div class="wp_attachment_image" 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> <p><?php echo $image_edit_button; ?> </p> </div> <div style="display:none" class="image-editor" id="image-editor-<?php echo $attachment_id; ?> "></div> </div> <div class="wp_attachment_details"> <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 } ?> </div> <?php $extras = get_compat_media_markup($post->ID); echo $extras['item']; foreach ($extras['hidden'] as $hidden_field => $value) { echo '<input type="hidden" name="' . esc_attr($hidden_field) . '" value="' . esc_attr($value) . '" />' . "\n"; } echo '<input type="hidden" id="image-edit-context" value="edit-attachment" />' . "\n"; }
/** * Prepares an attachment post object for JS, where it is expected * to be JSON-encoded and fit into an Attachment model. * * @since 3.5.0 * * @param mixed $attachment Attachment ID or object. * @return array|void Array of attachment details. */ function wp_prepare_attachment_for_js($attachment) { if (!($attachment = get_post($attachment))) { return; } if ('attachment' != $attachment->post_type) { return; } $meta = wp_get_attachment_metadata($attachment->ID); if (false !== strpos($attachment->post_mime_type, '/')) { list($type, $subtype) = explode('/', $attachment->post_mime_type); } else { list($type, $subtype) = array($attachment->post_mime_type, ''); } $attachment_url = wp_get_attachment_url($attachment->ID); $response = array('id' => $attachment->ID, 'title' => $attachment->post_title, 'filename' => wp_basename(get_attached_file($attachment->ID)), 'url' => $attachment_url, 'link' => get_attachment_link($attachment->ID), 'alt' => get_post_meta($attachment->ID, '_wp_attachment_image_alt', true), 'author' => $attachment->post_author, 'description' => $attachment->post_content, 'caption' => $attachment->post_excerpt, 'name' => $attachment->post_name, 'status' => $attachment->post_status, 'uploadedTo' => $attachment->post_parent, 'date' => strtotime($attachment->post_date_gmt) * 1000, 'modified' => strtotime($attachment->post_modified_gmt) * 1000, 'menuOrder' => $attachment->menu_order, 'mime' => $attachment->post_mime_type, 'type' => $type, 'subtype' => $subtype, 'icon' => wp_mime_type_icon($attachment->ID), 'dateFormatted' => mysql2date(get_option('date_format'), $attachment->post_date), 'nonces' => array('update' => false, 'delete' => false, 'edit' => false), 'editLink' => false, 'meta' => false); $author = new WP_User($attachment->post_author); $response['authorName'] = $author->display_name; if ($attachment->post_parent) { $post_parent = get_post($attachment->post_parent); } else { $post_parent = false; } if ($post_parent) { $parent_type = get_post_type_object($post_parent->post_type); if ($parent_type && $parent_type->show_ui && current_user_can('edit_post', $attachment->post_parent)) { $response['uploadedToLink'] = get_edit_post_link($attachment->post_parent, 'raw'); } $response['uploadedToTitle'] = $post_parent->post_title ? $post_parent->post_title : __('(no title)'); } $attached_file = get_attached_file($attachment->ID); if (isset($meta['filesize'])) { $bytes = $meta['filesize']; } elseif (file_exists($attached_file)) { $bytes = filesize($attached_file); } else { $bytes = ''; } if ($bytes) { $response['filesizeInBytes'] = $bytes; $response['filesizeHumanReadable'] = size_format($bytes); } if (current_user_can('edit_post', $attachment->ID)) { $response['nonces']['update'] = wp_create_nonce('update-post_' . $attachment->ID); $response['nonces']['edit'] = wp_create_nonce('image_editor-' . $attachment->ID); $response['editLink'] = get_edit_post_link($attachment->ID, 'raw'); } if (current_user_can('delete_post', $attachment->ID)) { $response['nonces']['delete'] = wp_create_nonce('delete-post_' . $attachment->ID); } if ($meta && 'image' === $type) { $sizes = array(); /** This filter is documented in wp-admin/includes/media.php */ $possible_sizes = apply_filters('image_size_names_choose', array('thumbnail' => __('Thumbnail'), 'medium' => __('Medium'), 'large' => __('Large'), 'full' => __('Full Size'))); unset($possible_sizes['full']); // Loop through all potential sizes that may be chosen. Try to do this with some efficiency. // First: run the image_downsize filter. If it returns something, we can use its data. // If the filter does not return something, then image_downsize() is just an expensive // way to check the image metadata, which we do second. foreach ($possible_sizes as $size => $label) { /** This filter is documented in wp-includes/media.php */ if ($downsize = apply_filters('image_downsize', false, $attachment->ID, $size)) { if (!$downsize[3]) { continue; } $sizes[$size] = array('height' => $downsize[2], 'width' => $downsize[1], 'url' => $downsize[0], 'orientation' => $downsize[2] > $downsize[1] ? 'portrait' : 'landscape'); } elseif (isset($meta['sizes'][$size])) { if (!isset($base_url)) { $base_url = str_replace(wp_basename($attachment_url), '', $attachment_url); } // Nothing from the filter, so consult image metadata if we have it. $size_meta = $meta['sizes'][$size]; // We have the actual image size, but might need to further constrain it if content_width is narrower. // Thumbnail, medium, and full sizes are also checked against the site's height/width options. list($width, $height) = image_constrain_size_for_editor($size_meta['width'], $size_meta['height'], $size, 'edit'); $sizes[$size] = array('height' => $height, 'width' => $width, 'url' => $base_url . $size_meta['file'], 'orientation' => $height > $width ? 'portrait' : 'landscape'); } } $sizes['full'] = array('url' => $attachment_url); if (isset($meta['height'], $meta['width'])) { $sizes['full']['height'] = $meta['height']; $sizes['full']['width'] = $meta['width']; $sizes['full']['orientation'] = $meta['height'] > $meta['width'] ? 'portrait' : 'landscape'; } $response = array_merge($response, array('sizes' => $sizes), $sizes['full']); } elseif ($meta && 'video' === $type) { if (isset($meta['width'])) { $response['width'] = (int) $meta['width']; } if (isset($meta['height'])) { $response['height'] = (int) $meta['height']; } } if ($meta && ('audio' === $type || 'video' === $type)) { if (isset($meta['length_formatted'])) { $response['fileLength'] = $meta['length_formatted']; } $response['meta'] = array(); foreach (wp_get_attachment_id3_keys($attachment, 'js') as $key => $label) { $response['meta'][$key] = false; if (!empty($meta[$key])) { $response['meta'][$key] = $meta[$key]; } } $id = get_post_thumbnail_id($attachment->ID); if (!empty($id)) { list($src, $width, $height) = wp_get_attachment_image_src($id, 'full'); $response['image'] = compact('src', 'width', 'height'); list($src, $width, $height) = wp_get_attachment_image_src($id, 'thumbnail'); $response['thumb'] = compact('src', 'width', 'height'); } else { $src = wp_mime_type_icon($attachment->ID); $width = 48; $height = 64; $response['image'] = compact('src', 'width', 'height'); $response['thumb'] = compact('src', 'width', 'height'); } } if (function_exists('get_compat_media_markup')) { $response['compat'] = get_compat_media_markup($attachment->ID, array('in_modal' => true)); } /** * Filter the attachment data prepared for JavaScript. * * @since 3.5.0 * * @param array $response Array of prepared attachment data. * @param int|object $attachment Attachment ID or object. * @param array $meta Array of attachment meta data. */ return apply_filters('wp_prepare_attachment_for_js', $response, $attachment, $meta); }
/** * Prepares an attachment post object for JS, where it is expected * to be JSON-encoded and fit into an Attachment model. * * @since 3.5.0 * * @param mixed $attachment Attachment ID or object. * @return array Array of attachment details. */ function wp_prepare_attachment_for_js( $attachment ) { if ( ! $attachment = get_post( $attachment ) ) return; if ( 'attachment' != $attachment->post_type ) return; $meta = wp_get_attachment_metadata( $attachment->ID ); if ( false !== strpos( $attachment->post_mime_type, '/' ) ) list( $type, $subtype ) = explode( '/', $attachment->post_mime_type ); else list( $type, $subtype ) = array( $attachment->post_mime_type, '' ); $attachment_url = wp_get_attachment_url( $attachment->ID ); $response = array( 'id' => $attachment->ID, 'title' => $attachment->post_title, 'filename' => wp_basename( $attachment->guid ), 'url' => $attachment_url, 'link' => get_attachment_link( $attachment->ID ), 'alt' => get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true ), 'author' => $attachment->post_author, 'description' => $attachment->post_content, 'caption' => $attachment->post_excerpt, 'name' => $attachment->post_name, 'status' => $attachment->post_status, 'uploadedTo' => $attachment->post_parent, 'date' => strtotime( $attachment->post_date_gmt ) * 1000, 'modified' => strtotime( $attachment->post_modified_gmt ) * 1000, 'menuOrder' => $attachment->menu_order, 'mime' => $attachment->post_mime_type, 'type' => $type, 'subtype' => $subtype, 'icon' => wp_mime_type_icon( $attachment->ID ), 'dateFormatted' => mysql2date( get_option('date_format'), $attachment->post_date ), 'nonces' => array( 'update' => false, 'delete' => false, ), 'editLink' => false, ); if ( current_user_can( 'edit_post', $attachment->ID ) ) { $response['nonces']['update'] = wp_create_nonce( 'update-post_' . $attachment->ID ); $response['editLink'] = get_edit_post_link( $attachment->ID, 'raw' ); } if ( current_user_can( 'delete_post', $attachment->ID ) ) $response['nonces']['delete'] = wp_create_nonce( 'delete-post_' . $attachment->ID ); if ( $meta && 'image' === $type ) { $sizes = array(); /** This filter is documented in wp-admin/includes/media.php */ $possible_sizes = apply_filters( 'image_size_names_choose', array( 'thumbnail' => __('Thumbnail'), 'medium' => __('Medium'), 'large' => __('Large'), 'full' => __('Full Size'), ) ); unset( $possible_sizes['full'] ); // Loop through all potential sizes that may be chosen. Try to do this with some efficiency. // First: run the image_downsize filter. If it returns something, we can use its data. // If the filter does not return something, then image_downsize() is just an expensive // way to check the image metadata, which we do second. foreach ( $possible_sizes as $size => $label ) { if ( $downsize = apply_filters( 'image_downsize', false, $attachment->ID, $size ) ) { if ( ! $downsize[3] ) continue; $sizes[ $size ] = array( 'height' => $downsize[2], 'width' => $downsize[1], 'url' => $downsize[0], 'orientation' => $downsize[2] > $downsize[1] ? 'portrait' : 'landscape', ); } elseif ( isset( $meta['sizes'][ $size ] ) ) { if ( ! isset( $base_url ) ) $base_url = str_replace( wp_basename( $attachment_url ), '', $attachment_url ); // Nothing from the filter, so consult image metadata if we have it. $size_meta = $meta['sizes'][ $size ]; // We have the actual image size, but might need to further constrain it if content_width is narrower. // Thumbnail, medium, and full sizes are also checked against the site's height/width options. list( $width, $height ) = image_constrain_size_for_editor( $size_meta['width'], $size_meta['height'], $size, 'edit' ); $sizes[ $size ] = array( 'height' => $height, 'width' => $width, 'url' => $base_url . $size_meta['file'], 'orientation' => $height > $width ? 'portrait' : 'landscape', ); } } $sizes['full'] = array( 'url' => $attachment_url ); if ( isset( $meta['height'], $meta['width'] ) ) { $sizes['full']['height'] = $meta['height']; $sizes['full']['width'] = $meta['width']; $sizes['full']['orientation'] = $meta['height'] > $meta['width'] ? 'portrait' : 'landscape'; } $response = array_merge( $response, array( 'sizes' => $sizes ), $sizes['full'] ); } elseif ( $meta && 'video' === $type ) { if ( isset( $meta['width'] ) ) $response['width'] = (int) $meta['width']; if ( isset( $meta['height'] ) ) $response['height'] = (int) $meta['height']; } if ( $meta && ( 'audio' === $type || 'video' === $type ) ) { if ( isset( $meta['length_formatted'] ) ) $response['fileLength'] = $meta['length_formatted']; } if ( function_exists('get_compat_media_markup') ) $response['compat'] = get_compat_media_markup( $attachment->ID, array( 'in_modal' => true ) ); return apply_filters( 'wp_prepare_attachment_for_js', $response, $attachment, $meta ); }
function render_attachment($id = 0, $field) { $attachment = wp_prepare_attachment_for_js($id); $prefix = "attachments[{$id}]"; $compat = get_compat_media_markup($id); ?> <div class="acf-gallery-side-info acf-cf"> <img src="<?php echo $attachment['sizes']['thumbnail']['url']; ?> " alt="<?php echo $attachment['alt']; ?> " /> <p class="filename"><strong><?php _e('Attachment Details', 'acf'); ?> </strong></p> <p class="uploaded"><?php echo $attachment['dateFormatted']; ?> </p> <p class="dimensions"><?php echo $attachment['width']; ?> × <?php echo $attachment['height']; ?> </p> </div> <table class="form-table"> <tbody> <?php acf_render_field_wrap(array('name' => 'title', 'prefix' => $prefix, 'type' => 'text', 'label' => 'Title', 'value' => $attachment['title']), 'tr'); acf_render_field_wrap(array('name' => 'caption', 'prefix' => $prefix, 'type' => 'textarea', 'label' => 'Caption', 'value' => $attachment['caption']), 'tr'); acf_render_field_wrap(array('name' => 'alt', 'prefix' => $prefix, 'type' => 'text', 'label' => 'Alt Text', 'value' => $attachment['alt']), 'tr'); acf_render_field_wrap(array('name' => 'description', 'prefix' => $prefix, 'type' => 'textarea', 'label' => 'Description', 'value' => $attachment['description']), 'tr'); ?> </tbody> </table> <?php echo $compat['item']; ?> <?php }
/** * Displays the image and editor in the post editor * * @since 3.5.0 */ function edit_form_image_editor() { $post = get_post(); $open = isset($_GET['image-editor']); if ($open) { require_once ABSPATH . 'wp-admin/includes/image-edit.php'; } $thumb_url = false; if ($attachment_id = intval($post->ID)) { $thumb_url = wp_get_attachment_image_src($attachment_id, array(900, 450), true); } $filename = esc_html(basename($post->guid)); $title = esc_attr($post->post_title); $alt_text = get_post_meta($post->ID, '_wp_attachment_image_alt', true); $att_url = wp_get_attachment_url($post->ID); if (wp_attachment_is_image($post->ID)) { $image_edit_button = ''; if (wp_image_editor_supports(array('mime_type' => $post->post_mime_type))) { $nonce = wp_create_nonce("image_editor-{$post->ID}"); $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>"; } ?> <div class="wp_attachment_holder"> <div class="imgedit-response" id="imgedit-response-<?php echo $attachment_id; ?> "></div> <div<?php if ($open) { echo ' style="display:none"'; } ?> class="wp_attachment_image" 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> <p><?php echo $image_edit_button; ?> </p> </div> <div<?php if (!$open) { echo ' style="display:none"'; } ?> class="image-editor" id="image-editor-<?php echo $attachment_id; ?> "> <?php if ($open) { wp_image_editor($attachment_id); } ?> </div> </div> <?php } ?> <div class="wp_attachment_details"> <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 } ?> <?php $quicktags_settings = array('buttons' => 'strong,em,link,block,del,ins,img,ul,ol,li,code,spell,close'); $editor_args = array('textarea_name' => 'content', 'textarea_rows' => 5, 'media_buttons' => false, 'tinymce' => false, 'quicktags' => $quicktags_settings); ?> <label for="content"><strong><?php _e('Description'); ?> </strong></label> <?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"; }
/** * Prepares an attachment post object for JS, where it is expected * to be JSON-encoded and fit into an Attachment model. * * @since 3.5.0 * * @param mixed $attachment Attachment ID or object. * @return array Array of attachment details. */ function wp_prepare_attachment_for_js($attachment) { if (!($attachment = get_post($attachment))) { return; } if ('attachment' != $attachment->post_type) { return; } $meta = wp_get_attachment_metadata($attachment->ID); if (false !== strpos($attachment->post_mime_type, '/')) { list($type, $subtype) = explode('/', $attachment->post_mime_type); } else { list($type, $subtype) = array($attachment->post_mime_type, ''); } $attachment_url = wp_get_attachment_url($attachment->ID); $response = array('id' => $attachment->ID, 'title' => $attachment->post_title, 'filename' => basename($attachment->guid), 'url' => $attachment_url, 'link' => get_attachment_link($attachment->ID), 'alt' => get_post_meta($attachment->ID, '_wp_attachment_image_alt', true), 'author' => $attachment->post_author, 'description' => $attachment->post_content, 'caption' => $attachment->post_excerpt, 'name' => $attachment->post_name, 'status' => $attachment->post_status, 'uploadedTo' => $attachment->post_parent, 'date' => strtotime($attachment->post_date_gmt) * 1000, 'modified' => strtotime($attachment->post_modified_gmt) * 1000, 'menuOrder' => $attachment->menu_order, 'mime' => $attachment->post_mime_type, 'type' => $type, 'subtype' => $subtype, 'icon' => wp_mime_type_icon($attachment->ID), 'dateFormatted' => mysql2date(get_option('date_format'), $attachment->post_date), 'nonces' => array('update' => wp_create_nonce('update-post_' . $attachment->ID), 'delete' => wp_create_nonce('delete-post_' . $attachment->ID))); if ($meta && 'image' === $type) { $sizes = array(); $possible_sizes = apply_filters('image_size_names_choose', array('thumbnail' => __('Thumbnail'), 'medium' => __('Medium'), 'large' => __('Large'), 'full' => __('Full Size'))); unset($possible_sizes['full']); // Loop through all potential sizes that may be chosen. Try to do this with some efficiency. // First: run the image_downsize filter. If it returns something, we can use its data. // If the filter does not return something, then image_downsize() is just an expensive // way to check the image metadata, which we do second. foreach ($possible_sizes as $size => $label) { if ($downsize = apply_filters('image_downsize', false, $attachment->ID, $size)) { if (!$downsize[3]) { continue; } $sizes[$size] = array('height' => $downsize[2], 'width' => $downsize[1], 'url' => $downsize[0], 'orientation' => $downsize[2] > $downsize[1] ? 'portrait' : 'landscape'); } elseif (isset($meta['sizes'][$size])) { if (!isset($base_url)) { $base_url = str_replace(wp_basename($attachment_url), '', $attachment_url); } // Nothing from the filter, so consult image metadata if we have it. $size_meta = $meta['sizes'][$size]; $sizes[$size] = array('height' => $size_meta['height'], 'width' => $size_meta['width'], 'url' => $base_url . $size_meta['file'], 'orientation' => $size_meta['height'] > $size_meta['width'] ? 'portrait' : 'landscape'); } } $sizes['full'] = array('height' => $meta['height'], 'width' => $meta['width'], 'url' => $attachment_url, 'orientation' => $meta['height'] > $meta['width'] ? 'portrait' : 'landscape'); $response = array_merge($response, array('sizes' => $sizes), $sizes['full']); } if (function_exists('get_compat_media_markup')) { $response['compat'] = get_compat_media_markup($attachment->ID, array('taxonomies' => true)); } return apply_filters('wp_prepare_attachment_for_js', $response, $attachment, $meta); }
/** * Prepares an attachment post object for JS, where it is expected * to be JSON-encoded and fit into an Attachment model. * * @since 3.5.0 * * @param mixed $attachment Attachment ID or object. * @return array Array of attachment details. */ function wp_prepare_attachment_for_js($attachment) { if (!($attachment = get_post($attachment))) { return; } if ('attachment' != $attachment->post_type) { return; } $meta = wp_get_attachment_metadata($attachment->ID); list($type, $subtype) = explode('/', $attachment->post_mime_type); $attachment_url = wp_get_attachment_url($attachment->ID); $response = array('id' => $attachment->ID, 'title' => $attachment->post_title, 'filename' => basename($attachment->guid), 'url' => $attachment_url, 'link' => get_attachment_link($attachment->ID), 'alt' => get_post_meta($attachment->ID, '_wp_attachment_image_alt', true), 'author' => $attachment->post_author, 'description' => $attachment->post_content, 'caption' => $attachment->post_excerpt, 'name' => $attachment->post_name, 'status' => $attachment->post_status, 'uploadedTo' => $attachment->post_parent, 'date' => strtotime($attachment->post_date_gmt) * 1000, 'modified' => strtotime($attachment->post_modified_gmt) * 1000, 'mime' => $attachment->post_mime_type, 'type' => $type, 'subtype' => $subtype, 'icon' => wp_mime_type_icon($attachment->ID), 'dateFormatted' => mysql2date(get_option('date_format'), $attachment->post_date)); if ($meta && 'image' === $type) { $sizes = array(); $base_url = str_replace(wp_basename($attachment_url), '', $attachment_url); if (isset($meta['sizes'])) { foreach ($meta['sizes'] as $slug => $size) { $sizes[$slug] = array('height' => $size['height'], 'width' => $size['width'], 'url' => $base_url . $size['file'], 'orientation' => $size['height'] > $size['width'] ? 'portrait' : 'landscape'); } } $sizes['full'] = array('height' => $meta['height'], 'width' => $meta['width'], 'url' => $attachment_url, 'orientation' => $meta['height'] > $meta['width'] ? 'portrait' : 'landscape'); $response = array_merge($response, array('sizes' => $sizes), $sizes['full']); } if (function_exists('get_compat_media_markup')) { $response['compat'] = get_compat_media_markup($attachment->ID, array('taxonomies' => true)); } return apply_filters('wp_prepare_attachment_for_js', $response, $attachment, $meta); }