La generazione di immagini intermedie è estremamente rigida. image_resize()
lo tiene vicino al codice e manca completamente di hook.
Praticamente l'unica opzione per questo è agganciare wp_generate_attachment_metadata
e sovrascrivere l'immagine generata da WP con la tua (che avrà bisogno di un po 'di image_resize()
fork).
Ho bisogno di questo per lavoro, quindi potrei essere in grado di condividere un po 'di codice in seguito.
Ok, ecco un esempio approssimativo, ma funzionante. Si noti che l'impostazione del raccolto in questo modo richiede comprensione imagecopyresampled()
.
add_filter('wp_generate_attachment_metadata', 'custom_crop');
function custom_crop($metadata) {
$uploads = wp_upload_dir();
$file = path_join( $uploads['basedir'], $metadata['file'] ); // original image file
list( $year, $month ) = explode( '/', $metadata['file'] );
$target = path_join( $uploads['basedir'], "{$year}/{$month}/".$metadata['sizes']['medium']['file'] ); // intermediate size file
$image = imagecreatefromjpeg($file); // original image resource
$image_target = wp_imagecreatetruecolor( 44, 44 ); // blank image to fill
imagecopyresampled($image_target, $image, 0, 0, 25, 15, 44, 44, 170, 170); // crop original
imagejpeg($image_target, $target, apply_filters( 'jpeg_quality', 90, 'image_resize' )); // write cropped to file
return $metadata;
}