Как получить страницу пагинации по ID поста?
Как можно получить страницу пагинации по ID поста/страницы зная количество выводимых постов на одной странице "numberposts/posts_per_page" и ID нужного поста?
Примерно так я уже и сделал с таком же запросом, перебором массива и высчитыванием.
Думал возможно в WordPress есть для этого функция или какие то способы.
А надо это для того что бы при клике на отзыв в каруселе на главной, перекидывало на страницу отзывов далее шел скролл и развертывание нужного отзыва с ID из GET параметра. Как раз тут и надо открывать ту страницу пагинации на которой находится нужный отзыв.
Решение:
<?php
// Ссылка с GET параметром ID отзыва
// http://sitename.com/reviews/?rev=123
$review_id = ( !empty($_GET['rev']) ) ? $_GET['rev'] : '';
$paged_rev = 0;
$numberposts = 5; // Количество выводимых постов
if( $review_id ) {
$get_reviews = get_posts( array(
'post_type' => 'review',
'post_status' => 'publish',
'orderby' => 'date',
'order' => 'DESC',
'numberposts' => -1
) );
$posts_count = count($get_reviews); // Получаем количество постов для параметров данного вывода
if( $posts_count > $numberposts ) {
$post_position = 0;
foreach( $get_reviews as $key => $review ) { // Получаем порядковый номер нужного поста в $post_position
if( $review->ID == $review_id ) { $post_position = $key+1; break; }
}
$paged_rev = ceil( $post_position / $numberposts ); // Получаем страницу пагинации нужного поста
}
}
// Далее там где вывод постов
$paged = get_query_var( 'paged' ) ? absint( get_query_var( 'paged' ) ) : 1;
if( $paged_rev > 1 ) $paged = $paged_rev; // Если нужный пост находится на страницах пагинации то переопределяем переменную $paged
$get_reviews = get_posts( array(
'post_type' => 'review',
'post_status' => 'publish',
'orderby' => 'date',
'order' => 'DESC',
'paged' => $paged,
'numberposts' => $numberposts // Количество выводимых постов
) );
if( $get_reviews ) {
foreach( $get_reviews as $review ){
setup_postdata($review);
// Цикл вывода постов
// ...
}
wp_reset_postdata();
}
?>
Можно, но для этого нужно сделать именно тот запрос который делается на странице рубрик, и пройтись по массиву, узнать порядковый номер нужного поста, потом поделить это все на число постов на странице, взять целую часть - это и будет номер страницы пагинации. С большим кол-ом постов это будет тяжелая операция...
В общем, не знаю зачем это вам надо, но рекомендую подумать как решить задачу другим способом...