web-dev-qa-db-ja.com

画像のEXIF日時を取得して、 WP 投稿日時

私は現在次のような作業機能を持っています。

add_action('add_attachment', 'create_post_from_image');
function create_post_from_image($id) {
    if (wp_attachment_is_image($id)) {
        $image = get_post($id);
        // get image height/width for auto inserting the image later
        @list($width, $height) = getimagesize(get_attached_file($id));
        $post = array(
            // Set image title as post title
            'post_title' => $image->post_title,
            // Set post to draft for details
            'post_status' => 'draft',
            // "Fake" WordPress insert image code
            'post_content' => '<a href="'.$image->guid.'"><img class="alignnone size-full wp-image-'.$image->ID.'" src="'.$image->guid.'" alt="'.$image->post_name.'" width="'.$width.'" height="'.$height.'" /></a>'
        );
        $postid = wp_insert_post($post);
        if ($postid) {
            // Set image as post featured image
            set_post_thumbnail($postid, $image->ID);
            // Attach image to the post
            wp_update_post(array(
                'ID' => $id,
                'post_parent' => $postid
                )
            );
        }
    }
}

この機能が行うことは、本質的に、Media Libraryにアップロードされた各画像の投稿を作成し、アップロードされた画像を投稿コンテンツに埋め込むことです。それはそれから私がレビューして公開するためのドラフトとしてそれを設定します。

アップロードされた各画像について、埋め込まれたEXIFデータを取得して画像がキャプチャされた日付/時刻を取得し、それをWP投稿の日付/時刻として自動的に設定する創造された?

5
Arkuen

PHPはこの目的のための関数を持っています: exif_read_data
この画像 を使ってテストしました。
あなたの目的のためにこのコードを試してください。

add_action( 'add_attachment', 'create_post_from_image' );
function create_post_from_image( $id ) {
    if ( wp_attachment_is_image( $id ) ) {
        $image = get_post( $id );
        // Get image height/width for auto inserting the image later
        @list( $width, $height ) = getimagesize( get_attached_file( $id ) );

        $post = array(
            // Set image title as post title
            'post_title'   => $image->post_title,
            // Set post to draft for details
            'post_status'  => 'draft',
            // "Fake" WordPress insert image code
            'post_content' => '<a href="' . $image->guid . 
                '"><img class="alignnone size-full wp-image-' . $image->ID . 
                '" src="' . $image->guid . '" alt="' . $image->post_name . 
                '" width="' . $width . '" height="' . $height . '" /></a>'
        );

        // Take image date 
        if ( function_exists( 'exif_read_data' ) ) {
            $exif = exif_read_data( $image->guid );
            if ( ! empty( $exif['DateTime'] ) ) {
                //var_dump( $exif['DateTime'] );
                $post['post_date'] = $exif['DateTime'];
            }
        }

        $postid = wp_insert_post( $post );
        if ( $postid ) {
            // Set image as post featured image
            set_post_thumbnail( $postid, $image->ID );
            // Attach image to the post
            wp_update_post( array(
                'ID'          => $id,
                'post_parent' => $postid
            ) );
        }
    }
}
8
Serg