it-swarm.com.de

get_attachment_id () liefert nur die ID des ersten angehängten Bildes nach dem Update

ich verwende den erklärten Code hier , um die ID von angehängten Bildern zu einem Beitrag in einem benutzerdefinierten Beitragstyp von $ value abzurufen, der die URL des Bildes enthält (Bilder, die bereits hochgeladen wurden und in der Medienbibliothek vorhanden sind). Der Beitrag enthält einige Daten und Bilder, die Benutzer über ein Formular eingereicht und hochgeladen haben. Wenn ich einen Beitrag zum ersten Mal über das Schnellbearbeitungsmenü veröffentliche, funktioniert diese Funktion perfekt und ruft die ID aller angehängten Bilder ab. Dann kann ich den Befehl update_field verwenden und Bilder zum Feld acf image mit einer Reihe von Bildanhangs-IDs hinzufügen. Das Problem tritt auf, wenn ich aktualisiere/Post von Edit Page aus veröffentlichen (kein Schnellbearbeitungsmenü). In diesem Fall gibt diese Funktion nur die ID des ersten angehängten Bildes und 0 für andere angehängte Bilder zurück. dann zeigt acf image field only nur dieses Bild an.

andere Beschreibung, die vielleicht nützlich ist:

ich habe ein benutzerdefiniertes Feld mit dem Namen "Bilder", das die URL der über das Formular hochgeladenen Bilder enthält, und dessen Wert ungefähr so ​​lautet:

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

ich benutze diesen Code in meiner Vorlage, um URLs aus dem benutzerdefinierten Feld "Bilder" zu extrahieren und sie in "$ attach_ids" als Array zu speichern.

<?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');

?>

in Fall 1 (Post über Quick Edit veröffentlichen) print_r ($ attach_ids); Zeige die korrekte Ausgabe, die alle Bild-IDs enthält:

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

in Fall 2 (Veröffentlichung/Aktualisierung des Beitrags über die Bearbeitungsseite) print_r ($ attach_ids); zeige diese Ausgabe:

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

Jede Hilfe wäre sehr dankbar. vielen Dank.

3
Hosein.HzK

nach 3 Tagen stellte ich fest, dass das Problem auf ein Leerzeichen am Ende der URLs im Array "$ imgList" zurückzuführen war (mit Ausnahme der letzten URL) !!! Also fügte ich trim für jede URL ($ value) hinzu und löste das Problem ...

<?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');

?>

es gibt kein Problem mit get_attachment_id () function. es ist perfekt !

0
Hosein.HzK