WordPress ACF Случайное изображение из поля повторения

#php #wordpress #advanced-custom-fields

Вопрос:

Я создал поле повторителя под названием «random_images». Он содержит подполя: «случайная фотография один» (до пяти)

Одно случайное изображение за раз из этих пяти должно отображаться на моем интерфейсе. Изображения должны соответственно изменяться: при загрузке страницы должно отображаться одно случайное изображение. Через пару секунд изображение должно смениться на другое.

Как мне это сделать?

Я новичок в ACF и PHP. Это то, к чему я пришел до сих пор:

  if (get_row_layout() == 'random_images') {

            $rows = get_sub_field('random_images'); 
            $rand_row_image = array_rand($random_images, 1); 
            $image = wp_get_attachment_image_src($rand_image, 'full');
          
        }

 

Ответ №1:

Я предполагаю , что у вас есть поле повторителя random_images , которое называется поддиапазоном повторяемости (поле изображения) image , поэтому, когда вы перейдете в свой редактор записей (или куда бы вы ни поместили повторяемое поле), вы можете повторить поле изображения столько раз, сколько хотите, и поместить туда столько изображений, сколько хотите.

Затем, если вы введете свой код в single.php (или вы создаете части шаблона или другие файлы шаблонов), вы можете сделать это:

 <?php
    // ... template code already there
    
    $random_images = get_field('random_images');
    //The line below will mix the array randomly, so you always pick a random element from it
    shuffle($random_images);
    $random_img_url = $random_imges[0]['image']['url'];
?>
 

Примечание. Способ получения URL-адреса может измениться в зависимости от того, как вы настроили свои поля при их создании, но в этом и заключается идея.

Примечание: Если вы хотите использовать get_field() вне цикла, вам придется использовать идентификатор записи таким образом get_field('random_images', $post_id);

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

     <img src="<?php echo $random_img_url; ?>" />
 

До этого момента вы использовали PHP для визуализации случайного изображения, но с помощью PHP вы не можете изменить изображение после загрузки страницы, поэтому для этого вам придется использовать jQuery (вы можете использовать ванильный JavaScript, но для упрощения я объясню это с помощью jQuery).

Если у вас нет пользовательского файла для размещения кода JS в разрабатываемой теме, вам придется создать файл с именем custom.js или любым другим именем, которое вы хотите ему присвоить, а затем поставить этот файл в wp_enqueue_script очередь . Я не буду больше объяснять это, потому что это не имеет прямого отношения к вопросу.

Теперь у вас есть свой custom.js файл, но вам понадобится способ получить другие URL-адреса изображений со страницы со случайными изображениями, поэтому для достижения этой цели вы можете сделать следующее там, где мы оставили php-код выше.

 <?php
    $rand_imgs_urls = [];
    foreach($random_images as $image) {
        $rand_imgs_urls[] = $image['image']['url'];
    }
// Now, instead of the <img /> tag we used above, we will use this
?>
<div class="random-img" data-images="<?php echo json_encode($rand_imgs_urls); ?>">
    <img src="<?php echo $rand_imgs_urls[0]; ?>" />
</div>
 

После того, как вы отрисовали изображение, теперь вы можете использовать jQuery для размещения изображений в data-images атрибуте div выше и изменять src изображения каждые несколько секунд. Итак, в custom.js файл, в который вы можете поместить что-то вроде этого:

 jQuery(document).ready(function($) {
    var images = JSON.parse($('.random-img').data('images'));
    var randomImage = images[Math.floor(Math.random()*images.length)];
    setInterval(function(){ $('.random-img img').attr('src', randomImage); }, 5000);
});
 

При этом изображение будет меняться каждые 5 секунд.