wp_generate_attachment_metadata() – Generate attachment meta data and create image sub-sizes for images.

You appear to be a bot. Output may be restricted

Description

Generate attachment meta data and create image sub-sizes for images.

Usage

$array = wp_generate_attachment_metadata( $attachment_id, $file );

Parameters

$attachment_id
( int ) required – Attachment ID to process.
$file
( string ) required – Filepath of the attached image.

Returns

array Metadata for attachment.

Source

File name: wordpress/wp-admin/includes/image.php


Lines:

1 to 100 of 177
function wp_generate_attachment_metadata( $attachment_id, $file ) {
  $attachment = get_post( $attachment_id );

  $metadata  = array();
  $support   = false;
  $mime_type = get_post_mime_type( $attachment );

  if ( preg_match( '!^image/!', $mime_type ) && file_is_displayable_image( $file ) ) {
    // Make thumbnails and other intermediate sizes.
    $metadata = wp_create_image_subsizes( $file, $attachment_id );
  } elseif ( wp_attachment_is( 'video', $attachment ) ) {
    $metadata = wp_read_video_metadata( $file );
    $support  = current_theme_supports( 'post-thumbnails', 'attachment:video' ) || post_type_supports( 'attachment:video', 'thumbnail' );
  } elseif ( wp_attachment_is( 'audio', $attachment ) ) {
    $metadata = wp_read_audio_metadata( $file );
    $support  = current_theme_supports( 'post-thumbnails', 'attachment:audio' ) || post_type_supports( 'attachment:audio', 'thumbnail' );
  }

  /*
	 * wp_read_video_metadata() and wp_read_audio_metadata() return `false`
	 * if the attachment does not exist in the local filesystem,
	 * so make sure to convert the value to an array.
	 */
  if ( ! is_array( $metadata ) ) {
    $metadata = array();
  }

  if ( $support && ! empty( $metadata['image']['data'] ) ) {
    // Check for existing cover.
    $hash   = md5( $metadata['image']['data'] );
    $posts  = get_posts(
      array(
        'fields'         => 'ids',
        'post_type'      => 'attachment',
        'post_mime_type' => $metadata['image']['mime'],
        'post_status'    => 'inherit',
        'posts_per_page' => 1,
        'meta_key'       => '_cover_hash',
        'meta_value'     => $hash,
      )
    );
    $exists = reset( $posts );

    if ( ! empty( $exists ) ) {
      update_post_meta( $attachment_id, '_thumbnail_id', $exists );
    } else {
      $ext = '.jpg';
      switch ( $metadata['image']['mime'] ) {
        case 'image/gif':
          $ext = '.gif';
          break;
        case 'image/png':
          $ext = '.png';
          break;
        case 'image/webp':
          $ext = '.webp';
          break;
      }
      $basename = str_replace( '.', '-', wp_basename( $file ) ) . '-image' . $ext;
      $uploaded = wp_upload_bits( $basename, '', $metadata['image']['data'] );
      if ( false === $uploaded['error'] ) {
        $image_attachment = array(
          'post_mime_type' => $metadata['image']['mime'],
          'post_type'      => 'attachment',
          'post_content'   => '',
        );
        
/**
 * Filters the parameters for the attachment thumbnail creation.
 *
 * @since 3.9.0
 *
 * @param array $image_attachment An array of parameters to create the thumbnail.
 * @param array $metadata         Current attachment metadata.
 * @param array $uploaded         {
 *     Information about the newly-uploaded file.
 *
 *     @type string $file  Filename of the newly-uploaded file.
 *     @type string $url   URL of the uploaded file.
 *     @type string $type  File type.
 * }
 */
        $image_attachment = apply_filters( 'attachment_thumbnail_args', $image_attachment, $metadata, $uploaded );

        $sub_attachment_id = wp_insert_attachment( $image_attachment, $uploaded['file'] );
        add_post_meta( $sub_attachment_id, '_cover_hash', $hash );
        $attach_data = wp_generate_attachment_metadata( $sub_attachment_id, $uploaded['file'] );
        wp_update_attachment_metadata( $sub_attachment_id, $attach_data );
        update_post_meta( $attachment_id, '_thumbnail_id', $sub_attachment_id );
      }
    }
  } elseif ( 'application/pdf' === $mime_type ) {
    // Try to create image thumbnails for PDFs.

    $fallback_sizes = array(
      'thumbnail',
      'medium',
      'large',
    );

    

 View on GitHub View on Trac