¿Cómo elimino las Páginas de la búsqueda?
No necesito buscar páginas en mi sitio y solo quiero buscar entradas, ¿hay alguna manera de hacerlo? Gracias
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
¿Existe alguna manera de ocultar páginas específicas en lugar de todas las páginas?
user9437856
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
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
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
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');
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
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
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 );
}
@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
@Rup - Y tienes razón - comment no es un tipo de post (corregido).
Krzysztof Przygoda