it-swarm-eu.dev

Vlastní filtr hledání způsobuje problémy nabídky a dotazu

Používám vlastní vyhledávací filtr (pomocí vlastního dotazu var type), jako je například:

function fteh_pre_get_posts( $query ){
    if( isset( $query->query_vars['type'] ) )
        $types = explode( ',', $query->query_vars['type'] );
        $query->set( 'post_type', $types );

    return $query;
}

if ( ! is_admin() ) {
     add_action( 'pre_get_posts', 'fteh_pre_get_posts' );
}

Všiml jsem si, že to způsobí, že registrované vlastní menu zmizí.

Bez !is_admin() to také zaměňovalo stavitele menu (ukazovalo některé příspěvky místo všech mých stránek v sekci Stránky). Přidání podmínky pomohl s tím, ale nemůžu přijít na to, jak přivést zpět mé menu.

Je řádně registrován a zavolán, postaven a uložen ve správném místě a před přidáním tohoto filtru pracoval. Nyní používá pouze fallback_cb (v mém případě výchozí wp_page_menu) namísto mého vlastního menu.

Jakmile tuto akci odstraním z pre_get_posts, každé je zpět do normálu.

Nevidím, jak pre_get_posts háček souvisí s vlastními nabídkami - ví někdo, proč by to způsobilo takové podivné chování?

AKTUALIZACE:

Nyní jsem objevil další problém způsobený konkrétně útržkem výše - všechny mé vlastní dotazy na stránkách (jednoduché věci jako query_posts('post_type=organization')) přestaly fungovat a místo vlastních typů příspěvků nastavených v souboru query_posts zobrazovaly normální příspěvky.

5
Justine

Použijte is_main_query() pro změnu pouze hlavního dotazu, takže nabídka nebude ovlivněna.

Zkuste to:

add_action( 'pre_get_posts', 'fteh_pre_get_posts' );

    function fteh_pre_get_posts( $query ){
        if( !is_admin() && $query->is_main_query() && isset( $query->query_vars['type'] ) )
            $types = explode( ',', $query->query_vars['type'] );
            $query->set( 'post_type', $types );

        return $query;
    }
12
Sisir

Mohl bych být trochu pozdě na party, ale to je to, co jsem udělal, aby se můj problém s menu zmizí, když jsem byl prohlížet vlastní příspěvky podle kategorie. Používám výchozí kategorie příspěvků a nikoli vlastní taxonomie.

public function include_custom_post_search( $query ) {
        if( ! is_admin() ) {

            if( is_category() && 'nav_menu_item' !== $query->get('post_type') )
                $query->set( 'post_type', 'custom_post_place_slug' );
        }
    }

    add_action( 'pre_get_posts', 'include_custom_post_search' );
0
Andrew Schultz