web-dev-qa-db-ja.com

ギャラリーからの投稿にランダムな画像を追加して、唯一の画像を表示する方法は?

画像とギャラリーを追加する方法を私は知っています。ページがロードされるたびに、ギャレーから1枚の画像をランダムに表示する必要があります。

ページには一度に1つの画像しか表示されません。

これを行うためのプラグインや短いコードはありますか?ギャラリーをランダムにする方法は知っていますが、すべての画像が表示されます。

答え

$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();
1
Kevin

get_children() 添付ファイル関数には、'orderby' => 'Rand'パラメーターを使用する必要があります。

例えば:

$images = get_children( array(
    'orderby'        => 'Rand',       // this is random param
    'post_type'      => 'attachment',
    'post_mime_type' => 'image',
    'post_parent'    => get_the_ID(),
);
3
Wyck

get_post_galleries() を使って、ページ上のALLギャラリーからIDを取得することもできます余分なループは必要ありません。

// 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
jgraup

このコードは質問に答えます。ギャラリーを含むページまたは投稿では、ギャラリーから1つのランダムな画像を取り出してその画像のみを表示します。それは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