/** * ===================================================== * Buscador Inteligente * ===================================================== */ public static function search($args = array()){ global $wpdb; $defaults = array( 'texto' => '', 'estado' => '', 'usuario' => '', 'location' => '', 'pluscode' => '', 'fecha' => '' ); $args = wp_parse_args($args,$defaults); $joins = array(); $where = array(); /* ------------------------------------------------------ Sólo Tours ------------------------------------------------------ */ $where[] = "p.post_type='tour'"; $where[] = "p.post_status<>'trash'"; /* ------------------------------------------------------ Usuario ------------------------------------------------------ */ $joins[]="LEFT JOIN {$wpdb->users} u ON u.ID=p.post_author"; /* ------------------------------------------------------ Estado ------------------------------------------------------ */ $joins[]="LEFT JOIN {$wpdb->postmeta} estado ON estado.post_id=p.ID AND estado.meta_key='tour_estado_de_la_publicacion'"; /* ------------------------------------------------------ PlusCode ------------------------------------------------------ */ $joins[]="LEFT JOIN {$wpdb->postmeta} plus ON plus.post_id=p.ID AND plus.meta_key='tour_pluscode'"; $joins[]="LEFT JOIN {$wpdb->postmeta} plus2 ON plus2.post_id=p.ID AND plus2.meta_key='fes_tour_pluscode'"; /* ------------------------------------------------------ Texto ------------------------------------------------------ */ if(!empty($args['texto'])){ $texto='%' . $wpdb->esc_like($args['texto']) . '%'; $where[]=$wpdb->prepare( "( p.post_title LIKE %s OR p.ID=%d )", $texto, intval($args['texto']) ); } /* ------------------------------------------------------ Estado ------------------------------------------------------ */ if(!empty($args['estado'])){ $where[]=$wpdb->prepare( "estado.meta_value=%s", $args['estado'] ); } /* ------------------------------------------------------ Usuario ------------------------------------------------------ */ if(!empty($args['usuario'])){ $usuario='%' . $wpdb->esc_like($args['usuario']) . '%'; $where[]=$wpdb->prepare( "u.display_name LIKE %s", $usuario ); } /* ------------------------------------------------------ PlusCode ------------------------------------------------------ */ if(!empty($args['pluscode'])){ $pc='%' . $wpdb->esc_like($args['pluscode']) . '%'; $where[]=$wpdb->prepare( "( plus.meta_value LIKE %s OR plus2.meta_value LIKE %s )", $pc, $pc ); } /* ------------------------------------------------------ Fecha ------------------------------------------------------ */ if(!empty($args['fecha'])){ $where[]=$wpdb->prepare( "DATE(p.post_date)=%s", $args['fecha'] ); } /* ------------------------------------------------------ Ubicación (taxonomy location) ------------------------------------------------------ */ if(!empty($args['location'])){ $joins[]=" LEFT JOIN {$wpdb->term_relationships} tr ON tr.object_id=p.ID LEFT JOIN {$wpdb->term_taxonomy} tt ON tt.term_taxonomy_id=tr.term_taxonomy_id LEFT JOIN {$wpdb->terms} t ON t.term_id=tt.term_id "; $loc='%' . $wpdb->esc_like($args['location']) . '%'; $where[]=$wpdb->prepare( " tt.taxonomy='location' AND t.name LIKE %s ", $loc ); } $sql=" SELECT DISTINCT p.ID, p.post_title, p.post_date, u.display_name, estado.meta_value estado, COALESCE( plus.meta_value, plus2.meta_value ) pluscode FROM {$wpdb->posts} p ".implode("\n",$joins)." WHERE ".implode("\nAND\n",$where)." ORDER BY p.post_date DESC LIMIT 200 "; return $wpdb->get_results($sql,ARRAY_A); }