Alternativa para query_posts para loop principal? [duplicado]

14

Acabei de notar que a documentação para query_posts () menciona algumas "desvantagens" de usar query_posts para alterar os principais Loop, notavelmente: 'faz consultas SQL adicionais'.

Isto parece implicar que há outro caminho / um caminho melhor. Obviamente, há get_posts () e WP_Query para loops secundários, mas eu não os vejo abordando as "desvantagens" listadas na documentação do Codex.

Eu posso ver que, esperando até que você esteja no modelo para executar query_posts, o WordPress já executou uma consulta uma vez e esta é agora uma segunda consulta que atrapalha a primeira (a primeira sendo basicamente ignorada). Isso definitivamente parece ineficiente (embora talvez não seja grande coisa, quem sabe?)

A minha pergunta é: existe uma alternativa ao query_posts que NÃO adiciona "consultas SQL adicionais" ou a documentação do Codex é simplesmente enganadora?

    
por Tom Auger 28.06.2011 / 19:48

1 resposta

18

Quando adicionei as desvantagens ao Codex, estava pensando principalmente em usar o filtro 'request' como uma alternativa para query_posts ().

Esse filtro só é executado para a consulta principal, de modo que resolve o problema com 'pre_get_posts', que é acionado para todas as consultas.

A desvantagem é que você não tem acesso a sinalizadores de consulta como is_single () etc.

Aqui está uma maneira de obter acesso a elas, sem fazer as consultas SQL:

function alter_the_query( $request ) {
    $dummy_query = new WP_Query();  // the query isn't run if we don't pass any query vars
    $dummy_query->parse_query( $request );

    // this is the actual manipulation; do whatever you need here
    if ( $dummy_query->is_home() )
        $request['category_name'] = 'news';

    return $request;
}
add_filter( 'request', 'alter_the_query' );
    
por scribu 29.06.2011 / 04:21