¿Cómo incluir publicaciones con y sin cierta meta_key en args para wp_query?

4

EDITAR 2 : En lugar de descubrir la solución real, he decidido utilizar una solución alternativa, y simplemente estoy configurando el valor predeterminado para book_in_series en '0'. ¡Gracias a @eddiemoya por todo el tiempo que pasó mirando esto conmigo!

EDIT : tuve una pregunta diferente con la publicación requerida del código completo para esta página / consulta de archivo, si desea ver que está aquí .

Esta consulta funciona muy bien, pero no incluye ninguna publicación que no tenga la meta_key 'book_in_series' (que determina el valor de clasificación). Lo que me gustaría que sucediera es que los libros se clasifiquen por este valor si existe, de lo contrario, vuelvan desordenados. ¿Es eso posible?

$args = array( 
       'post_type' => 'books', 
       'posts_per_page' => -1,
       'nopaging' => true,
       'surpress_filters' => true,
       'orderby' => 'meta_value',
       'meta_key' => 'book_in_series',
       'order' => 'ASC',
       'post_parent' => $current_series_id,
 );

 $books = new WP_Query( $args);

Parece que esta respuesta de Rarst se acerca, pero no estoy seguro de cómo adaptarla a mis circunstancias. Consulta personalizada con query_posts no muestra la publicación sin cierta meta_key

¡Gracias de antemano por tu ayuda!

    
pregunta Michelle 13.09.2011 - 18:08

3 respuestas

0

En lugar de averiguar la solución real, decidí usar una solución alternativa y simplemente establecí el valor predeterminado para book_in_series en '0'.

    
respondido por el Michelle 13.01.2012 - 23:23
2

Para ser claro, quiere decir que cualquier elemento que no tenga la clave book_in_series solo estará en la parte inferior y no ordenado, pero los que sí lo tienen estarán en la parte superior y el ASC ordenado por esa clave. Derecho?

meta_query se utiliza para especificar qué elementos desea devolver, orderby se utiliza para especificar en qué se ordenan esos elementos. Sin embargo, meta_key (que está en desuso como un medio para especificar qué publicaciones obtener) es necesario si desea usar orderby.

Debe agregar a esa consulta, meta_query que especifica las publicaciones que desea. Sugiero que elimines la meta_key mientras la pruebas, para que sepas que meta_key no vuelve a su comportamiento anterior. Una vez que sepa que tiene las publicaciones que desea, vuelva a colocar la meta_key y orderby, y debería ordenar esas publicaciones en consecuencia.

enlace

enlace

¿Puedo ordenar por un campo personalizado y meta_query otro en la misma consulta

EDITAR: un intento aproximado de cómo debería verse su consulta, lea los comentarios de la explicación.

 $meta_query = array(
    'relation' => 'OR',
    array(
        'key' => 'book_in_series',
        'compare' => 'IN'
    ),
    array(
        'key' => 'book_in_series',
        'compare' => 'NOT IN'
    )
);

$args = array(
    'post_type'        => 'books',
    'posts_per_page'   => -1,
    'nopaging'         => true,
    'subpress_filters' => true,
    'meta_query'       => $meta_query,
    //'orderby'        => 'meta_value',
    //'meta_key'       => 'book_in_series',
    //'order'          => 'ASC',
    'post_parent'      => $current_series_id
);
 $query = new WP_Query( $args );

He comentado los elementos relacionados con la clasificación. Si con esta consulta, obtiene las publicaciones que desea, luego intente eliminar los comentarios y ver si se ordenan sin anular la meta_query

    
respondido por el eddiemoya 13.09.2011 - 20:36
1

Después de buscar por un tiempo encontré una solución aparentemente mejor que la necesidad de un valor predeterminado, al que estaba a punto de recurrir. Me encantaría conocer tus pensamientos. Me encontré con dos consultas. Uno para crear una matriz de ID de publicaciones para excluir y otro para mostrar las publicaciones. Basándome en la información que he encontrado aquí: enlace

$posts_to_exclude_args = array(
            'cat' => '3772', 
            'post_status' => 'publish',
            'orderby' => 'date',
            'meta_value' => 'yes_exclude_this_post',
        );
$posts_to_exclude = new WP_Query( $posts_to_exclude_args );
$to_exclude = array();
while ( $posts_to_exclude->have_posts() ) : $posts_to_exclude->the_post(); 
$to_exclude[] = $post->ID;
endwhile;

$posts_args = array(
         'post__not_in' => $to_exclude,
        'cat' => '-3772', //Exclude slideshow, video
        'post_status' => 'publish',
        'paged'=>$page,
        'posts_per_page' => 10,
        'orderby' => 'date',
    );

$posts = new WP_Query( $posts_args );
    
respondido por el Greg 25.10.2011 - 16:08

Lea otras preguntas en las etiquetas