¿Cómo obtener mediante programación publicaciones que coincidan con una consulta de búsqueda en WordPress?

3 minutos de lectura

avatar de usuario
Alan fuelle

En mi código de complemento me gustaría realizar un WP_Query (o similar) que devuelve todas las publicaciones que coinciden con una cadena de consulta dada, como si el usuario hubiera escrito esa misma cadena en el formulario de búsqueda de WordPress. Tal vez solo estoy siendo denso, pero parece que no puedo encontrar una manera de hacerlo. Esperaría tener un parámetro especial para WP_Querycomo matchingpero no veo evidencia de uno.

Comenzaré a revisar el código base de WordPress para ver cómo se hace internamente y publicaré la respuesta aquí si la encuentro. Solo pensé que alguien podría saberlo de improviso.

avatar de usuario
gradyetc

Pasar una variable de consulta de “s” a WP_Query con un término de búsqueda filtrará los resultados de la publicación por término de búsqueda:

$query_args = array( 's' => 'disquiet' );
$query = new WP_Query( $query_args );

El SQL correspondiente WHERE La cláusula generada por esta consulta se ve así:

AND (((wp_posts.post_title LIKE '%disquiet%') OR (wp_posts.post_content LIKE '%disquiet%')))

La búsqueda predeterminada incluye los comodines como se muestra arriba, que probablemente sea lo que está buscando. Si desea una búsqueda exacta, también puede pasar una consulta var de "exact" => true.

Para los detalles ver el get_posts método de WP_Query en wp-incluye/consulta.php.

  • ¿Puede decirnos después de pasar la variable de consulta a s cómo puedo obtener una lista de blogs a pesar del contenido del blog buscado a partir de que hice lo mismo pero me da el contenido de la publicación a pesar de la lista de blogs?

    – Hetal1311

    3 de agosto de 2017 a las 6:32


avatar de usuario
Aram Kocharyan

Yo uso esto en mi plugin:

$query = new WP_Query(array(
    'post_type' => 'any',
    'suppress_filters' => TRUE,
    'posts_per_page' => '-1'
));

foreach ($query->posts as $post) {
    // ...
}

post_type es necesario si va a trabajar con tipos de publicaciones personalizadas. suppress_filters evitará que se formatee el contenido si necesita analizarlo. posts_per_page devolverá todas las publicaciones, no el valor predeterminado por página.

  • Adiciones útiles, pero ¿dónde especificas la palabra clave de búsqueda?

    – Khom Nazid

    2 sep 2019 a las 23:26

¿Algo como esto?

// Check the query variable is available
if(!$wp_query) global $wp_query; // If not, global it so it can be read from

// Your custom args
$args = array( 'the_title' => $search_term );

// Merge the custom args with any for the query already
$args = array_merge( $args , $wp_query->query );

// Now do the query
query_posts( $args );

O podrías intentar esto:

$query = array (
    'the_title' => $search_term
);

$queryObject = new WP_Query($query);
// The Loop...

creo que lo que buscas es esto compare

$args = array(
    'post_type' => 'product',
    'meta_query' => array(
        array(
            'key' => 'color',
            'value' => 'blue',
            'compare' => 'LIKE'
        )
    )
 );

de documentación de wordpress

compare (string) - Operator to test. Possible values are '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN'. Default value is '='.

avatar de usuario
mrphpguru

Esta es una forma más simple y fácil de hacer una búsqueda:

$query = "
        SELECT      *
        FROM        $wpdb->posts
        WHERE       $wpdb->posts.post_title LIKE '$param2%'
        AND         $wpdb->posts.post_type="wp_exposants"
        ORDER BY    $wpdb->posts.post_title ";
 $wpdb->get_results($query);

¿Ha sido útil esta solución?