Не отображается результат работы php кода
Задача:
Дать возможность администратору сайта самостоятельно загружать изображения в раздел портфолио. Портфолио отображется на странице сайта в виде галереи изображений.
Решение:
Установил плагин Pods — Custom Content Types and Fields, создал поле images - появилась возможность загружать много изображений в запись.
Теперь пытаюсь вывести эти изображения в верстке. Использую следующий код (код взял тут):
<?php if ( get_post_meta( get_the_ID(), 'images', false ) ){ //images название вашего произвольного поля $image_array = get_post_meta( get_the_ID(), 'images', false ); //images название вашего произвольного поля } if ( $image_array ) { foreach ( $image_array as $image ) { $thumbimg = wp_get_attachment_image( $image['ID'], 'thumbnail'); $fullimg = pods_image_url( $image['ID'], 'large'); echo '<a href="'. $fullimg . '">' . $thumbimg . '</a>'; } } ?>
Но данный код не срабатывает. При просмотре кода страницы в браузере, на том месте, где должен отобразиться результат работы кода - абсолютно пусто.
В чем может быть дело?
Проверьте, какой ID возвращает функция get_the_ID(). Он такой, какой должен быть?
Похоже, что нет. Я посмотрел ID таким образом
$image_array = get_post_meta( get_the_ID(), 'images', false ); $post_id = get_the_ID(); echo $post_id;
То, что отобразилось и id поста не совпадают ..
Вот Вам и ответ, почему не получаете в get_post_meta() ожидаемого значения, ведь оно запрашивается не у той записи. Вам нужно разобраться, почему так произошло. Скорее всего был вторичный цикл и Вы его не обнулили. Подробнее можно почитать в наших статьях "Что такое цикл в WordPress" и "3 способа построения циклов в WordPress".
Действительно, на странице есть еще два цикла:
$posts = get_posts( array( 'category_name' => 'services', 'order' => 'ASC', 'numberposts' => 0, 'post_type' => 'post', 'suppress_filters' => true, // подавление работы фильтров изменения SQL запроса ) ); foreach( $posts as $post ){ setup_postdata($post);
но оба они сопровождаются
wp_reset_postdata();
Я решил поменять плагин, который позволяет загружать в запись множество файлов изображений. Это ACF Photo Gallery Field для Advanced Custom Field (ACF). Проверил номер поста. к кторому обращается код, и тот же самый неправильный пост №7 что и в скрипте до этого.
Код ACF Photo Gallery Field :
<?php //Get the images ids from the post_metadata $images = acf_photo_gallery('portfolio', $post->ID); echo $post->ID; //Check if return array has anything in it if( count($images) ): //Cool, we got some data so now let's loop over it foreach($images as $image): $id = $image['id']; // The attachment id of the media $title = $image['title']; //The title $caption= $image['caption']; //The caption $full_image_url= $image['full_image_url']; //Full size image url $full_image_url = acf_photo_gallery_resize_image($full_image_url, 262, 160); //Resized size to 262px width by 160px height image url $thumbnail_image_url= $image['thumbnail_image_url']; //Get the thumbnail size image url 150px by 150px $url= $image['url']; //Goto any link when clicked $target= $image['target']; //Open normal or new tab $alt = get_field('photo_gallery_alt', $id); //Get the alt which is a extra field (See below how to add extra fields) $class = get_field('photo_gallery_class', $id); //Get the class which is a extra field (See below how to add extra fields) ?> <div class="col-xs-6 col-md-3"> <div class="thumbnail"> <?php if( !empty($url) ){ ?><a href="https://wordpress.org/plugins/navz-photo-gallery/<?php echo $url; ?>" <?php echo ($target == 'true' )? 'target="_blank"': ''; ?>><?php } ?> <img src="https://wordpress.org/plugins/navz-photo-gallery/<?php echo $full_image_url; ?>" alt="<?php echo $title; ?>" title="<?php echo $title; ?>"> <?php if( !empty($url) ){ ?></a><?php } ?> </div> </div> <?php endforeach; endif; ?>
В некотором смысле проблема решилась путем размещения загрузчика файлов-изображений в той конкретной записи ID которой получает указанный скрипт. В моем случае это главная страница.
Продолжаю разбираться почему так.
Вот оптимизированный код:
Код не выполняется, когда $image_array == false. А это - или нет такого мета поля у текущей записи или это поле пустое.
Разкомментируйте строку и гляньте что приходит в $image_array
Результат:
array(0) {
}
Но поле с таким именем точно есть, и файлы изображений загружены в запись
Это значит: поле images к текущей записи - пустое.
вместо $image['ID'] используйте $image->ID