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