web-dev-qa-db-de.com

Entfernen von Bildgrößen für benutzerdefinierten Beitragstyp

Ich versuche dies ohne die Verwendung eines Plugins zu tun, aber Aktionen und Filter

Gibt es eine Möglichkeit, zusätzliche Bildgrößen zu entfernen, die von WordPress basierend auf dem benutzerdefinierten Beitragstyp generiert wurden? Ich habe versucht, mit dem intermediate_image_sizes_advanced-Filter zu arbeiten, aber es sieht nicht so aus, als hätte er Zugriff auf $post oder post_type. Also benutze ich die Funktion wie folgt:

function filter_image_sizes($sizes) {
    global $post;
    global $post_type;

    if($post->post_type == 'cpt_slides' || $post_type == 'cpt_slides'){
        unset( $sizes['thumbnail']);
        unset($sizes['medium']);
        unset( $sizes['large']);
    }

    return $sizes;
}
add_filter('intermediate_image_sizes_advanced', 'filter_image_sizes');

Die Begründung/Situation

Ich habe einen benutzerdefinierten Beitragstyp für Folien erstellt (z. B. einen Bildschieberegler), der das vorgestellte Bild verwendet, damit der Benutzer "Folien" hochladen kann. Ich habe auch ein paar benutzerdefinierte Bildgrößen, aber eine speziell für die Folien allein. Da die Folienbilder eine statische Größe haben sollen, möchte ich nicht, dass WordPress all diese zusätzlichen Bildgrößen erzeugt, die ich niemals verwenden werde, daher die Frage.

2
Howdy_McGee

Möglicherweise sollte dieser Filter funktionieren intermediate_image_sizes

Hinweis:Diese Lösung funktioniert, wenn Sie ein Bild vom Nachbearbeitungsbildschirm hochladen. (Getestet auf localhost mit WP-3.8.1)

add_filter( 'intermediate_image_sizes', 'ravs_slider_image_sizes', 999 );
function ravs_slider_image_sizes( $image_sizes ){

    // size for slider
    $slider_image_sizes = array( 'your_image_size_1', 'your_image_size_2' ); 

    // for ex: $slider_image_sizes = array( 'thumbnail', 'medium' );

    // instead of unset sizes, return your custom size for slider image
    if( isset($_REQUEST['post_id']) && 'your_custom_post_type' === get_post_type( $_REQUEST['post_id'] ) )
        return $slider_image_sizes;

    return $image_sizes;
}
8
Ravinder Kumar

Ein Teil des Problems kann darin bestehen, dass dieser Filter möglicherweise von mehr als einer Stelle aufgerufen wird oder möglicherweise von einer Stelle, an der der Abfrage kein Beitrag zugeordnet ist. Tatsächlich scheint der verwendete Filter nur verwendet zu werden, wenn der Anhang zum ersten Mal als Teil der Metadaten erstellt wird.

Wenn ich ein wenig teste, sehe ich, dass beim Hochladen eines Bildes die Variablen $ post und $ post_type nicht an der Stelle gesetzt sind, an der dieser Filter verwendet wird. Wahrscheinlich geschieht dies, weil der Medien-Upload als Hintergrundprozess über Javascript erfolgt, anstatt ein Formular zu senden und die Seite neu zu laden.

WordPress ist für diese Art der Filterung überhaupt nicht wirklich eingerichtet. Möglicherweise sollte dies für zukünftige Updates in Betracht gezogen werden. Ich würde vorschlagen, ein Ticket an den WordPress-Trac zu senden und dort Ratschläge einzuholen.

Grundsätzlich speichert WordPress Ihre Medienelemente unabhängig von dem Beitrag, an den sie angehängt werden, damit Sie dieselbe Datei problemlos an mehreren Stellen verwenden können. Wenn Sie mit WordPress die generierten Größen genauer anpassen könnten, hätten Sie möglicherweise Situationen, in denen Sie ein Bild für einen Blog-Beitrag hochgeladen und dieses Bild dann an einer anderen Stelle als vorgestellten Bild wiederverwenden wollten. Die Medienbibliothek ist so eingerichtet, dass sie diese großartigen Aufgaben bewältigt. Sie ist jedoch nicht so eingerichtet, dass Miniaturansichten von Fall zu Fall neu generiert werden. Sie ist so eingerichtet, dass alle erforderlichen Miniaturansichten generiert werden, da Sie einige oder alle Miniaturansichten an anderer Stelle verwenden können.

Der einfachste Weg, dies zu handhaben, ist die Verwendung Ihrer eigenen Medien-Upload-Funktion für die Metabox des benutzerdefinierten Beitragstyps, wenn Sie Medien hochladen. Dies würde es Ihnen ermöglichen, den normalen WordPress-Thumbnail-Prozess zu umgehen und nur die gewünschten Größen zu erstellen, wenn die Datei hochgeladen wird. Hier ist ein großartiges Tutorial, das Ihnen bei diesem Prozess helfen wird: http://wp.tutsplus.com/tutorials/attaching-files-to-your-posts-using-wordpress-custom-meta-boxes-part-1/

0
Nullvariable