Как добавить случайное изображение в сообщение из галереи и показать только одно?
Я знаю, как добавить изображение и галерею. Мне нужно, чтобы одно изображение с камбуза отображалось на странице случайным образом при каждой загрузке страницы.
На странице должно отображаться только одно изображение за раз.
Есть ли плагин или короткий код для этого? Я знаю, как сделать галерею случайной, но они показывают все изображения.
Ответ:
$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();
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(),
);
Вы также можете извлечь идентификаторы из ВСЕ галереи на странице с использованием 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' );
Ссылка
Этот код отвечает на вопрос. На странице или публикации, содержащей галерею, он возьмет одно случайное изображение из галереи и отобразит только это изображение. Он входит в цикл 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; ?>