3. Mise à jour du post
Une fois le post archive créé (ou récupéré grâce à son identifiant unique), nous allons mettre à jour ses champs personnalisés, ses catégories, fichiers liés etc.
3.1 Gestion des champs ACF
Tout d'abord, nous effectuons un "mapping" entre champs ACF qui pourrons être modifiés et les noms des colonnes fournies par le fichier .xlxs
. Par exemple, nous associons la valeur de la colonne "boite" à notre champ ACF "n_de_boite". Cela permet plus de flexibilité, nottament en cas de changement de nomenclature du fichier d'import .xlxs
.
$mapping = [
'resume_pour_diffusion' => 'resume_pour_diffusion',
'debut' => 'debut',
'fin' => 'fin',
'auteur' => 'auteur',
'n_de_boite' => 'boite',
'service_proprietaire' => 'service_proprietaire',
'date_de_prise_de_vue' => 'date_de_prise_de_vue',
'date_de_production' => 'date_de_production',
'droits' => 'droits',
'generique_credits' => 'generique_credits',
'lieu_de_tournage' => 'lieu_de_tournage',
'mots_cles_geographiques' => 'mots_cles_geographiques',
'concept' => 'concept',
'objectifs' => 'objectifs',
'personnalite' => 'personnalite',
'photographe' => 'photographe',
'prix' => 'prix',
'production' => 'production',
'realisateur' => 'realisateur',
'thematique' => 'thematique',
'duree' => 'duree',
];
foreach ($mapping as $acf_field => $data_key) {
// Code
...
// Exemple de beautify de données
if( $data_key == 'generique_credits' ){
$text = wpautop( $data[$data_key] );
update_field($acf_field, $text, $post_id);
continue;
}
// Update acf
update_field($acf_field, $data[$data_key], $post_id);
}
Nous bouclons sur ces champs ACF afin de les mettre à jour sur le "post" courant, certaines données comme les dates ou les génériques sont traitées spécifiquement.
Ensuite certains champs sont mis à jour, dans notre exemple ci-desosus le champ TRUE/FALSE
indiquant si l'archive provient des données "Transparence 39/45", ainsi que la taxonomie personnalisée "theme".
// Transparence 39-45
if( !empty($data['transparence_39_45']) && $data['transparence_39_45'] == 'oui' ){
update_field('transparence_3945', 1, $post_id);
}
// File Added columns (themes)
add_or_create_term(
$post_id,
'theme',
$data['theme']
);
add_or_create_term(
$post_id,
'theme',
$data['sous_theme'],
$data['theme']
);
La fonction add_or_create_term()
est définie dans le fichier /inc/customTaxonomies/add-terme.php
. Elle permet de gérer s'il faut créer ou sélectionner un thème existant ainsi que les spécificités des thèmes pour le projet Sardo (thème parent > thème enfant).
3.2 Gestion des fichiers d'archive et de leur prévisualisation
Afin de définir l'image à la une du post Wordpress courant, nous exécutons la fonction upload_media_document()
. Nous détaillerons cette fonction dans une autre rubrique. Celle-ci est définie dans le fichier /inc/import/medias.php
et permet d'ajouter le fichier source de l'archive à la galerie des médias Wordpress, ainsi que de générer une prévisualisation addtionnelle .png
des archives au format .pdf
.
// Thumbnail
$data['thumbnail'] = [null,null];
if( $_POST['preview'] == true ){
if( $thumbnail_and_file = upload_media_document( $data['nom_du_fichier'], $data['transparence_39_45'] ) ){
if( $thumbnail_and_file['file'] ){
update_field('fichier', $thumbnail_and_file['file'], $post_id);
}
if( !empty($thumbnail_and_file['thumbnail']) ){
set_post_thumbnail($post_id, $thumbnail_and_file['thumbnail'][0]);
$data['thumbnail'] = $thumbnail_and_file['thumbnail'];
}
}
}
3.3 Enregistrement du post
Pour finir, nous "forçons" l'enregistrement du post en éxecutant l'action wordpress save_post
.
// Update post (for trigger 'save_post' => 'update_data_pour_recherche')
do_action( 'save_post', $post_id, get_post($post_id), true );
Ceci n'est pas strictement obligatoire après la modification de nos ACF, mais nous assure l'éxecution de l'action update_data_pour_recherche
permetant d'enregistrer le champ ACF data_pour_recherche
(data_pour_recherche).