问题描述
我目前正在使用 WordPress 内置的 Custom Headers 来获取我的网站主页上的幻灯片图像。在很大程度上,这是按照意图工作的; 它允许我上传一组图像,并让客户端可视化发生了什么。
但是,我发现一些不理想的东西。当您上传标题图像然后裁剪时,您在原始图像上设置的”meta data”(即名称,描述等) 不会转移到新裁剪的图像 (与原始图像分开保存) 。这给人的印象是,当您添加标题图像时,”meta data” 未保存。然后更新”meta data” 的唯一方法是转到媒体库,并从那里进行编辑。你可以看到,它不是一个非常直观的 UX,可能会导致混乱。
我可以想到的最好的解决方案是以某种方式挂钩到 WordPress 事件中,并将原始图像中的”meta data” 传输到裁剪的图像。尽管我可以告诉你,没有办法做到这一点,所以我想听听你的想法。
我对所有的想法和解决方案都开放。
这是对我正在描述的更直观的表示:
最佳解决方案
这是一个想法,可能需要进一步测试:
/**
* 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 );
这里我们通过 wp_create_file_in_uploads
和 wp_insert_attachment_data
滤镜从原始图像复制 description
和 caption
。要限制它在自定义标题 ajax 裁剪的上下文中,我们检查它:
doing_action('wp_ajax_custom-header-crop')`
在这里,我们还将原始图像的 $attachment_id
传递给使用 use 关键字的关闭。
如果我们需要复制图像元素,那么我们可以通过 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 );
希望可以根据您的需要进行调整。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。