Eliminar algunas páginas de la búsqueda


8

En mi sitio, quiero que algunas páginas no sean consultables por el formulario de búsqueda (para que no aparezcan cuando tenga algo como www.ex.com/?s=banana)

¿Hay alguna manera de "Eliminar" páginas de la página de resultados de búsqueda (sin simplemente hacer a ciegas una condición de if is_page (id), display: none)

Respuestas:


14

En WP_Query () hay un argumento 'post__not_in' en el que puede excluir ID de publicaciones específicas.

Crearía una nueva WP_Query dentro de su search.php y usaría el $ query_args actual, luego agregaría su 'post__not_in'.

Si quisiera hacerlo más dinámico, también podría crear algunas meta meta donde podría hacer una meta consulta y excluir todo lo que haya marcado "excluir". (busque 'register_meta_box_cb' en register_post_type ).

Por ejemplo,

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

}

3
+1. Agregaría que si las publicaciones que está excluyendo pertenecen a un tipo de publicación en particular, puede excluirlas de la búsqueda cuandoregister_post_type
Stephen Harris

1

Para excluir todas las páginas de los resultados de búsqueda (es decir, sin tener que proporcionar ID de página manualmente), aquí hay una versión mejorada de la función de @ 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 );

    }
}

Más información:

(ALTERNATIVA) Aunque, dado lo que está haciendo, puede establecer exclude_from_searchel pagetipo de publicación en true, lo que para mí parece ser la mejor manera de excluir un tipo de publicación de la búsqueda. Vea la respuesta de @ prettyboymp para eso .

Más información:

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.