it-swarm.com.de

Wie schließe ich alle Bilder von einer wp_query aus?

Ich möchte Anhänge abfragen und alle Bilder ausschließen.

Ich kann sehen, wie ich only images mit 'post_mime_type' => 'image/*' einbinden kann, aber ich konnte keine Möglichkeit finden, das Gegenteil zu erreichen. Gibt es einen mime_type, der posts__not_in entspricht?

3
SinisterBeard

Die Lösung besteht im Wesentlichen darin, alle Mimen mit Ausnahme von images einzuschließen. WordPress hat eine raffinierte kleine Funktion, in der alle akzeptierten Mime-Typen namens get_allowed_mime_types() (geschickt benannt) gespeichert werden, die ein Array () von Mimes zurückgeben. Wir müssen nur den Unterschied zwischen dem zurückgegebenen Array und dem Array der MIME-Typen ermitteln, die wir in unserer Abfrage nicht benötigen:

$unsupported_mimes  = array( 'image/jpeg', 'image/gif', 'image/png', 'image/bmp', 'image/tiff', 'image/x-icon' );
$all_mimes          = get_allowed_mime_types();
$accepted_mimes     = array_diff( $all_mimes, $unsupported_mimes );
$attachment_query   = new WP_Query( array(
    'post_type'         => 'attachment',
    'post_status'       => 'inherit',
    'post_mime_type'    => $accepted_mimes,
    'posts_per_page'    => 20,
) );
11
Howdy_McGee

Wenn Sie auch andere Post-Typen als Anhänge (z. B. Posts, Seiten) ohne MIME-Typ einfügen möchten, müssen Sie den posts_where-Filter verwenden:

add_filter( 'posts_where' , 'remove_images' );

function remove_images($where) {
    global $wpdb;
    $where.=' AND '.$wpdb->posts.'.post_mime_type NOT LIKE \'image/%\'';
    return $where;
}
3
SinisterBeard

Ich bin mir ziemlich sicher, dass es für MIME-Typen kein Äquivalent zu posts_not_in gibt.

Sie können natürlich alle Anhänge abfragen, bei denen es sich um Bilder handelt. Am besten einfach die IDs über den Parameter fields zurückgeben, der auf ids gesetzt ist. Dann können Sie diese IDs mit posts__not_in für eine zweite Abfrage verwenden. Nachteil ist, dass Sie zwei Abfragen benötigen.

Eine andere Möglichkeit wäre, sich in den posts_where-Filter einzuhängen und SQL anzuwenden, um das gewünschte Ergebnis zu erzielen.

2
Nicolai