Fügen Sie dem Medien-Uploader benutzerdefinierte Bildgrößen hinzu

Ich möchte dem Medien-Uploader benutzerdefinierte Bildgrößen hinzufügen:

Medien-Uploader

Um dies zu tun, verwende ich den folgenden Code (Kommentare sind aus Bequemlichkeit):

// this function adds the custom image sizes to the media uploader function my_insert_custom_image_sizes( $sizes ) { // get the custom image sizes global $_wp_additional_image_sizes; // if there are none, just return the built-in sizes if ( empty( $_wp_additional_image_sizes ) ) return $sizes; // add all the custom sizes to the built-in sizes foreach ( $_wp_additional_image_sizes as $id => $data ) { // take the size ID (eg, 'my-name'), replace hyphens with spaces, // and capitalise the first letter of each word if ( !isset($sizes[$id]) ) $sizes[$id] = ucfirst( str_replace( '-', ' ', $id ) ); } return $sizes; } // define the init function next, which sets up all the necessary stuff function custom_image_setup () { add_theme_support( 'post-thumbnails' ); add_image_size( 'my-size1', 250, 250 ); add_image_size( 'my-size2', 350, 350 ); add_image_size( 'my-size3', 450, 450 ); add_filter( 'image_size_names_choose', 'my_insert_custom_image_sizes' ); } // attach that init function to the 'after_setup_theme' hook // so it runs on each page load once your theme's been loaded add_action( 'after_setup_theme', 'custom_image_setup' ); 

Dieser Code funktioniert gut. Neben einem Problem: Wenn ein Bild hochgeladen wird, wenn es kleiner als die Abmessungen der kleinsten benutzerdefinierten Bildgröße ist, wird dieser Fehler angezeigt: Invalid argument supplied for foreach() .

Ich vermute, dass das Problem von der function my_insert_custom_image_sizes . Wenn kein benutzerdefiniertes Bild erstellt wird, wird der Fehler angezeigt. Wie kann ich das beheben? Ich habe das Gefühl, das Problem ist etwas Einfaches, das ich übersehen habe, aber ich bin verloren …

Wenn Sie diesen Fehler replizieren möchten, fügen Sie den obigen Code in functionen ein und laden Sie ein Bild, das kleiner als 250 x 250 ist, in Pixel hoch.

UPDATE : Nach einigen weiteren Nachforschungen scheint der Fehler mit der foreach in meiner JPEG-Komprimierungsfunktion zusammenhängen:

 // Set JPEG compression quality add_filter('jpeg_quality', create_function('$quality', 'return 100;')); add_action('added_post_meta', 'ad_update_jpeg_quality', 10, 4); function ad_update_jpeg_quality($meta_id, $attach_id, $meta_key, $attach_meta) { if ($meta_key == '_wp_attachment_metadata') { $post = get_post($attach_id); if ($post->post_mime_type == 'image/jpeg') { $pathinfo = pathinfo($attach_meta['file']); $uploads = wp_upload_dir(); $dir = $uploads['basedir'] . '/' . $pathinfo['dirname']; foreach ($attach_meta['sizes'] as $size => $value) { $image = $dir . '/' . $value['file']; $resource = imagecreatefromjpeg($image); if ($size == 'large') { // set the jpeg quality for 'large' size imagejpeg($resource, $image, 35); } elseif ($size == 'medium') { // set the jpeg quality for the 'medium' size imagejpeg($resource, $image, 35); } elseif ($size == 'small') { // set the jpeg quality for the 'small' size imagejpeg($resource, $image, 40); } else { // set the jpeg quality for the rest of sizes imagejpeg($resource, $image, 90); } imagedestroy($resource); } } } } 

Irgendwelche Ideen, was ist falsch daran?

Solutions Collecting From Web of "Fügen Sie dem Medien-Uploader benutzerdefinierte Bildgrößen hinzu"

Invalid argument supplied for foreach bedeutet, dass das X in foreach X as ... kein Array ist. Sie können diesen Fehler verhindern, indem Sie casting eingeben. füge (array) vor dem Argument in der foreach-statement hinzu. Dadurch wird Ihre Variable im Wesentlichen zu einem Array. In Ihrem Code wäre die Änderung …

 foreach ( (array) $attach_meta['sizes'] as $size => $value ) { 

Denken Sie daran, dass dies das eigentliche Problem hier nicht beheben wird, nämlich dass Ihr Code $attach_meta['sizes'] als Array erwartet und nicht. Möglicherweise möchten Sie Ihren Code für dieses Szenario umgestalten.