¿Cómo elimino las Páginas de la búsqueda?

16 dic 2010, 03:01:47
Vistas: 21.8K
Votos: 18

No necesito buscar páginas en mi sitio y solo quiero buscar entradas, ¿hay alguna manera de hacerlo? Gracias

0
Todas las respuestas a la pregunta 5
5
37

Lo siguiente debería hacer que el tipo de publicación "página" ya no sea buscable.

function remove_pages_from_search() {
    global $wp_post_types;
    $wp_post_types['page']->exclude_from_search = true; // Excluir páginas de los resultados de búsqueda
}
add_action('init', 'remove_pages_from_search'); // Ejecutar la función durante la inicialización
16 dic 2010 04:23:36
Comentarios

¿Dónde coloco ese código? Gracias

User User
16 dic 2010 05:09:22

Puedes colocarlo en el archivo functions.php de tu tema.

prettyboymp prettyboymp
16 dic 2010 05:18:38

Muchísimas gracias. Simplemente lo copié y pegué y funciona perfectamente

User User
18 dic 2010 22:14:25

¿Existe alguna manera de ocultar páginas específicas en lugar de todas las páginas?

user9437856 user9437856
18 oct 2021 14:19:39

Esta idea no sigue la API de WP y, como cualquier modificación directa de variables, debería considerarse un hack en lugar de una solución.

Krzysztof Przygoda Krzysztof Przygoda
21 oct 2021 00:26:59
4
14

Lo siguiente en functions.php también funciona bien:

// Eliminar páginas de los resultados de búsqueda
function mySearchFilter($query) {
    if ($query->is_search) {
        $query->set('post_type', 'post');
    }
    return $query;
}
add_filter('pre_get_posts','mySearchFilter');
16 dic 2010 07:18:41
Comentarios

debería ser la solución. más elegante, más mantenible. lo anterior solo modifica los parámetros del tipo de publicación, este modifica la consulta de búsqueda en sí. +1

kaiser kaiser
4 feb 2011 11:37:05

Modificar el objeto del tipo de publicación para el tipo 'page' es una mejor solución. Esta solución fuerza a que el tipo de publicación se establezca fijo como 'post' para todas las consultas de búsqueda, lo que evitaría que cualquier tipo de publicación personalizada aparezca en los resultados si un sitio los tuviera. Configurar globalmente la propiedad exclude_from_search del objeto del tipo de publicación 'page' significa que cualquier código que dependa de verificar esta propiedad tendrá la información correcta.

prettyboymp prettyboymp
23 ene 2012 20:44:37

Enlace algo relevante con un poco más de información: http://codex.wordpress.org/Post_Types#Custom_Post_Types_in_the_main_Query

its_me its_me
27 feb 2013 07:57:19

Funciona bien pero no muestra el tema en bbpress, así que no es bueno. Usar "$wp_post_types['page']->exclude_from_search = true;" parece una buena opción

Kishore Sahoo Kishore Sahoo
24 jul 2015 16:27:12
1

Aquí está el código para eliminar páginas específicas de los resultados de búsqueda en WordPress, agrega el siguiente código en el archivo functions.php Solo reemplaza el array con los IDs de tus páginas

function remove_pages_from_search($query) {
  if ( !is_admin() && $query->is_main_query() ) {
    if ($query->is_search) {
      $query->set('post__not_in', array(3031,2958,2926));
    }
  }
}

add_action('pre_get_posts','remove_pages_from_search');
7 jul 2021 18:01:04
Comentarios

Funciona para mí. Gracias y un voto positivo de mi parte

user9437856 user9437856
18 oct 2021 14:35:35
3

coloca esto en tu search.php

<?php if (is_search() && ($post->post_type=='page')) continue; ?>

justo debajo de este código -> <?php if ( have_posts() ) : while ( have_posts() ) : the_post();?>

puedes encontrar más información aquí http://wordpress.org/support/topic/possible-search-only-posts-exclude-pages

16 dic 2010 04:00:37
Comentarios

¿No tengo un search.php, si obtengo uno de otro tema funcionará? Gracias

User User
16 dic 2010 05:10:31

Sí. Primero crea un search.php en blanco y luego copia y pega el código del index.php. Después haz lo que te dije arriba.

andrewk andrewk
16 dic 2010 07:33:38

En realidad deberías usar el código de @prettyboymp. Es más fácil y hace lo que pediste. Lo probé. Si quieres...

andrewk andrewk
16 dic 2010 07:38:31
3

Esta solución sigue (respeta) la API de WP en lugar de modificar variables internas directamente.

Ten en cuenta que de esta manera también puedes incluir (sobrescribir el registro) tipos o cambiar los argumentos de registro proporcionados en register_post_type(). Revisa la descripción de 'exclude_from_search' en la documentación.

/**
 * Filtra los tipos de objetos en los resultados de búsqueda.
 * 
 * @param array $args  Array de argumentos para registrar un tipo de post.
 *                     Ver la función register_post_type() para los argumentos aceptados.
 * @param string $type Clave del tipo de post (objeto) (ej. 'post', 'page', 'attachment'...,
 *                     o cualquier tipo de post personalizado registrado).
 * @return array Atributos del tipo filtrado.
 */
function _filter_search_types( $args, $type ) {
    $exclude_types = array( 'page' );

    if ( in_array( $type, $exclude_types, true ) ) {
        $args['exclude_from_search'] = true;
    }

    return $args;
}
if ( ! is_admin() ) {
    add_filter( 'register_post_type_args', __NAMESPACE__ . '\_filter_search_types', 10, 2 );
}
21 oct 2021 00:15:49
Comentarios

@Rup - Yo hablé sobre WP API, no sobre WP REST API (que es irrelevante aquí). Y esto no es una "forma alternativa" de la respuesta aceptada sino "la forma correcta", ya que la "respuesta aceptada" no sigue WP API y como cualquier modificación directa de variables debería considerarse un hack más que una solución.

Krzysztof Przygoda Krzysztof Przygoda
21 oct 2021 01:51:51

@Rup - Y tienes razón - comment no es un tipo de post (corregido).

Krzysztof Przygoda Krzysztof Przygoda
21 oct 2021 01:59:54

Sí, lo malinterpreté, lo siento

Rup Rup
21 oct 2021 12:36:48