wp_prepare_attachment_for_js()
wp_prepare_attachment_for_js( int|WP_Post $attachment )…
wp_prepare_attachment_for_js( int|WP_Post $attachment )
为JS准备一个attachment post对象,该对象应该是JSON编码的并适合于附件模型。
Prepares an attachment post object for JS, where it is expected to be JSON-encoded and fit into an Attachment model.
目录锚点:#参数#源码#笔记
参数(Parameters)
参数 | 类型 | 说明 |
---|---|---|
$attachment | (int | WP_Post) | 附件ID或对象。 |
源码(Source)
/** * 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 ( file_exists( $attached_file ) ) { $bytes = filesize( $attached_file ); $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 ); }
更新版本 | 源码位置 | 使用 | 被使用 |
---|---|---|---|
3.5.0 | wp-includes/media.php | 9 | 1 |
笔记(Notes)
以下是此函数返回的字段:
类别:WordPress 函数手册、
本文收集自互联网,转载请注明来源。
如有侵权,请联系 wper_net@163.com 删除。
还没有任何评论,赶紧来占个楼吧!