it-swarm.com.de

Bildgröße hinzufügen, wenn Seitenvorlage

Ich erstelle eine Mitgliederwebsite mit WordPress Multisite. Ist es möglich, die Anzahl der erzeugten Bilder in Abhängigkeit von der ausgewählten Vorlage einzuschränken?

Ich habe die folgenden Codezeilen ausprobiert, um bestimmte Bilder in der Galerievorlage zu generieren:

// Generate on all uploads
add_theme_support('post-thumbnails');
set_post_thumbnail_size( 1440, 350, true ); 
add_image_size( 'standard_box', 450, 215, true );
add_image_size( 'default_image', 691, 9999 );

// Generate on gallery template only
if ( is_page_template('page-gallery.php') ) {
add_image_size( 'gallery', 900, 9999 );
add_image_size( 'gallery_thumb', 450, 450, true );
}

Das hat nicht funktioniert. Ich habe einige Nachforschungen angestellt und kann anscheinend nichts zu diesem Thema finden. Wenn Sie mich in die richtige Richtung lenken könnten, wäre ich Ihnen sehr dankbar.

11
Sam

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 add_image_size erst beim Hochladen wirklich ins Spiel kommt. Als solches wird is_page_template(..) immer false sein.

Ein schnelles google ausgegrabenes Aqua Resizer , ein Skript, das entwickelt wurde, um dieses Problem zu lösen. Anstatt add_image_size zu verwenden, verwenden Sie aq_resize direkt in Ihrem Design, und wenn eine Größe für das Bild nicht vorhanden ist, wird sie sofort erstellt und zwischengespeichert.

Tatsächlich habe ich an mehreren Standorten mit vielen Bildgrößen eine ähnliche, wenn auch unterschiedliche Technik angewendet. Sie sparen weiterhin den Overhead von WordPress, indem Sie alle Größe für alle hochgeladenen Bilder generieren - diese werden sofort (& im Cache) generiert, 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 zu verwandeln, das alle add_image_size-Aufrufe automatisch in eine Größe umwandelt, die bei Bedarf angepasst werden muss.

12
TheDeadMedic

Wenn Sie Thumbs on the Fly erstellen möchten, können Sie Aqua Image Resizer verwenden. Dieses Mini-Skript hat jedoch einen Nachteil. Die erstellten Thumbnails werden beim Löschen des Bildes aus der Bibliothek nicht gelöscht. Aber es ist keine große Sache. Bei Bedarf können Sie dies über SHH-Befehle tun.

3
wp student

Es ist keine direkte Antwort auf Ihr Problem. Aber ich werde Ihnen helfen, ein Bild nach Ihren Bedürfnissen zu machen.

Wenn Sie add_image_size verwenden, wird die Größe der vorhandenen Bilder nicht geändert. Dies funktioniert nur für die neuen Bilder, die nach dem Hinzufügen Ihrer Funktion add_image_size hochgeladen werden.

Ihr Code generiert also keine neuen Bilder für die Funktion is_page_template.

Aber Sie können eine einfache PHP-Klasse verwenden, um Ihr Problem zu lösen ... es ist eine berühmte PHP-Klasse, die für viele Premium-Themen für WordPress verwendet wird. Es heißt Aqua-Resizer.

Weitere Informationen finden Sie hier https://github.com/syamilmj/Aqua-Resizer Wiki: https://github.com/syamilmj/Aqua-Resizer/wiki

Problem, das auftreten kann:

Diese Funktion funktioniert so ....

<?php aq_resize( $url, $width, $height, $crop, $single ) ?>

Also, wenn es nicht beschneiden kann (für kleine Bilder, die Ihre Höhe oder Breite definiert haben), wird nichts angezeigt. Sie können diese Situation überwinden, indem Sie überprüfen, ob Sie einen Nullwert erhalten, nachdem Sie die URL in dieser Funktion ganz einfach übergeben haben, wie hier bei mir.

<?php 
$thumb = wp_get_attachment_url( get_post_thumbnail_id($post->ID), 'full' ); if($thumb){ $url = aq_resize( $thumb, 400, 200, true, true ); if(!$url){ $url = WPM_DIR.'/assets/images/demo/wrong_image_size.jpg'; } }else{ $url = WPM_DIR.'/assets/images/demo/400x200_no_feature_image.jpg'; } 
?>

Auf diese Weise können Sie sicherstellen, dass das bestimmte Bild für eine bestimmte Seitenvorlage generiert wird, und auf diese Weise wird Ihre Website viel sauberer.

PS: Diese PHP-Klasse verwendet das WordPress-Core-Cropping-System, sodass keine Sicherheitsprobleme auftreten.

1
WpMania.Net