¿Estás buscando una forma de limitar tus resultados de búsqueda a los títulos de las publicaciones? Si bien probablemente exista un plugin para esto, hemos creado un fragmento de código rápido que puedes usar para limitar la búsqueda solo a los títulos de las publicaciones en WordPress.
Instrucciones:
Todo lo que tienes que hacer es agregar este código al archivo functions.php de tu tema o a un plugin específico del sitio:
function __search_by_title_only( $search, &$wp_query )
{
global $wpdb;
if ( empty( $search ) )
return $search; // skip processing - no search term in query
$q = $wp_query->query_vars;
$n = ! empty( $q['exact'] ) ? '' : '%';
$search =
$searchand = '';
foreach ( (array) $q['search_terms'] as $term ) {
$term = esc_sql( like_escape( $term ) );
$search .= "{$searchand}($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
$searchand = ' AND ';
}
if ( ! empty( $search ) ) {
$search = " AND ({$search}) ";
if ( ! is_user_logged_in() )
$search .= " AND ($wpdb->posts.post_password = '') ";
}
return $search;
}
add_filter( 'posts_search', '__search_by_title_only', 500, 2 );
Nota: Si es la primera vez que agregas fragmentos de código en WordPress, consulta nuestra guía sobre cómo agregar fragmentos de código correctamente en WordPress, para que no rompas accidentalmente tu sitio.
Si te gustó este fragmento de código, considera echar un vistazo a nuestros otros artículos en el sitio como: 43 mejores temas de fotografía para WordPress y 11 mejores plugins de slider para WordPress.
de todos modos puedes ayudarme... No consigo que esto funcione con DIVI THEME
Hola, gracias por esta publicación. Me preguntaba si sabías cómo adaptar el código para que funcione para un tipo de publicación personalizado, específicamente, para WP Job Manager, el tipo de publicación es: job_listing. Gracias.
cómo ignorar espacios en la búsqueda
ej. iphone 7 32 gb
y iphone 7 32gb
solo con un espacio entre 32 y gb devuelve una gran diferencia en los resultados
cómo podemos ignorar estos espacios en la búsqueda de WordPress agregando una función
para que obtengamos los mismos resultados de ambos tipos de búsqueda
Por favor, avisa
Saludos
Tu código funciona bien en local, aún no lo he probado en vivo, mi PHP y mi conocimiento de WordPress no son tan buenos, he estado tratando de que
$wpdb->postmeta.page_banner_subtitle se busque además de post_title, sin éxito, fuera de mi alcance, ¿alguien puede ayudarme o indicarme la dirección correcta.
Gracias.
¿esto es para el front-end o también funciona en el back-end?
Esto es para el front-end.
¡Funciona genial! Un excelente fragmento de código, pero ¿cómo limitarías la búsqueda solo a los títulos de las publicaciones y no a los títulos de las páginas?
Hola Richard, nos alegra que te guste. El fragmento está escrito específicamente para títulos de publicaciones. Puedes ver que se dirige al CPT de Publicaciones.
Esto me funcionaba bien hace un mes.
Ahora obtengo errores de PHP.
¿Tienes alguna solución actualizada?
Es un código genial para un sitio grande.
Advertencia: Se esperaba que el parámetro 2 de __search_by_title_only() fuera una referencia, se dio un valor en /wp-includes/class-wp-hook.php en la línea 303
Podrías intentar cambiar la línea 1 a:
function __search_by_title_only( $search, $wp_query )¿Por qué incluso si ingreso texto en el formulario de búsqueda, el límite de caracteres es solo de 5 caracteres?
¿Cómo lo resuelvo?
Gracias, pero funciona al 100% si se usa Chrome, etc., pero no bien (solo obtienes la mitad de los resultados que deberías) si se usa I.E. (el navegador #1 del mundo), ¡bizarremente!
Puede ser que I.E. tenga un problema adicional, ya que este código se ejecuta en el servidor y no en el navegador.
Hola, los caracteres turcos y los no turcos coinciden como iguales. por ejemplo, cuando busco “aşk” puede darme ask, aşk. ¿cómo puedo arreglar eso? quiero solo aşk cuando busco aşk. Gracias.
Eso es realmente útil, ¿se puede adaptar para buscar títulos de publicaciones y páginas?
¡Esto es realmente genial! ¡Gracias!
código: add_filter( ‘posts_search’, ‘__search_by_title_only’, 500, 2 );
2 parámetros: 500, 2. ¿Qué significa?
500 es la prioridad y 2 es el número de parámetros en la función de callback.
add_filter( ‘posts_search’, ‘__search_by_title_only’, 500, 2 );
2 parámetros 500, 2. ¿Qué significa?
No entiendo mucho de PHP, ¿necesito poner algo antes y después de ese código?
Esto es genial… Me pregunto cómo agregar este código a la búsqueda del backend. También quiero una búsqueda por título para el backend de WP… 🙂
¡Gracias! 🙂
Hola,
Eso fue realmente increíble.
Acabas de resolver mi problema con el mínimo esfuerzo de mi parte.
Muchas gracias.
¡Esto es genial! Tengo 2 formularios de búsqueda en mi sitio web. ¿Es posible aplicar esta función solo a 1 de los formularios de búsqueda?
¡Hola, señor!
Eres genial, muchas gracias
Gracias Kevin… exactamente el código que estaba buscando…
Genial, me alegra saber que pude ayudar.
Soy nuevo (también conocido como "soy un desastre") tanto en PHP como en WordPress. ¿Simplemente coloco este código en cualquier lugar o hay un lugar específico donde deba ir o reemplazar algún código que ya esté allí?
Puse esto al final de la página functions.php y mi pantalla se puso blanca, así que lo quité.
Ok, estaba agregando esto al archivo functions.php de WordPress y no al del tema. Funciona a la perfección.
¡Gran código! Esto realmente limpia la búsqueda de WordPress. ¿Hay alguna forma de incluir las primeras X palabras de la publicación? ¿Quizás con la función substr?
$content = get_the_content();
$content = strip_tags($content);
echo substr($content, 0, 50);
En tu plantilla de resultados de búsqueda podrías recortar la cantidad de texto que se muestra usando la etiqueta de plantilla "excerpt" para un resultado más corto sin ningún hackeo.
¡Esto es genial! Algo que me gustaría ver es un ajuste de búsqueda que limite los resultados a títulos y etiquetas. De esa manera, tengo la libertad de titular mis publicaciones como quiera sin preocuparme por tener que incluir términos de búsqueda de palabras clave.
¡Me alegra saber que te gusta el fragmento! Si vas a llevar las cosas tan lejos como etiquetas, etc., te recomendaría echar un vistazo al plugin "search everything", tiene muchas opciones que puedes configurar.
¡no funciona! 🙁
¿qué versión de wordpress estás ejecutando actualmente? Pruebo todo para asegurarme de que funcione antes de publicar un fragmento. Lo revisaré de nuevo solo para estar seguro.
3.2.1
esta es la salida de $search:
Y ( Y (((wpmtx_posts.post_title LIKE ‘%alice%’) O
(wpmtx_posts.post_content LIKE ‘%alice%’)) Y ((wpmtx_posts.post_title
LIKE ‘%cooper%’) O (wpmtx_posts.post_content LIKE ‘%cooper%’)))
(.post_title LIKE ‘%alice%’) Y (.post_title LIKE ‘%cooper%’) O
(.post_title LIKE ‘%alice cooper%’))
hice una pequeña actualización, a ver si eso lo soluciona.
¡Sí! ¡Ahora funciona! ¡¡¡Muchas gracias!!!
3.2.1
esta es la salida de $search:
Y ( Y (((wpmtx_posts.post_title LIKE ‘%alice%’) O
(wpmtx_posts.post_content LIKE ‘%alice%’)) Y ((wpmtx_posts.post_title
LIKE ‘%cooper%’) O (wpmtx_posts.post_content LIKE ‘%cooper%’)))
(.post_title LIKE ‘%alice%’) Y (.post_title LIKE ‘%cooper%’) O
(.post_title LIKE ‘%alice cooper%’))
[…] [Fuente: WPSNIPP] […]