Remova algumas páginas da pesquisa

8

No meu site, desejo que algumas páginas não sejam passíveis de consulta pelo formulário de pesquisa (para que não apareçam quando houver algo como www.ex.com/?s=banana)

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

Fredy31
fonte

Respostas:

14

Em WP_Query (), há um argumento 'post__not_in' em que 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, e depois adicionaria o seu 'post__not_in'.

Se você quiser torná-lo mais dinâmico, também poderá criar em algumas post meta onde você poderá fazer uma meta query e excluir tudo que tiver "exclude" marcado. (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);
    }

}
Eric Holmes
fonte
3
+1. Gostaria de acrescentar que se as mensagens que você está excluindo pertencem a um determinado tipo de post, então você pode excluí-los de busca quando vocêregister_post_type
Stephen Harris
1

Para excluir todas as páginas dos resultados da pesquisa (ou seja, sem precisar fornecer manualmente os IDs das páginas), aqui está uma versão aprimorada da função do @ EricHolmes:

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

    // Manually supply Post/Page IDs to exclude from search results
    // $exclude_page_ids = array( 7, 19, 21 );

    // Or just get all page IDs
    $exclude_page_ids = get_all_page_ids();

    if (
        !$query->is_admin &&
        $query->is_search &&
        $query->is_main_query() &&
        !empty( $exclude_page_ids ) 
    ) {

        $query->set( 'post__not_in', $exclude_page_ids );

    }
}

Mais informações:

(ALTERNATIVA) Embora, dado o que você está fazendo, você possa definir exclude_from_searcho pagetipo de postagem como true, o que para mim parece ser a melhor maneira de excluir um tipo de postagem da pesquisa. Veja a resposta de @ prettyboymp para isso .

Mais informações:

sou eu
fonte