После того, как я почесал голову в течение почти 2 часов, я не могу решить головоломку. Любой, кто сможет мне помочь, буду ему очень благодарен.
Я создал пользовательский тип записи «Свойства» в WordPress. Я пытаюсь следующий код, чтобы перечислить свойства на странице. Все это отображается нормально, кроме изображений.
<?php
$conarg = array (
'post_type' => 'properties',
'order_by' => 'menu_order',
'order' => 'ASC'
);
$condo_query = new WP_Query( $conarg );
if ( $condo_query->have_posts() ) { ?>
<?php
while ( $condo_query->have_posts() ) {
$condo_query->the_post();
?>
<?php
$condo_images_max = 5;
$condo_items = array();
for($i=1; $i <= condo_images_max; $i++) {
//check if image exits
$img_attachment_id = get_field('gallery-image-'.$i);
if(!empty($img_attachment_id)) {
$condo_items[$i] = array(
'image' => wp_get_attachment_image_src($img_attachment_id, 'medium')
);
}
}
$condo_items_keys = array_keys($condo_items);
?>
<div class="box col-md-4 col-xs-12">
<div class="flexslider">
<ul class="slides">
<?php
for($i=0; $i < count($condo_items) ; $i++) {
$image = $condo_items[$condo_items_keys[$i]]['image'];
?>
<li>
<img src="<?php echo $image[0]; ?>" alt="Carousel Image" />
</li>
<?php
}
?>
</ul>
</div>
<?php echo '<h2 class="condo-title">' . get_the_title() . '</h2>';
echo'<ul class="condo-details">';
if(get_field('area_range')) {
echo '<li><span>SQ.FT RANGE:</span> ' . get_field('area_range') . '</li>';
}
if(get_field('room_view')) {
echo '<li><span>ROOM VIEW:</span> ' . get_field('room_view') . '</li>';
}
if(get_field('price_range')) {
echo '<li><span>PRICE RANGE:</span> ' . get_field('price_range') . '</li>';
}
?><a class="condo-btn" href="<?php the_permalink(); ?>"><?php _e('VIEW DETAILS'); ?></a>
<?php
echo'</ul></div>';
}
}
else {
echo'Sorry! No Condos are available at the moment!';
}
/* Restore original Post Data */
wp_reset_postdata();
?>
Как я уже упоминал в своем комментарии, вероятно, стоит перейти на версию PRO и использовать поле повторителя.
В вашем вопросе вы слишком усложняете это, излишне собирая массив, а затем перебирая массив, используя for
вместо foreach
,
Удалите код для создания массива и попробуйте это вместо вашего текущего выходного кода:
<ul class="slides">
<?php // Set maximum number of images to check.
$condo_images_max = 5;
for ( $i = 1; $i <= $condo_images_max; $i++ ) {
// Get image ID.
$image_id = get_field( 'gallery-image-' . $i );
// Check if image ID was found.
if ( $image_id ) {
// Output medium image in an li tag.
echo '<li>' . wp_get_attachment_image( $image_id, 'medium' ) . </li>';
}
} ?>
</ul>
Если вам нужно иметь возможность контролировать вывод элемента изображения и отображать его так, как показано в вашем вопросе, вы можете использовать:
...
if ( $image_id ) {
// Get image source.
$image = wp_get_attachment_image_src( $image_id, 'medium' );
// Check image source was found.
if ( $image ) {
echo '<li><img src="' . $image[0] . '" alt="Carousel Image" /></li>';
}
}
...
Есть одна проблема в том, чтобы сделать это таким образом, чтобы знать (и одна из причин, по которой я предложил повторитель).
Допустим, у вас есть 6 полей изображения, и свойство использует все 6. Администратор тогда решает удалить первое изображение, поэтому теперь у свойства есть 5 изображений. Код все еще будет работать, потому что мы проверяем, что изображение было найдено, прежде чем пытаться его вывести, но вместо того, чтобы показать все 5 изображений, вы увидите только 4 из них. Изображение № 1 пустое, и мы сказали ему прекратить присматривать за изображением № 5.
Других решений пока нет …