pre_get_posts com tax_query causa resultado vazio

4

Eu preciso ajustar o loop principal para todas as páginas do arquivo da seguinte maneira. Eu registrei uma taxonomia personalizada "myposttypes". Cada post é atribuído a exatamente um termo de "myposttypes".

Se for uma página de arquivo de categoria ou tag, somente as postagens com "myposttypes- > term1" deverão ser incluídas no resultado da consulta.

Se for uma página de arquivo de taxonomia personalizada, apenas as postagens com "myposttypes- > term2" deverão ser incluídas no resultado da consulta.

Já implementei o correspondente pre_get_posts hook, mas não obtive nenhum resultado para todas as minhas páginas de arquivo. Tenho muitas postagens com taxonomias correspondentes na minha instância do blog. deve haver resultados.

Aqui está minha abordagem:

function wpmw_adjust_archive_queries( $query ) {
    if ( ! is_admin() && is_archive() && $query->is_main_query() ) {
        if ( is_category() || is_tag() ) $term_slug  = 'term1';
        if ( is_tax( 'beitragsarten', 'news' ) ) $term_slug = 'term2';

        $taxquery = array(
            'tax_query' => array(
                array(
                    'taxonomy' => 'myposttypes',
                    'field'    => 'slug',
                    'terms'    => $term_slug
                ),
            ),
        );

        $query->set( 'tax_query', $taxquery );
    }
}

add_action( 'pre_get_posts', 'wpmw_adjust_archive_queries' );

UPDATE: Aqui está a minha abordagem ajustada e simplificada, que ainda não funciona, infelizmente. Eu recebo um resultado vazio. Eu var_dump'ed $ query e tax_query parece ser adicionado corretamente a query_vars.

function wpmw_adjust_archive_queries( $query ) {
    if ( ! is_admin() && $query->is_archive() && $query->is_main_query() ) {

        $tax_query = $query->get( 'tax_query' ) ? : array();

        $tax_query[] = array(
            'taxonomy' => 'myposttypes',
            'field'    => 'slug',
            'terms'    => array( 'term1' ),
            'operator' => 'IN'
        );

        $query->set( 'tax_query', $tax_query );
    }
}

add_action( 'pre_get_posts', 'wpmw_adjust_archive_queries' );

Aqui está a parte correspondente de $ query

[tax_query] => Array
                (
                    [0] => Array
                        (
                            [taxonomy] => myposttypes
                            [field] => slug
                            [terms] => Array
                                (
                                    [0] => term1
                                )

                            [operator] => IN
                        )

                )
    
por EmWe 21.08.2018 / 11:12

1 resposta

2

Você usa tax_query incorretamente. Dê uma olhada em Página do Codex

tax_query deve ser uma matriz que pode conter:

  • relation - deve ser string (AND / OR)
  • termo de taxonomia - matriz com taxonomia, campo, termos e assim por diante definidos.

No seu código, sua configuração tax_query para:

$taxquery = array(
    'post_type' => 'post',
    'tax_query' => array(
        array(
            'taxonomy' => 'myposttypes',
            'field'    => 'slug',
            'terms'    => $term_slug
        ),
     ),
);

E deve ser:

$taxquery = array(
    array(
        'taxonomy' => 'myposttypes',
        'field'    => 'slug',
        'terms'    => $term_slug
    ),
);

post_type é outro parâmetro, então você não pode configurá-lo dentro de tax_query .

Mas ... Você ainda deve ter cuidado, se você alterar tax_query - pode ter um valor já. Então, se você quer ser respeitoso com isso, você deve usar algo assim:

$tax_query = $query->get( 'tax_query' );
if ( ! is_array( $tax_query ) ) {
    $tax_query = array();
}
$taxquery[] = array(
    'taxonomy' => 'myposttypes',
    'field'    => 'slug',
    'terms'    => $term_slug
);
$query->set( 'tax_query', $taxquery );

Dessa forma, você adicionará sua consulta de impostos a consultas já existentes e não as substituirá.

    
por Krzysiek Dróżdż 21.08.2018 / 11:37