Maneira de incluir posts com & sem certas meta_key em args para wp_query?

4

EDIT 2 : Em vez de descobrir a solução real, decidi usar uma solução alternativa e estou simplesmente definindo o valor padrão de book_in_series como '0'. Graças a @eddiemoya por todo o tempo que ele passou olhando isso comigo!

EDITAR : Eu tive uma pergunta diferente com a postagem necessária do código completo para esta página / consulta de arquivo, se você quiser ver está aqui .

Esta consulta está funcionando muito bem, mas não inclui nenhuma postagem que não tenha o meta_key 'book_in_series' (que determina o valor de classificação). O que eu gostaria de ter acontecido é que os livros sejam classificados por este valor, se existirem, caso contrário, voltem desordenados. Isso é possível?

$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 essa resposta da Rarst chega perto, mas não sei como adaptá-la às minhas circunstâncias. Consulta personalizada com query_posts não mostra post sem certos meta_key

Agradecemos antecipadamente por sua ajuda!

    
por Michelle 13.09.2011 / 18:08

3 respostas

0

Em vez de descobrir a solução real, decidi usar uma solução alternativa e estou simplesmente definindo o valor padrão de book_in_series como '0'.

    
por Michelle 13.01.2012 / 23:23
2

Para ser claro, você quer dizer que qualquer item que não tenha a chave book_in_series estará apenas na parte inferior e não-ordenado, mas os que estiverem com a chave estarão no topo e ordenaram o ASC por essa chave. Certo?

meta_query é usado para especificar quais itens você deseja retornar, orderby é usado para especificar o que classificar esses itens por. No entanto, meta_key (que é obsoleto como um meio para especificar quais posts obter) é necessário se você quiser usar orderby.

Você precisa adicionar a essa consulta, meta_query, que especifica as postagens que você deseja. Sugiro remover a meta_key durante o teste, para que você saiba que meta_key não está revertendo para seu comportamento antigo. Depois que você souber que tem as postagens que deseja, coloque meta_key e orderby de volta e classifique as postagens de acordo.

enlace

enlace

posso encomendar por um campo personalizado e meta_query outro na mesma consulta

EDIT: Uma tentativa grosseira de como sua consulta deve ser, leia comentários de explicação.

 $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 );

Eu comentei os itens relacionados à classificação - se com essa consulta, você obtiver as postagens que deseja, tente remover os comentários e ver se ele ordena sem sobrescrever o meta_query

    
por eddiemoya 13.09.2011 / 20:36
1

Depois de procurar por um tempo, encontrei uma solução aparentemente melhor do que precisar de um valor padrão, ao qual estava prestes a recorrer. Eu adoraria saber seus pensamentos. Eu corri duas consultas. Um para criar uma matriz de IDs de postagens para excluir e outra para exibir as postagens. Baseado em informações que encontrei aqui: 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 );
    
por Greg 25.10.2011 / 16:08

Tags