WordPress нестандартный тип запроса

После того, как я почесал голову в течение почти 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();

?>

1

Решение

Как я уже упоминал в своем комментарии, вероятно, стоит перейти на версию 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.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]