WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Как получить страницу пагинации по ID поста?

Как можно получить страницу пагинации по ID поста/страницы зная количество выводимых постов на одной странице "numberposts/posts_per_page" и ID нужного поста?

Заметки к вопросу:
Kama 5 мес назад

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

В общем, не знаю зачем это вам надо, но рекомендую подумать как решить задачу другим способом...

avense 5 мес назад

Примерно так я уже и сделал с таком же запросом, перебором массива и высчитыванием.
Думал возможно в WordPress есть для этого функция или какие то способы.

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

Kama 5 мес назад

Если есть какой-то более менее целый код решения, выложи сюда, может кому пригодится тоже.

avense 5 мес назад

Решение:

<?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();
}
?>
Kama 5 мес назад

Спасибо!

0
avense
5 месяцев назад 5

Нет ответов на этот вопрос.

    На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация