Как добавить случайное изображение в сообщение из галереи и показать только одно?


Я знаю, как добавить изображение и галерею. Мне нужно, чтобы одно изображение с камбуза отображалось на странице случайным образом при каждой загрузке страницы.

На странице должно отображаться только одно изображение за раз.

Есть ли плагин или короткий код для этого? Я знаю, как сделать галерею случайной, но они показывают все изображения.

Ответ:

$args = array( 
                'post_type' => 'attachment',
                'numberposts' => 1,
                'orderby' => 'rand',
                'post_status' => null,
                'post_parent' => get_the_ID(),
                'post_mime_type'  => 'image'
            ); 
            have_posts(); //must be in the loop
            the_post(); //set the ID

            $images = get_children( $args );            

            if ($images) {
            foreach ( $images as $attachment_id => $attachment ) {
                    echo wp_get_attachment_image( $attachment_id, 'full' );
                }
            }
            wp_reset_query();
Author: jgraup, 2011-03-27

3 answers

Вы должны использовать параметр 'orderby' => 'rand' для get_children() функция вложений.

Например:

$images = get_children( array(
    'orderby'        => 'rand',       // this is random param
    'post_type'      => 'attachment',
    'post_mime_type' => 'image',
    'post_parent'    => get_the_ID(),
);
 3
Author: Wyck, 2014-05-09 00:40:03

Вы также можете извлечь идентификаторы из ВСЕ галереи на странице с использованием get_post_galleries() и вам не нужен дополнительный цикл.

// pull all the images from all galleries as unique IDs
$images = array_unique( explode( ",", implode( ",", wp_list_pluck( get_post_galleries( get_the_ID(), false ), 'ids' ) ) ) );

// randomize the order
shuffle( $images );

// pull the first id
list ( $id ) = $images;

// convert to image
echo wp_get_attachment_image( $id, 'full' );

Ссылка

 1
Author: jgraup, 2016-03-04 21:19:52

Этот код отвечает на вопрос. На странице или публикации, содержащей галерею, он возьмет одно случайное изображение из галереи и отобразит только это изображение. Он входит в цикл wordpress (код здесь фактически включает цикл).

<?php //start the loop ?>
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

            <?php // get the post's gallery ?>
            <?php if ( get_post_gallery() ) : $gallery = get_post_gallery( get_the_ID(), false ); ?>

                <?php //get gallery picture ids string seperates the ids and puts them in an array. ?>
                <?php $pic_ids = explode(",", $gallery['ids']);?>

                <?php // set a random int < to the size of the array containing ids.?> 
                <?php $i=rand(0, count($pic_ids)-1);?>

                    <?php //get image corresponding to the random id?>
                    <?php echo wp_get_attachment_image( $pic_ids[$i],'full', false, '' ); ?>
                <?php endif; ?>
        <?php endwhile; else : ?>

            <p><?php _e( 'Sorry, no page found.' ); ?></p>

        <?php endif; ?>
 0
Author: Alexandre Babeanu, 2016-03-07 12:52:02