Excluir páginas de nivel superior de los resultados de búsqueda

4

Con el siguiente código, puedo excluir todas las publicaciones y páginas que son de nivel superior, pero me gustaría aplicar esto solo a las páginas, no a las publicaciones (pero aún quiero todas las publicaciones en los 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;
}

En este momento, todas mis publicaciones tienen 0 como post_parent, por lo que todas quedan excluidas de los resultados.

    
pregunta Nicolas 30.10.2013 - 13:03

1 respuesta

1

Me pregunto si esto funcionará para ti:

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' );

y

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 );
    
respondido por el birgire 30.10.2013 - 14:40

Lea otras preguntas en las etiquetas