Buscar en WordPress por el ID del post

Estoy desarrollando un sistema basado en WordPress de postventa, a base de código propio pero usando herramientas muy WordPress como WooCommerce para gestionar los pagos, custom post types para los tickets y comentarios del CPT para los refrescos de los comentarios (entre otras cosas).

La verdad que el resultado está siendo bastante bueno, pero vaya, de eso no iba esta entrada. Esta entrada iba de como dice el título como permitir buscar por ID en los formularios de búsqueda de WordPress, ya sea en el frontal o en el escritorio.

¿Y esto por qué lo necesitamos? Porque los ticket tienen un ID propio y para el servicio postventa viene muy bien buscar por ID directamente. Y es que si tú aquí pones el ID de una entrada no te la encuentra porque la búsqueda se hace por otros parámetros:

Así que nada, a buscar solución al problema, bastante sencilla por cierto gracias a los hooks que nos ofrece WordPress:

add_filter( 'pre_get_posts', 'incluir_ids_busquedas' );
function incluir_ids_busquedas( $query ){
        if( !is_admin() )
            return;

        if( $query->query_vars['s'] != '' && is_search() && absint( $query->query_vars['s'] ) ){
            $query->set( 'p', absint( $query->query_vars['s'] ) );
            $query->set( 's', '' );
        }
    }   

¿Qué se hace?

  1. Se pregunta si estás en el admin o no, para si no, salir, realmente podrías quitarlo si quieres que la gente te busque en el frontal por ID pero en este caso no era práctico
  2. Luego preguntamos tres condiciones:
    1. Que la variable ‘s’ exista dentro de las variables de la consulta, la que indica que se está buscando algo
    2. Que estemos en una búsqueda
    3. Y que la variable ‘s’ sea un entero
  3. Si se dan estas condiciones:
    1. La variable p que se rellena solo cuando se está buscando un post específico se igual al entero positivo que viene en la búsqueda
    2. Se quita el contenido de s para que no choque con la búsqueda por post_id indicada en p

1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (Ninguna valoración todavía)
Cargando…

Almacenamos las IPs desde la que se envían las valoraciones para evitar fraudes

Carrito