¿Cómo excluyo todas las imágenes de una wp_query?

3

Quiero consultar archivos adjuntos y excluir todas las imágenes.

Puedo ver cómo incluir solo imágenes, usando 'post_mime_type' => 'image/*' , pero no pude encontrar ninguna manera de lograr lo contrario. ¿Hay algún mime_type equivalente a posts__not_in ?

    
pregunta SinisterBeard 24.11.2015 - 16:12

3 respuestas

11

Más o menos la solución es incluir todos los mimos excepto . WordPress tiene una pequeña función ingeniosa donde mantiene todos sus mime-tipos aceptados llamados get_allowed_mime_types() (con un nombre inteligente) que devuelve un Array () de mimos. Todo lo que necesitamos hacer es obtener la diferencia entre la matriz devuelta y la matriz de tipos mime que no queremos en nuestra consulta:

$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,
) );
    
respondido por el Howdy_McGee 24.11.2015 - 16:25
3

Si también desea incluir tipos de publicaciones que no sean adjuntos (por ejemplo, publicaciones, páginas) que no tengan ningún tipo de mimo, deberá usar el filtro posts_where :

add_filter( 'posts_where' , 'remove_images' );

function remove_images($where) {
    global $wpdb;
    $where.=' AND '.$wpdb->posts.'.post_mime_type NOT LIKE \'image/%\'';
    return $where;
}
    
respondido por el SinisterBeard 24.11.2015 - 16:59
2

Estoy bastante seguro de que no hay un equivalente de posts_not_in para los tipos mime.

Por supuesto, puede consultar todos los archivos adjuntos que sean imágenes. Preferiblemente, solo se devuelven los ID a través del parámetro fields establecido en ids . Luego puede usar esos ID con posts__not_in en una segunda consulta. El inconveniente es que necesita dos consultas.

Otra posibilidad sería engancharse en el filtro posts_where y aplicar algo de SQL para obtener el resultado que deseas.

    
respondido por el Nicolai 24.11.2015 - 16:27

Lea otras preguntas en las etiquetas