web-dev-qa-db-fra.com

get_attachment_id () n'obtient que l'ID de la première image jointe après la mise à jour

j'utilise le code expliqué ici pour obtenir l'identifiant des images jointes à un message dans un type de message personnalisé à partir de la valeur $ qui contient l'URL de l'image (les images déjà téléchargées existent dans la médiathèque). le message contient des données et des images que les utilisateurs ont soumises et téléchargées via un formulaire. lorsque je publie un message pour la première fois à partir du menu d'édition rapide, cette fonction fonctionne parfaitement et permet de récupérer l'identifiant de toutes les images jointes, puis je peux utiliser la commande update_field et ajouter des images à un champ d'image acf avec un tableau d'images attachées ids.le problème se produit lorsque je mets à jour/publier un message depuis la page d'édition (pas de menu d'édition rapide). dans ce cas, cette fonction ne renvoie que l'id de la première image jointe et renvoie 0 pour les autres images jointes. alors le champ image acf ne montre que cette image.

other Description qui peut être utile:

j'ai un champ personnalisé appelé "photos" qui contient l'URL des images téléchargées via le formulaire et sa valeur est quelque chose comme ceci:

pic03.png
http://insell.ir/wp-content/uploads/fsqm-files/pic03.png

pic02.png
http://insell.ir/wp-content/uploads/fsqm-files/pic02.png

pic01.jpg
http://insell.ir/wp-content/uploads/fsqm-files/pic01.jpg

j'utilise ce code dans mon modèle pour extraire les URL du champ personnalisé 'pics' et les enregistrer dans $ attach_ids en tant que tableau et enfin mettre à jour le champ image acf avec:

<?php

$img = get_post_meta( get_the_ID(), 'pics', true);
$imgList = explode("\n", $img);
$attach_ids = array();
foreach ( $imgList as &$value ) {
    if ( strpos( $value, 'http:' ) !== false ) {
        $attachment_id = get_attachment_id( $value );
        array_Push($attach_ids, $attachment_id);
    }
}
// print_r ($attach_ids);
$images = update_field( 'slider_portfolio', $attach_ids, get_the_ID() ); 
$images = get_field('slider_portfolio');

?>

dans le cas 1 (publier un message via l'édition rapide), print_r ($ attach_ids); affiche une sortie correcte contenant toutes les images

Array ( [0] => 1276 [1] => 1278 [2] => 1277 )

dans le cas 2 (publication/mise à jour de la publication via la page de modification), print_r ($ attach_ids); montrer cette sortie:

Array ( [0] => 0 [1] => 0 [2] => 1277 )

Toute aide sera grandement appréciée. Merci beaucoup.

3
Hosein.HzK

après 3 jours j'ai trouvé que le problème était dû à un espace dans la fin des urls dans le tableau $ imgList (sauf la dernière url) !!! donc j'ai ajouté trim pour chaque URL (valeur de $) et le problème résolu ...

<?php

$img = get_post_meta( get_the_ID(), 'pics', true);
$imgList = explode("\n", $img);
$attach_ids = array();

foreach ( $imgList as &$value ) {
    if ( strpos( $value, 'http:' ) !== false ) {
        $value = trim($value);
        $attachment_id = get_attachment_id( $value );
        array_Push($attach_ids, $attachment_id);
    }
}

$images = update_field( 'slider_portfolio', $attach_ids, get_the_ID() ); 
$images = get_field('slider_portfolio');

?>

il n'y a pas de problème avec get_attachment_id () function. c'est parfait !

0
Hosein.HzK