WordPress как на ладони
rgbcode is looking for WordPress developers. Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

Не отображается результат работы 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>';
	}
}

?>

Но данный код не срабатывает. При просмотре кода страницы в браузере, на том месте, где должен отобразиться результат работы кода - абсолютно пусто.

В чем может быть дело?

Заметки к вопросу:
campusboy 5.2 года назад

Проверьте, какой ID возвращает функция get_the_ID(). Он такой, какой должен быть?

johngreen 5.2 года назад

Похоже, что нет. Я посмотрел ID таким образом

$image_array = get_post_meta( get_the_ID(), 'images', false );
		$post_id = get_the_ID();
		echo $post_id;

То, что отобразилось и id поста не совпадают ..

campusboy 5.2 года назад

Вот Вам и ответ, почему не получаете в get_post_meta() ожидаемого значения, ведь оно запрашивается не у той записи. Вам нужно разобраться, почему так произошло. Скорее всего был вторичный цикл и Вы его не обнулили. Подробнее можно почитать в наших статьях "Что такое цикл в WordPress" и "3 способа построения циклов в WordPress".

johngreen 5.2 года назад

Действительно, на странице есть еще два цикла:

 $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; ?>
johngreen 5.2 года назад

В некотором смысле проблема решилась путем размещения загрузчика файлов-изображений в той конкретной записи ID которой получает указанный скрипт. В моем случае это главная страница.
Продолжаю разбираться почему так.

0
johngreen
5.2 года назад
  • 0

    Вот оптимизированный код:

    $image_array = get_post_meta( get_the_ID(), 'images', false );
    //var_dump($image_array);
    
    if ( $image_array != false ) {
    	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>';
    	}
    }

    Код не выполняется, когда $image_array == false. А это - или нет такого мета поля у текущей записи или это поле пустое.

    Разкомментируйте строку и гляньте что приходит в $image_array

    johngreen 5.2 года назад

    Результат:
    array(0) {
    }

    Но поле с таким именем точно есть, и файлы изображений загружены в запись

    kaliyan 5.2 года назад

    Это значит: поле images к текущей записи - пустое.

    Комментировать
  • 0
    el-lable620 el-lable.ru

    вместо $image['ID'] используйте $image->ID

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация