Skip to main content

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.

/inc/import/mais-ajax.php
$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".

/inc/import/mais-ajax.php
// 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']
);
tip

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.

/inc/import/mais-ajax.php
// 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.

/inc/import/mais-ajax.php
// Update post (for trigger 'save_post' => 'update_data_pour_recherche')
do_action( 'save_post', $post_id, get_post($post_id), true );
tip

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).