1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
// On récupère les articles WP
$arg = array(
'post_type' => 'products',
'post_status' => 'publish',
'posts_per_page'=> -1
);
$query = new \WP_Query($arg);
// On boucle sur tous les produits WP et on rajoute une notion de "à supprimer => Oui"
$listeProduitsWP = array();
foreach ($query->posts as $key => $value) {
$idExterne = get_field('idExterne');
$listeProduitsWP[$idExterne] = $value;
$listeProduitsWP[$idExterne]->delete = true;
// On décharge un peu la mémoire au fur & à mesure
unset($query->posts[$key]);
}
// Récupère potentiellement des milliers d'articles
$listeProduitExterne = getFromAPI('https//example/getproduit/page/1');
foreach ($listeProduitExterne as $key => $value) {
// l'article existe coté WP et coté API, on update
if(isset($listeProduitsWP[$value->idExterne])) {
// On update le produit dans la base WP, en metant à jour au besoin son titre, sa quantité, toutes ses métadonnées
// L'article étant toujours existant dans l'API, on ne veut pas le supprimer de WP
$listeProduitsWP[$value->idExterne]->delete = false;
}
// l'article n'existe pas dans WP, on l'ajoute
else {
// Ajout d'un produit dans WP, avec toutes ses données
}
}
// Maintenant, on a tout mis à jour, il reste à supprimer les articles WP qui ne sont plus dans l'API :
foreach ($listeProduitsWP as $key => $value) {
if($value->delete) {
// On supprime l'article si delete est resté à true;
}
}
// Et si pagination, on recommence à partir de là (j'utilise biensur des fonctions, je duplique pas mon code pour chaque page ^^) :
$listeProduitExterne = getFromAPI('https//example/getproduit/page/2');
... |
Partager