Tu connais sûrement cette situation :
- Un contenu est modifié manuellement dans le back-office
- L’import quotidien ne l’écrase pas car le fichier source n’a pas changé
- Résultat : un décalage entre l’import et ce qui est en base
Les solutions possibles
1. La méthode simple : le champ de contrôle
Parfait quand tu as :
- Une date de mise à jour dans ton import
- Un champ qui sert de référence unique
- Un besoin de comparaison simple
💡 Le principe : on compare la date stockée avec celle du fichier. Si plus récente = mise à jour.
2. La méthode complète : le hash MD5
Idéale pour :
- Les imports avec de nombreux champs customs
- Un besoin de contrôle total
- Éviter les comparaisons champ par champ
Le process en 3 étapes :
- Récupération des metas actuelles :
$post_metas = get_post_meta( get_the_ID() ); // Filtrage des metas à contrôler // Génération du MD5
- Création du hash pour les nouvelles données (le fichier, l’url d’import)
- Comparaison des hashs
Le hook magique : pmxi_is_post_to_update
add_filter(
'wp_all_import_is_post_to_update',
function ( $continue_import, $post_id, $data, $import_id ) {
// la magie c'est ici :)
return $continue_import; // default
},
10,
4
);
Les paramètres :
- $continue_import : le verdict de WP All Import (true/false)
- $post_id : l’ID du post concerné
- $data : les données du fichier
- $import_id : l’ID de l’import
Bonus : Hooks utiles
pmxi_saved_post
add_action(
'pmxi_saved_post',
function ( $post_id, $xml_node, $is_update ) {
// Actions post-traitement
},
10,
3
);
Parfait pour :
- Géocoding
- Enrichissement de données
- Traitements complémentaires
- Etc.
pmxi_after_xml_import
add_action(
'pmxi_after_xml_import',
function ( $import_id, $import ) {
// Actions fin d'import
},
10,
2
);
Utilise-le pour :
- Nettoyage global
- Refresh de cache
- Notifications
- Etc.
Pro Tips 🚀
Pour limiter à certains types de contenus :
add_filter(
'wp_all_import_is_post_to_update',
function ( $continue_import, $post_id, $data, $import_id ) {
$tmp_current_post_type = get_post_type( $post_id );
// only for cpt1 & cpt2
if ( ! in_array( $tmp_current_post_type, array( 'cpt1', 'cpt2' ) ) ) {
return $continue_import;
}
return $continue_import; // default
},
10,
4
);
add_action(
'pmxi_saved_post',
function ( $post_id, $xml_node, $is_update ) {
$tmp_current_post_type = get_post_type( $post_id );
// only for cpt1 & cpt2
if ( ! in_array( $tmp_current_post_type, array( 'cpt1', 'cpt2' ) ) ) {
return;
}
// la magie c'est ici :)
},
10,
3
);

