最新公告
  • 欢迎您光临站盟网(原知事网),一个优质的网站源码基地、精品网站模板和插件。欢迎加入永久SVIP
  • WordPress函数wp_prepare_attachment_for_js()用法 获取附件JSON序列信息

    正文概述 知事网   2020-09-17 11:09   783

    描述:

    获取一个附件(图片/文件)的JSON序列信息

    用法:

    <?php wp_prepare_attachment_for_js( $attachment ) ?>

    参数:

    $attachment
    
    (mixed) (必填) 附件ID或对象
    
    默认值: None

    示例:

    <?php
    add_action( 'wp_head', 'my_js_gallery_add_gallery_images', 1 );
    function my_js_gallery_add_gallery_images(){
    global $post;
    
    $gallery_images = array();
    $attachments = get_posts( array(
    'post_type' => 'attachment',
    'post_status' => 'inherit',
    'post_parent' => $post->ID,
    'post_mime_type' => 'image',
    ) );
    
    foreach( $attachments as $attachment )
    $gallery_images[] = wp_prepare_attachment_for_js( $attachment->ID );
    
    wp_localize_script( 'my-js-gallery', 'my_js_gallery', array(
    'images' => $gallery_images,
    ) );
    }

    源文件:

    /**
    * 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 );
    }

    站盟网 » WordPress函数wp_prepare_attachment_for_js()用法 获取附件JSON序列信息

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者
    请选择支付方式
    ×
    支付宝支付
    微信支付
    余额支付
    ×
    微信扫码支付 0 元