好问题,我有机会写一个小包装,基本上实现了这样的功能。。。
我在考虑什么时候应该运行我的优化,以及应该如何处理文件。最后得出下一个结论<稍后将使用wp\\u cron schedule更改主映像。没什么特别有趣的。。。你带着你的文件,在优化管道中运行它Success
将param设置为在post meta中不再对其进行优化,以防fail
将其标记为Failed
忘记图像吧有了拷贝,就更容易了。我只是使用wp_update_attachment_metadata
在触发更新元数据时过滤$hook以获取文件列表(例如在生成图像大小时)```
add_filter( \'wp_update_attachment_metadata\',
array( __CLASS__, \'optimize_images_in_foreach\' ), 100, 2 );
Files Optimization.
/**
* Optimize Copies of imges in loop while images regeneration
*
* @param array $metadata Image Metadata (images, exif data, etc...)
* @param int $attachment_id Attachment id
* @return array
*/
function optimize_images_in_foreach( $metadata, $attachment_id ) {
$original_file = get_attached_file( $attachment_id );
if ( ! empty( $metadata[\'sizes\'] ) && is_array( $metadata[\'sizes\'] ) ) {
foreach( $metadata[\'sizes\'] as $size => $item )
do_action( \'optimize_image\',
str_replace( basename( $original_file ), $item[\'file\'], $original_file ) );
}
}
return $metadata;
}
```
正如您所见,我刚刚运行了自己的图像操作。。。optimize_image
. 在第一阶段,它只是pngout
和jpegtran
, 后来,使用高级cron时间表和Kraken服务(图像优化)实现起来有点困难```
/**
* Run Image Optimization to Jpeg\'s and PNG\'s
* @param string $image IMage Location in filesystem
* @return void
*/
function optimize_images_in_foreach_jpeg_png_optimization( $image ) {
$extension = array_pop(explode( \'.\', basename( $image ) ) );
// `images_optimization` is global option that holds a cli command for image optimization
// examples...
// \'png\' => /opt/local/bin/optipng = \'{$image}\',
// \'jpeg\' => /opt/local/bin/jpegtran -copy none -maxmemory 256Mb -optimize \\
// -outfile \'{$image}\' \'{$image}\'
$optimization = get_site_option(\'images_optimization\');
if ( in_array($extension, array( \'jpeg\', \'jpg\' ) ) ) {
$type = \'jpeg\';
} elseif ( in_array( $extension, array( \'png\' ) ) ) {
$type = \'png\';
} else {
$type = \'default\';
}
if ( ! empty( $optimization[ $type ] ) ) {
$optimization[$type] = str_replace( \'{$image}\', $image, $optimization[ $type ] );
// execute is a pipline to exec in this itteration.
execute( "{$optimization[$type]}" );
}
}
```
P、 请原谅我的代码格式。。。没有“```”它就无法工作