Exclua as páginas de nível superior dos resultados da pesquisa

4

Com o código a seguir, posso excluir todas as postagens e páginas de nível superior, mas gostaria de aplicá-lo somente a páginas, não a postagens (mas ainda quero todas as postagens nos resultados):

function search_filter( $query )
{
    if(
        $query->is_search 
        AND $query->is_main_query()
        )
    {
        $query->set( 'post_parent__not_in', array( 0 ) );
        $query->set( 'post_type', array( 'post', 'page' ) );
    }
    return $query;
}

No momento, todas as minhas postagens têm 0 como post_parent, então todas são excluídas dos resultados.

    
por Nicolas 30.10.2013 / 13:03

1 resposta

1

Gostaria de saber se isso funcionará para você:

function search_filter( $query )
{
    if( $query->is_search AND $query->is_main_query() )
    {
        // $query->set( 'post_parent__not_in', array( 0 ) ); // We comment this out here 
        $query->set( 'post_type', array( 'post', 'page' ) );
    }
    return $query;
}
add_action( 'pre_get_posts', 'search_filter' );

e

function wpse_120638( $where, $query ) 
{
    global $wpdb;

    if( $query->is_search AND $query->is_main_query() )
    {
            $from = "AND $wpdb->posts.post_type IN ('post', 'page')";
            $to   = "AND ( ( $wpdb->posts.post_parent NOT IN (0) 
                     AND $wpdb->posts.post_type IN ('page') ) 
                     OR $wpdb->posts.post_type IN ('post') ) ";

        $where = str_replace( $from, $to, $where );                                   
    }

    return $where;
}
add_filter( 'posts_where', 'wpse_120638', 10, 2 );
    
por birgire 30.10.2013 / 14:40