Para hacer que el buscador de WordPress busque en custom field, debes seguir los siguientes pasos:
- Accede al panel de administración de tu sitio WordPress y ve a Apariencia > Editor.
- En el lado derecho de la pantalla, selecciona el archivo function.php de tu tema.
- Añade el siguiente código al final del archivo function.php:
function search_custom_fields( $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}(";
// search in title
$search .= "($wpdb->posts.post_title LIKE '{$n}{$term}{$n}')";
// search in content
$search .= " OR ($wpdb->posts.post_content LIKE '{$n}{$term}{$n}')";
// search in custom fields
$search .= " OR EXISTS (
SELECT * FROM $wpdb->postmeta
WHERE post_id=$wpdb->posts.ID AND ($wpdb->postmeta.meta_key = 'nombre_del_campo_personalizado' AND $wpdb->postmeta.meta_value LIKE '{$n}{$term}{$n}')
)";
$search .= ")";
$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_custom_fields', 500, 2 );
- En el código anterior, reemplaza «nombre_del_campo_personalizado» por el nombre del campo personalizado que quieres que se busque.
- Guarda los cambios en el archivo function.php y cierra la página del editor.
Ahora, cuando los usuarios realicen una búsqueda en tu sitio, también se buscará en los campos personalizados que hayas especificado en el código, es sencillamente genial.