Khi cắt ảnh tiêu đề, giữ lại dữ liệu meta (ví dụ như tên, mô tả, v.v.) từ ảnh gốc?


7

Tôi hiện đang sử dụng Tiêu đề tùy chỉnh tích hợp của WordPress để lấy hình ảnh cho trình chiếu trên trang chủ của trang web của tôi. Đối với hầu hết các phần, điều này đã làm việc như dự định; nó cho phép tôi tải lên một tập hợp các hình ảnh và để khách hàng hình dung những gì đang xảy ra.

Tuy nhiên, tôi tìm thấy một cái gì đó không lý tưởng. Khi bạn tải lên một hình ảnh tiêu đề và sau đó cắt nó, "dữ liệu meta" (nghĩa là tên, mô tả, v.v.) mà bạn đặt trên hình ảnh gốc sẽ không chuyển sang hình ảnh mới được cắt (được lưu riêng biệt với hình ảnh gốc ). Điều này mang lại ấn tượng rằng "dữ liệu meta" không được lưu cho hình ảnh tiêu đề khi bạn thêm nó. Cách duy nhất để sau đó cập nhật "dữ liệu meta" đó là vào thư viện phương tiện và chỉnh sửa nó từ đó. Như bạn có thể thấy, nó không phải là một UX rất trực quan và có thể gây nhầm lẫn.

Giải pháp tốt nhất tôi có thể nghĩ đến là bằng cách nào đó móc vào một sự kiện WordPress và chuyển "dữ liệu meta" trong ảnh gốc sang ảnh đã cắt. Mặc dù theo như tôi có thể nói, không có cách nào để làm điều đó, vì vậy tôi muốn nghe suy nghĩ của bạn.

Tôi cởi mở với tất cả các ý tưởng và giải pháp.

Đây là một đại diện trực quan hơn về những gì tôi đang mô tả:

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây


1
+1 Để trình bày câu hỏi của bạn theo cách trực quan rõ ràng như vậy
cjbj

Câu trả lời:


4

Đây là một ý tưởng, có thể cần thử nghiệm thêm:

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

Ở đây chúng tôi sao chép descriptioncaptiontừ hình ảnh gốc thông qua wp_create_file_in_uploadswp_insert_attachment_datacác bộ lọc. Để hạn chế nó trong ngữ cảnh của ajax crop tùy chỉnh , chúng tôi kiểm tra nó bằng:

 doing_action('wp_ajax_custom-header-crop')` 

Ở đây chúng tôi cũng chuyển vào $attachment_id, của hình ảnh gốc, vào phần đóng với sự trợ giúp của từ khóa sử dụng .

Nếu chúng ta cũng cần sao chép meta hình ảnh , thì chúng ta có thể sử dụng một cách tiếp cận tương tự thông qua wp_header_image_attachment_metadatabộ lọc:

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

Hy vọng bạn có thể điều chỉnh nó theo nhu cầu của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.