web-dev-qa-db-ja.com

get_attachment_id()は更新後の最初の添付画像のIDのみを取得します

画像のURLを含む$ valueからカスタム投稿タイプの投稿に添付された画像のIDを取得するには、{ here というコードを使用します(画像は既にアップロードされ、Media Libraryに存在します)。投稿には、ユーザーがフォームを介して送信およびアップロードしたデータと画像が含まれています。クイック編集メニューから初めて投稿を公開したとき、その機能は完璧に動作し、すべての添付画像のIDを取得しています。 /編集ページから投稿を公開します(クイック編集メニューではありません)。この場合、その関数は最初の添付画像のIDのみを返し、他の添付画像の場合は0を返します。それからACFイメージフィールドはそのイメージだけを表示します。

その他役に立ちそうな説明:

フォームを介してアップロードされた画像のURLを含む 'pics'という名前のカスタムフィールドがあり、その値は次のようになります。

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

私は私のテンプレートで 'pics'カスタムフィールドからURLを抽出し、それらを配列として$ attach_idsに保存し、最後にそれでacf imageフィールドを更新するためにこのコードを使用します。

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

?>

ケース1(クイック編集で投稿を公開)、print_r($ attach_ids);すべての画像IDを含む正しい出力を表示します。

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

ケース2(編集ページで投稿を公開/更新)、print_r($ attach_ids);この出力を表示して下さい:

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

どんな助けでも本当に感謝されるでしょう。どうもありがとうございました。

3
Hosein.HzK

3日後、私は問題が$ imgList配列内のURLの末尾にスペースがあるためであることがわかりました(最後のURLを除く)。だから私は トリム を各URL($ value)に追加して問題を解決しました...

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

?>

get_attachment_id() functionに問題はありません。パーフェクトだ !

0
Hosein.HzK