web-dev-qa-db-ja.com

ヘッダ画像をトリミングするとき、元の画像からメタデータ(名前、説明など)を保持しますか。

私は現在、私のウェブサイトのホームページでスライドショー用の画像を取得するために、WordPressに組み込まれた カスタムヘッダー を使用しています。ほとんどの場合、これは意図したとおりに機能しました。それは私が画像のセットをアップロードして、クライアントに何が起こっているのかを視覚化させることを可能にします。

しかし、私は理想的ではないものを見つけました。ヘッダ画像をアップロードしてからトリミングしても、元の画像に設定した「メタデータ」(名前、説明など)は、新しくトリミングされた画像(元の画像とは別に保存されます)に転送されません。 )これにより、「メタデータ」は、追加時にヘッダー画像用に保存されなかったという印象を与えます。その「メタデータ」を更新する唯一の方法は、メディアライブラリに移動し、そこから編集することです。お分かりのように、これはあまり直感的なUXではなく、混乱を招く可能性があります。

私が考えることができる最善の解決策は、何らかの形でWordPressイベントにフックして、元の画像の「メタデータ」をトリミングされた画像に転送することです。私が言うことができる限りでは、それをする方法はないので、私はあなたの考えを聞きたいです。

私はすべてのアイデアと解決策に寛容です。

これは私が説明している内容をより視覚的に表現したものです。

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

7
Josh Foskett

これは一つの考えです、それはさらなるテストを必要とするかもしれません:

/**
 * Cropped header image with the same description/caption as the original image
 */
add_filter( 'wp_create_file_in_uploads', function( $cropped, $attachment_id )
{
    add_filter( 'wp_insert_attachment_data', function( $data ) use ( $attachment_id)
    {
        if( doing_action( 'wp_ajax_custom-header-crop' ) && is_array( $data ) )
        {
            // Copy the original description to the cropped image
            $data['post_content'] = get_post_field( 'post_content', $attachment_id, 'db' );
            // Copy the original caption to the cropped image
            $data['post_excerpt'] = get_post_field( 'post_excerpt', $attachment_id, 'db' );
        }
        return $data;
    } );
    return $cropped;
}, 10, 2 );

ここではdescriptioncaptionを元の画像からwp_create_file_in_uploadswp_insert_attachment_dataフィルタを通してコピーします。それをカスタムヘッダajax cropのコンテキストで制限するために、それをチェックします。

 doing_action('wp_ajax_custom-header-crop')` 

ここでは、useキーワードを使って、元の画像の$attachment_idクロージャーに渡します。

画像メタもコピーする必要がある場合は、 wp_header_image_attachment_metadata フィルタを介して同様の方法を使用できます。

/**
 * Cropped header image with the same image meta as the original one
 */
add_filter( 'wp_create_file_in_uploads', function( $cropped, $attachment_id )
{
    add_filter( 'wp_header_image_attachment_metadata', function( $metadata ) use ( $attachment_id )
    {
        if( doing_action( 'wp_ajax_custom-header-crop' ) && isset( $metadata['image_meta'] ) )
        {
            // Fetch the image meta of the original image
            $original_metadata = wp_get_attachment_metadata( $attachment_id );
            // Copy the original image meta data for the cropped image
            if( is_array( $original_metadata['image_meta'] ) )
                $metadata['image_meta'] = $original_metadata['image_meta'];
        }       
        return $metadata;
    } );
    return $cropped;
}, 10, 2 );

あなたのニーズに合わせて調整できることを願います。

4
birgire