web-dev-qa-db-ja.com

Posts_per_pageを使って配列をスライスする方法は?

以下のコードは、すべてのサイズのwp galleryのすべての画像を表示していますが、それが好きではありません。

function get_images_high_data() {

    $args = array(
        'post_type' => 'attachment',
        'post_mime_type' => 'image/jpeg,image/jpg,image/png',
        'post_status' => 'inherit',
        'posts_per_page' => -1,
        'orderby' => 'id',
        'order' => 'ASC'
    );

    // Get all the available thumbnail sizes
    $sizes = get_intermediate_image_sizes();

    // Query the attachments
    $query_images = new WP_Query( $args );

    $images = array();

    // Run a loop
    if ( $query_images->have_posts() ){

        while ($query_images->have_posts()){

            $query_images->the_post();

            // For each attachment size, store its URL in an array
            foreach ( $sizes as $key => $size ) {

                $thumbnails[$key] = wp_get_attachment_image_src( get_the_ID(), $size)[0];
            }

            $images = array_merge( $thumbnails , $images );
        }

        return $images;
    }
}

返される配列は次のようになります。

[0] => thumbnail-url,
[1] => medium-url,
[2] => large-url,
[3] => thumbnail-url,
[4] => medium-url,
[5] => large-url,

しかし、私が'posts_per_page' => 1を設定すると、このように表示されます。

    [0] => thumbnail-url,
    [1] => medium-url,
    [2] => large-url,

しかし、私は以下のような出力が欲しいです。

 [0] => thumbnail-url,

'posts_per_page' => 2を設定すると、このように表示されます。

 [1] => medium-url,
 [2] => large-url,
1
David Cring

私がすでにあなたの 前の質問 で述べたように、ページごとの投稿を設定することはあなたを助けません。ただし、回避策があります。

ページごとに投稿を直接設定する代わりに、変数を使用してそれを変更します。それから同じ変数を使って配列をスライスします。例えば:

$per_page = 2;
// Use the $per_page value to set the posts per page
$args = array(
    'posts_per_page' => $per_page,
);
// The rest of your code here

    // Now, before returning the images, slice the array using
    // the variable we set before
    $images = array_slice($images, 0, $per_page);
    return $images;
2
Jack Johansson