Mi sono imbattuto nella necessità di effettuare una ricerca concatenate su tabelle wodpress e dopo qualche minuto ho partorito il topolino in php 🙂
global $wpdb; // carico le variabili globali di wp per il collegamento al db
$tabpost=$wpdb->prefix."posts", tabmeta=$wpdb->prefix."postmeta"; // imposto il nome delle tabelle
$ricerca="rossi"; // la mia ricerca
// preparo la stringa SQL da eseguire
stringa_sql ="
SELECT
post.ID,
data.meta_value,
tel.meta_value,
nom.meta_value, cog.meta_value
FROM $tabpost AS post
INNER JOIN $tabmeta AS data ON (post.ID = data.post_id AND data.meta_key = 'nascita')
INNER JOIN $tabmeta AS tel ON (post.ID = tel.post_id AND tel.meta_key = 'telefono')
INNER JOIN $tabmeta AS nom ON (post.ID = nom.post_id AND nom.meta_key = 'nome')
INNER JOIN $tabmeta AS cog ON (post.ID = cog.post_id AND cog.meta_key = 'cognome')
WHERE post.post_type='cliente' and post.post_status='publish'
AND (data.meta_value LIKE '%". ricerca."%'
OR tel.meta_value LIKE '%".$ricerca."%' OR nom.meta_value LIKE '%". $ricerca."%' OR cog.meta_value LIKE '%". $ricerca."%' OR CONCAT(nom.meta_value,' ', cog.meta_value) LIKE '%".$ricerca."%' OR CONCAT(cog.meta_value,' ', nom.meta_value) LIKE '%".$ricerca."%' OR
post.ID = '".$_REQUEST['ricerca']."'
)
ORDER BY post.ID
";
$wpdb->show_errors(); // mi preparo a memorizzare eventuali errori
$my_ricerca= $wpdb->get_results($stringa_sql); // eseguo la stringa SQL
$wpdb->print_error();
print_r($my_ricerca); // leggo a video array generato
// volendo posso impostare un ciclo foreach per lavorare i record
foreach ($my_ricerca as $nominativo){
//... leggo i campi dell'array
}