J'utilise le code ci-dessous pour interroger 5 sites Wordpress sur leurs publications, les fusionnant dans un tableau, les triant par date et les affichant ensuite:
//SITE 1
$mydb = new wpdb('xxxx','xxxx','xxxx','localhost');
if($mydb) {
$query1 = $mydb->get_results("SELECT * FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish'", OBJECT);
}
$mydb->flush();
//SITE 2
$mydb = new wpdb('xxxx','xxxx','xxxx','localhost');
if($mydb) {
$query2 = $mydb->get_results("SELECT * FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish'", OBJECT);
}
$mydb->flush();
//SITE 3
$mydb = new wpdb('xxxx','xxxx','xxxx','localhost');
if($mydb) {
$query3 = $mydb->get_results("SELECT * FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish'", OBJECT);
}
$mydb->flush();
//SITE 4
$mydb = new wpdb('xxxx','xxxx','xxxx','localhost');
if($mydb) {
$query4 = $mydb->get_results("SELECT * FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish'", OBJECT);
}
$mydb->flush();
//SITE 5
$mydb = new wpdb('xxxx','xxxx','xxxx','localhost');
if($mydb) {
$query5 = $mydb->get_results("SELECT * FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish'", OBJECT);
}
$mydb->flush();
//MERGE ARRAYS
$allsitearrays = array_merge($query1, $query2, $query3, $query4, $query5);
//SORT BY DATE
function cmp($a, $b) {
if ($a->post_date == $b->post_date) {
return 0;
} else {
return $a->post_date < $b->post_date ? 1 : -1; // reverse order
}
}
usort($allsitearrays, 'cmp');
//OUTPUT
if ( $allsitearrays ):
global $post;
foreach($allsitearrays as $post) {
//OUTPUT HERE
}
endif;
Cela fonctionne très bien, sauf que je ne peux pas récupérer l’image sélectionnée de la publication avec cette méthode. Je ne peux pas utiliser les fonctions natives telles que wp_get_attachment_image_src
et j'ai envie d'interroger à nouveau la base de données alors que je suis dans la boucle pour chaque publication. Essayer de découvrir que postmeta serait finalement trop complexe et aurait trop de requêtes.
Existe-t-il un moyen d’obtenir le postmeta des articles interrogés lors de la première interrogation ou une méthode que je peux utiliser pour éviter de faire autant d’interrogations?
Voici un moyen d'obtenir le postmeta des publications en rejoignant la table postmeta et en récupérant la méta valeur _wp_attached_file
.
Essaye ça:
$mydb->get_results( select a.*, thumb.meta_value
from wp_posts a
left join (select b.post_id, c.meta_value
from wp_postmeta b, wp_postmeta c
where b.meta_key = '_thumbnail_id'
and b.meta_value = c.post_id
and c.meta_key = '_wp_attached_file') as thumb
on thumb.post_id = a.ID
where a.post_type = 'post'
and a.post_status = 'publish', OBJECT );