Das war schon immer ein Problem für mich - das Fehlen von Bildgrößen bei Bedarf und die nachfolgende Anzahl von Dateien, mit denen Sie enden können, wenn Sie viele Größen haben!
Ich kann die Logik hinter Ihren Bemühungen erkennen - das Problem ist, dass Sie add_image_size
erst beim Hochladen wirklich ins Spiel kommen. Als solches is_page_template(..)
wird es immer sein false
.
Eine schnelle Google- Version von Aqua Resizer , einem Skript zur Behebung dieses Problems. Anstatt es zu verwenden add_image_size
, verwenden Sie es aq_resize
direkt in Ihrem Design. Wenn keine Größe für das Bild vorhanden ist, wird es sofort erstellt und zwischengespeichert.
Tatsächlich habe ich an mehreren Standorten mit vielen Bildgrößen eine ähnliche, wenn auch unterschiedliche Technik angewendet. Sie sparen immer noch den Aufwand für WordPress, indem Sie jede Größe für jedes hochgeladene Bild generieren - sie werden sofort generiert (& zwischengespeichert), wenn sie angefordert werden. Der Unterschied besteht darin, dass Sie einfach alle Standardbildfunktionen und Vorlagen-Tags von WP wie gewohnt verwenden können!
Wie @Waqas bereits erwähnte, hinterlässt die Verwendung von Aqua Resizer verwaiste Dateien, wenn Sie ein Bild aus Ihrer Medienbibliothek löschen. Mit meiner Technik werden alle Dateien gelöscht, da sie in der Datenbank gespeichert und von WordPress erkannt werden.
/**
* Resize internally-registered image sizes on-demand.
*
* @link http://wordpress.stackexchange.com/q/139624/1685
*
* @param mixed $null
* @param int $id
* @param mixed $size
* @return mixed
*/
function wpse_139624_image_downsize( $null, $id, $size ) {
static $sizes = array(
'post-thumbnail' => array(
'height' => 350,
'width' => 1440,
'crop' => true,
),
'standard_box' => array(
'height' => 215,
'width' => 450,
'crop' => true,
),
'default_image' => array(
'height' => 9999,
'width' => 691,
'crop' => false,
),
'gallery' => array(
'height' => 900,
'width' => 9999,
'crop' => false,
),
'gallery_thumb' => array(
'height' => 450,
'width' => 450,
'crop' => true,
),
);
if ( ! is_string( $size ) || ! isset( $sizes[ $size ] ) )
return $null;
if ( ! is_array( $data = wp_get_attachment_metadata( $id ) ) )
return $null;
if ( ! empty( $data['sizes'][ $size ] ) )
return $null;
if ( $data['height'] <= $sizes[ $size ]['height'] && $data['width'] <= $sizes[ $size ]['width'] )
return $null;
if ( ! $file = get_attached_file( $id ) )
return $null;
$editor = wp_get_image_editor( $file );
if ( ! is_wp_error( $editor ) ) {
$data['sizes'] += $editor->multi_resize(
array(
$size => $sizes[ $size ],
)
);
wp_update_attachment_metadata( $id, $data );
}
return $null;
}
add_filter( 'image_downsize', 'wpse_139624_image_downsize', 10, 3 );
Und in der Praxis:
wp_get_attachment_image( $id, 'gallery' ); // Resized if not already
wp_get_attachment_image_src( $id, 'standard_box' ); // Resized if not already
the_post_thumbnail(); // You get the idea!
// And so forth!
Ich beabsichtige, dies in ein Plugin umzuwandeln, das automatisch alle add_image_size
Aufrufe in Größenänderungen nach Bedarf umwandelt. Sehen Sie sich also diesen Bereich an!