Сделать вывод id страниц начиная со следующего id после id текущей страницы?

Есть сайт на Wordpress, на нем есть блок Похожие страницы, в котором выводятся id похожих страниц из раздела Categories, надо пройтись по всем страницам этого раздела. Нужно вывести id следующих 5 страниц, которые идут после текущей страницы, например для страницы c post id 12, следующие id страниц будут, например, 13, 15, 16, 20, 25. Для страницы c post id 13, id будут 15, 16, 20, 25, 26. При этом если на каком то шаге ID нет, большего чем текущий в данный момент, то нужно взять самый маленький ID - чтобы все было закольцовано, т.е. нужно сделать автоматическую кольцевую перелинковку страниц. У страницы с id 100 в блоке Похожие страницы должны быть ссылки начиная с меньшего id, например с id 12.

Сейчас в коде есть функция, но она выводит только один id следующей страницы, а нужно 5 id следующих страниц. Как это сделать в цикле для разных страниц?

 
function get_next_post_id($post_id) {
    global $post;
    $oldGlobal = $post;
    $post = get_post($post_id);
    $next_post = get_next_post();
    $post = $oldGlobal;
    if ('' == $next_post) 
        return 0;
    return $next_post->ID;
}
global $wp_query;
$cur_id = $wp_query->get_queried_object_id();
$next_ID = get_next_post_id($cur_id);
echo "" . $next_ID . " ";

Ответы (1 шт):

Автор решения: Darth KYL

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

function get_next_post_ids( $number_next_posts = 5 ) {
    global $post;

    $ids = [];

    for ( $i = 0; $i < $number_next_posts; $i++ ) {
        $post = get_next_post();
        setup_postdata($post);

        if ( isset( $post->ID ) ) {
            $ids[] = $post->ID;
        }
    }

    wp_reset_postdata();
    $number_of_found_posts = count( $ids );

    if ( $number_of_found_posts < $number_next_posts ) {
        $query = new WP_Query( [
            'post_type' => 'post',
            'posts_per_page' => $number_next_posts - $number_of_found_posts,
            'fields' => 'ids',
            'order' => 'ASC',
            'post__not_in' => array_merge( [$post->ID ], $ids )
        ] );

        if ( ! empty( $query->posts ) ) {
            $ids = array_merge( $ids, $query->posts );
        }

    }

    return $ids;
}
→ Ссылка