Garantir que postagens fixas sejam recuperadas primeiro (sem usar duas consultas)?

3

Eu preciso manter a paginação para uso com rolagem infinita.

Não há como dizer ao query_posts para recuperar postagens fixas primeiro?

Parece ser um comportamento padrão em um blog wordpress padrão na página inicial, mas se torna um pouco estranho em um modelo personalizado para uma página do que eu posso dizer.

Obrigado.

Editado para mostrar a consulta atual:

query_posts( array( 
    'post_type' => array('post', 'careers-post'),
    'paged' => $paged,
    'posts_per_page' => 6,
    'category__in' => $page_categories,
    'ignore_sticky_posts' => 0
) );

Editar 2: Parece que "category__in" tem um conflito com posts fixos que datam há muito tempo: enlace

Apenas para confirmar, a remoção de "category__in" realmente permite que as postagens aderentes cheguem ao topo como esperado, mas obviamente não resolve o problema.

    
por Kayo 19.02.2013 / 10:57

1 resposta

9

Vasculhando o código-fonte, não encontrei nenhuma lógica estranha que pudesse fazer com que 'category__in' quebrasse a ordem dos resultados. Se você fizer isso, você pode muito bem arquivar um bug no Trac do WordPress .

Também é difícil reproduzir esse tipo de problema, porque pode depender de outro problema específico do banco de dados ou de como os dados foram manipulados anteriormente por código personalizado.

Independentemente disso, com um pouco de esforço, você sempre pode contornar esse tipo de problema. Aqui está algo que filtrará os resultados da sua consulta e enviará mensagens fixas para o topo:

add_filter('the_posts', 'bump_sticky_posts_to_top');
function bump_sticky_posts_to_top($posts) {
    $stickies = array();
    foreach($posts as $i => $post) {
        if(is_sticky($post->ID)) {
            $stickies[] = $post;
            unset($posts[$i]);
        }
    }
    return array_merge($stickies, $posts);
}

Desde que você limitou a consulta a 6 postagens, não vejo nenhum impacto significativo no tempo de processamento. Você também pode colocar verificações adicionais dentro da função, então este filtro só será executado quando você estiver usando aquela consulta específica (embora, se você não fizer o pior, eu imagino que isso aconteça está duplicando algo que o WP já fez). / p>

Espero que ajude! Deixe-nos saber como é isso.

    
por Tomas Buteler 21.02.2013 / 15:31