画像の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日後、私は問題が$ 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に問題はありません。パーフェクトだ !