Behalten Sie beim Zuschneiden eines Header-Bilds Metadaten (z. B. Name, Beschreibung usw.) aus dem Originalbild bei?

7

Ich verwende derzeit die in WordPress integrierten benutzerdefinierten Header , um Bilder für eine Diashow auf der Homepage meiner Website abzurufen. Zum größten Teil hat dies wie beabsichtigt funktioniert; Dadurch kann ich eine Reihe von Bildern hochladen und den Kunden visualisieren lassen, was passiert.

Ich fand jedoch etwas, das nicht ideal war. Wenn Sie ein Header-Bild hochladen und dann zuschneiden, werden die "Metadaten" (dh Name, Beschreibung usw.), die Sie für das Originalbild festgelegt haben, nicht auf das neu zugeschnittene Bild übertragen (das getrennt vom Original gespeichert wird) ). Dies erweckt den Eindruck, dass die "Metadaten" beim Hinzufügen nicht für das Header-Bild gespeichert wurden. Die einzige Möglichkeit, diese "Metadaten" zu aktualisieren, besteht darin, in die Medienbibliothek zu wechseln und sie von dort aus zu bearbeiten. Wie Sie sehen können, ist es keine sehr intuitive Benutzeroberfläche und kann Verwirrung stiften.

Die beste Lösung, die ich mir vorstellen kann, wäre, sich irgendwie in ein WordPress-Ereignis einzumischen und die "Metadaten" im Originalbild auf das zugeschnittene Bild zu übertragen. Obwohl es, soweit ich das beurteilen kann, keine Möglichkeit gibt, genau das zu tun, würde ich gerne Ihre Gedanken hören.

Ich bin offen für alle Ideen und Lösungen.

Hier ist eine visuellere Darstellung dessen, was ich beschreibe:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Josh Foskett
quelle
1
+1 Für die visuell klare Darstellung Ihrer Frage
cjbj

Antworten:

4

Hier ist eine Idee, die möglicherweise weiter getestet werden muss:

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

Hier kopieren wir das descriptionund captionvom Originalbild durch die wp_create_file_in_uploadsund wp_insert_attachment_dataFilter. Um es im Kontext des benutzerdefinierten Headers Ajax Crop einzuschränken , überprüfen wir es mit:

 doing_action('wp_ajax_custom-header-crop')` 

Hier geben wir auch $attachment_iddas Originalbild mit Hilfe des Schlüsselworts use in den Abschluss weiter .

Wenn wir auch das Bild-Meta kopieren müssen , können wir einen ähnlichen Ansatz über den wp_header_image_attachment_metadataFilter verwenden:

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

Ich hoffe, Sie können es an Ihre Bedürfnisse anpassen.

Birgire
quelle