¿Cómo buscar publicaciones usando LIKE para el nombre de categoría en wordpress?

3 minutos de lectura

avatar de usuario
Esar-ul-haq Qasmi

  • Necesito personalizar el filtro de búsqueda básico de Word Press.
  • Funciona bien buscando palabras clave en el título y el contenido de la publicación.
  • Ahora necesito mostrar resultados en los que si el usuario ingresa el nombre que coincide con el nombre de la categoría, entonces debería obtener resultados de esa categoría, así como otros resultados.
  • Supongo que debería ser algo así como usar la cláusula LIKE para los operadores category_name o category_in en la consulta de impuestos.

    
    $args = get_posts(array(
                'fields' => 'ids',
                'post_type' => 'post',
                'post_status' => 'publish',
                'posts_per_page' => -1,
                's' =>  $_REQUEST['s'] ? $_REQUEST['s'] : '' ,
                'tax_query' => array(
                     array(
                    'taxonomy' => 'NAME OF TAXONOMY',
                    'field'    => 'slug',
                    'terms'    => 'SLUG OF the TERM', // LIKE (here should be any LIKE clause etc)
                     ),
                )   
            )); 
     

    Cómo lograr este escenario, significa que cuando el usuario ingresa cualquier palabra clave que coincida con el nombre de la categoría, debe extraer todos los resultados de esa categoría junto con los resultados de búsqueda generales.

Ejemplo: En la barra de búsqueda, el usuario escribe “A B C“y hay una categoría disponible con nombre”Parque ABC“, entonces debería obtener resultados de esta categoría junto con resultados que tengan títulos de publicaciones y contenido que contenga “ABC”.

  • wordpress.stackexchange.com/a/18715

    – Anant – Vivo para morir

    10 de abril de 2017 a las 6:47

  • wordpress.stackexchange.com/a/173752

    – Anant – Vivo para morir

    10 de abril de 2017 a las 6:47

  • @AlivetoDie Estos enlaces no se tratan de buscar desde el nombre de la categoría similar al término de búsqueda. También eche un vistazo a la pregunta editada. Gracias.

    – Esar-ul-haq Qasmi

    10 de abril de 2017 a las 6:50

  • dando un ejemplo de cómo se debe agregar una consulta similar.

    – Anant – Vivo para morir

    10 de abril de 2017 a las 6:52

De acuerdo… se me ocurrió una solución, obtuve todas las identificaciones de categoría de la tabla terms con una consulta LIKE, luego en otra consulta pasó esta matriz como un parámetro de categoría. Aquí está el código.

$term_ids=array(); 
      $cat_Args="SELECT * FROM $wpdb->terms WHERE name LIKE '%".$_REQUEST['s']."%' ";
      $cats = $wpdb->get_results($cat_Args, OBJECT);
      array_push($term_ids,$cats[0]->term_id);    



$q1 = get_posts(array(
        'fields' => 'ids',
        'post_type' => 'post',
        'post_status' => 'publish',
        'posts_per_page' => -1,
        's' =>  $_REQUEST['s'] ? $_REQUEST['s'] : '' 

));
 $q2 = get_posts(array(
        'fields' => 'ids',
        'post_type' => 'post',
        'post_status' => 'publish',
        'posts_per_page' => -1,
        'category' =>$term_ids
));
$unique = array_unique( array_merge( $q1, $q2 ) );

$posts = get_posts(array(
    'post_type' => 'post',
    'post__in' => $unique,
    'posts_per_page' => -1
));
  if ($posts ) : 

foreach( $posts as $post ) :
//show results
endforeach;
endif;

Pero aún así me gustaría una forma más mínima y precisa. 🙂

  • Puede combinar las consultas escribiendo un SQL personalizado que incorpore el SQL generado por get_posts() en su primera instrucción SELECT.

    –Andrew Schultz

    18 de diciembre de 2019 a las 4:02

¿Ha sido útil esta solución?