Сделать вывод 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 шт):
для этого вы можете использовать цикл и в случае когда вы найдете меньше постов чем должно быть, то вы можете сделать выборку недостающих постов. это может выглядеть вот так
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;
}