J'utilise le plug-in WP All Import pour importer un type de message spécial. Le plug-in inclut un crochet d’action pmxi_gallery_image qui s’exécute après l’importation et enregistre les images de pièce jointe dans la galerie de publications.
J'ai inclus cette action dans une fonction de mon fichier function.php dans mon thème enfant:
//After WP All Import runs this will place the attached photos in the gallery images field by post id
add_action('pmxi_gallery_image', 'update_images_meta', 10, 3);
function update_images_meta( $pid, $attid, $image_filepath ) {
// Get all the image attachments for the post
$param = array(
'post_parent' => $pid,
'post_type' => 'attachment',
'post_mime_type' => 'image'
);
$attachments = get_children( $param );
// Initialize the array
$atts = array();
// Fill the array with attachment ID's
foreach($attachments as $attachment) {
$atts[] = $attachment->ID;
}
// Disable this hook which was overwrinting our changes
// remove_action( 'save_post', 'flexible_save_details', 10 );
// Update the post's meta field with the attachment arrays
update_post_meta( $pid, 'images', $atts );
}
Ceci produit un tableau des identifiants post-image:
a:4:{i:0;i:38985;i:1;i:38986;i:2;i:38987;i:3;i:38983;}
J'ai besoin d'inclure une longueur de chaîne avant id, avec l'id encapsulé entre guillemets, pour que la sortie ressemble à ceci pour la galerie utilisée par le thème:
a:4:{i:0;s:4:"7613";i:1;s:4:"7615";i:2;s:4:"7616";i:3;s:4:"7618";}
Vos données sont sérialisées correctement. Votre code enregistre un tableau d'entiers. Les entiers ne sont pas des chaînes et une longueur de chaîne n'est donc pas enregistrée. Exécutez le code suivant et il devrait illustrer ce point:
$str = 'a:4:{i:0;s:4:"7613";i:1;s:4:"7615";i:2;s:4:"7616";i:3;s:4:"7618";}';
$str = maybe_unserialize($str);
var_dump($str);
echo '<br/>';
var_dump(maybe_serialize($str));
echo '<br/>';
$str = array(
1234,4567,8910,1112
);
var_dump(maybe_serialize($str));
echo '<br/>';
$str = array(
'1234','4567','8910','1112'
);
var_dump(maybe_serialize($str));
Pour obtenir les résultats souhaités, enregistrez des chaînes et non des entiers:
// Fill the array with attachment ID's
foreach($attachments as $attachment) {
$atts[] = "$attachment->ID";
}