2010-11-16 12 views
11

Quiero usar la función de búsqueda wordpress pero quiero que solo busque en las publicaciones de mi blog y excluya mis páginas estáticas de la consulta. ¿Como hacer esto? No me opongo a usar un plugin. foro sobreFunción de búsqueda de Wordpress para solo buscar publicaciones

+3

Su solución obtendrá sobre-escrito al actualizar WordPress. –

Respuesta

2

este paquete de trabajo tiene un montón de diferentes ejemplos de cómo hacer esto, dependiendo de dónde desea editar su sitio (index.php o wp-includes/query.php son sus opciones creo):

http://wordpress.org/support/topic/possible-search-only-posts-exclude-pages

+0

¡Impresionante! ¡Gracias! – Davey

+1

Hm, parece que este es uno de los mejores puestos, pero para ser sincero, no es de mucha ayuda. Los dos métodos principales son A) Hackear el núcleo (lo cual no debería hacer) B) Descartar los resultados no deseados en la plantilla (ineficiente) Debe ser una forma más fácil de controlar lo que busca la búsqueda - sorprendente WP no tener una función para eso. –

+0

si mira las fechas, puede ver que la publicación tiene más de 3.5 años. Espero que haya algo mejor por ahora que se relacione con la última versión de WP. – wajiw

1
<?php if (have_posts()) : while (have_posts()) : the_post();?> 
<?php if (is_search() && ($post->post_type=='page')) continue; ?> 

intente éste y dime si funciona.

+0

Desafortunadamente, ese no funcionó. – Davey

2

Las soluciones descritas son deficientes. La edición del núcleo impide la capacidad de actualización de la instalación de WordPress. Tendrá que repetir ese cambio cada vez que actualice, lo cual debería estar haciendo. La otra solución coloca carga innecesaria en la base de datos al filtrar los resultados después de recuperarlos. La mejor solución:

En functions.php del tema, añadir una nueva función para escribir un formulario de búsqueda:

function custom_search_form($form, $value = "Search", $post_type = 'post') { 
    $form_value = (isset($value)) ? $value : attribute_escape(apply_filters('the_search_query', get_search_query())); 
    $form = '<form method="get" id="searchform" action="' . get_option('home') . '/" > 
    <div> 
     <input type="hidden" name="post_type" value="'.$post_type.'" /> 
     <input type="text" value="' . $form_value . '" name="s" id="s" /> 
     <input type="submit" id="searchsubmit" value="'.attribute_escape(__('Search')).'" /> 
    </div> 
    </form>'; 
    return $form; 
} 

Ahora, en la plantilla en la que desea la forma (o dentro de cualquier widgets que' he creado, esto fácilmente podría ser registrado como un widget en su lugar), esto:

<?= custom_search_form(null, 'Search posts', 'post'); ?> 

los argumentos podría quedar fuera de la función & llamada, pero me parece que fue amable. La clave de todo esto es la entrada oculta 'post_type', que pasa el valor a la consulta. El valor predeterminado, post, asegurará que solo se devuelvan las publicaciones.

+0

En realidad, esto no funciona. Devuelve todas las páginas y las publicaciones en la búsqueda. – AndyWarren

+0

En realidad, esto funciona. Esta es la mejor solución IMO. – mikeybeck

32

respuesta está aquí

http://www.shilling.id.au/2011/06/23/wordpress-search-only-show-post-and-not-pages/

<?php 
function SearchFilter($query) { 
    if ($query->is_search) { 
     $query->set('post_type', 'post'); 
    } 
    return $query; 
} 
add_filter('pre_get_posts','SearchFilter'); 
?> 
+0

Esto es exactamente lo que estaba buscando, ¡gracias! – Galen

+0

¡Muchas gracias! –

+2

La respuesta aceptada (y la publicación del foro vinculada) describen resultados deficientes. Nunca es una buena idea editar archivos centrales, y omitir resultados en el ciclo foreach podría resultar en problemas cuando se trata de paginación. ¡Este gancho es una solución mucho mejor! – mjsarfatti

10

Basta con añadir <input type="hidden" name="post_type" value="post" /> a la búsqueda de tema ... saludos!

+0

¡Esto funcionó para mí! –

+0

¡Esta es la mejor respuesta! ¡Vota arriba! –

0

Combina la consulta con la consulta global.

global $wp_query;  
    $args = array_merge($wp_query->query, array('post_type' => 'post')); 
    query_posts($args); 
0

Puede usar WP Buscar http://wpsear.ch/ y se puede configurar qué tipos de mensaje para mostrar en los resultados.

0

Esta solución hace que la búsqueda recupere solo publicaciones si no ha especificado un tipo de publicación diferente. Este método no interferirá si especifica un tipo de publicación personalizado en un campo oculto en un campo de búsqueda diferente.

function searchFilter($query) { 
    if ($query->is_search) { 
     if (!isset($query->query_vars['post_type'])) { 
      $query->set('post_type', 'post'); 
     } 
    } 
    return $query; 
} 
add_filter('pre_get_posts','searchFilter'); 
0
'<form role="search" method="get" id="searchform" class="searchform" action="' . esc_url(home_url('/')) . '"> 
       <div> 
        <label class="screen-reader-text" for="s">' . _x('Search for:', 'label') . '</label> 
        <input type="text" value="' . get_search_query() . '" name="s" id="s" /> 
        <input type="submit" id="searchsubmit" value="'. esc_attr_x('Search', 'submit button') .'" /> 
       </div>' 
      </form>; 
Cuestiones relacionadas