Remova algumas páginas da pesquisa

8

No meu site, quero que algumas páginas não sejam questionadas pelo formulário de pesquisa (para que elas não apareçam quando eu tiver algo como www.ex.com/?s=banana)

Existe uma maneira de "Remover" páginas da página de resultados de pesquisa (sem apenas cegamente fazer uma condição de se is_page (id), display: none)

    
por Fredy31 09.10.2012 / 14:59

2 respostas

14

Em WP_Query () , há um argumento 'post__not_in' onde você pode excluir IDs de postagem específicos.

Você criaria um novo WP_Query dentro do seu search.php e usaria o $ query_args atual, em seguida, adicionaria o seu 'post__not_in'.

Se você quisesse torná-lo mais dinâmico, você também poderia criar uma meta meta onde você poderia fazer uma meta-consulta e excluir todos que tivessem "excluir" marcada. (procure "register_meta_box_cb" em register_post_type ).

Por exemplo,

add_action('pre_get_posts','wpse67626_exclude_posts_from_search');
function wpse67626_exclude_posts_from_search( $query ){

    if( $query->is_main_query() && is_search() ){
         //Exclude posts by ID
         $post_ids = array(7,19,21);
         $query->set('post__not_in', $post_ids);
    }

}
    
por Eric Holmes 09.10.2012 / 15:13
1

Para excluir todas as páginas dos resultados de pesquisa (ou seja, sem precisar fornecer códigos de página manualmente), basta modificar a função de @ EricHolmes da seguinte forma:

add_action( 'pre_get_posts', 'wpse67626_exclude_posts_from_search' );
function wpse67626_exclude_posts_from_search( $query ) {
    if ( $query->is_main_query() && $query->is_search() ) {

        // Get an array of all page IDs with 'get_all_page_ids()' function
        $query->set( 'post__not_in', get_all_page_ids() );

    }
}
    
por its_me 04.10.2013 / 17:31

Tags