WP_Query orderby post__in permanece ineficaz no Loop [closed]

3

Estou tentando consultar uma matriz personalizada de postagens para a página inicial, tentando manter o pedido fornecido na matriz. Até certo ponto isso funciona bem, o WordPress encontra as postagens, mas no Loop a ordem é toda confundida novamente.

Primeiro de tudo, estou usando o gancho pre_get_posts para alterar a consulta principal na página inicial, algo parecido com isto:

if ( is_home() && $query->is_main_query() ) {
    $query->set( 'post_type', array( 'post', 'page', 'product' ) );
    $query->set( 'post__in', array( 103, 14, 127, 115 ) );
    $query->set( 'orderby', 'post__in' );
}

O pedido na página inicial está todo confuso! Não segue nem a matriz especificada nem as datas de publicação (que é o padrão). Em vez disso, são 127, 103, 14, 115.

Eu var_dumped o global $wp_query na página inicial, apenas para verificar o que aconteceu, e o SQL que ele consultou era de fato

SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID
FROM wp_posts
WHERE
    1=1 AND wp_posts.ID IN (103,14,127,115)
    AND wp_posts.post_type IN ('post', 'page', 'product')
    AND (wp_posts.post_status = 'publish' OR wp_posts.post_author = 1 AND wp_posts.post_status = 'private')
ORDER BY FIELD( wp_posts.ID, 103,14,127,115 )
LIMIT 0, 10

Então não há problema aí! Isso é exatamente o que deveria acontecer. A matriz de posts em $wp_query->posts , no entanto, tem o pedido errado.

Você pode notar que há um tipo de postagem personalizado 'product' incluído na consulta. Isso é o culpado? Alguma ideia de onde procurar?

    
por Max 01.08.2013 / 11:23

2 respostas

10

Defina orderby como post__in . Isso preserva a ordem pós-ID fornecida na matriz post__in (disponível na Versão 3.5).

$args = array (
    'posts_per_page' => -1,
    'post__in' => $ids,
    'orderby' => 'post__in' 
);
    
por Akin Adebowale 28.12.2013 / 17:52
0

Completamente ruim, eu tive uma função antiga conectada a the_posts , que fez uma classificação própria. Código antigo que esqueci de remover. Agora está tudo bem.

    
por Max 02.08.2013 / 15:22