Получить номер текущей страницы
В ситуации, когда на странице 20 сообщений. Я хотел бы получить номер текущей страницы, чтобы сделать несколько хороших ссылок на страницы внизу. Как вы получаете текущую страницу. Я попробовал это
<?php echo '(Page '.$page.' of '.$numpages.')'; ?>
И на каждой странице просто написано страница 1 из 1.
Любые идеи,
Чудесный
4 answers
Когда WordPress использует такую разбивку на страницы, есть переменная запроса $paged
, которую он включает. Итак, страница 1 - это $paged=1
, а страница 15 - это $paged=15
.
Вы можете получить значение этой переменной с помощью следующего кода:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
Получить общее количество страниц немного сложнее. Сначала вы должны посчитать все записи в базе данных. Затем отфильтруйте, по каким публикуемым публикациям (по сравнению с черновиками, запланированными, мусорными и т. Д.). Затем вам нужно разделить это количество на количество сообщений, которые вы ожидаете увидеть на каждой странице:
$total_post_count = wp_count_posts();
$published_post_count = $total_post_count->publish;
$total_pages = ceil( $published_post_count / $posts_per_page );
Я еще не проверял это, но вам может потребоваться извлечь $posts_per_page
таким же образом, как вы извлекли $paged
(используя get_query_var()
).
Вы могли бы сделать это с помощью одной строки кода, но опять же, вы можете захотеть добавить код в других местах, поэтому функция обычно более полезна.
function current_paged( $var = '' ) {
if( empty( $var ) ) {
global $wp_query;
if( !isset( $wp_query->max_num_pages ) )
return;
$pages = $wp_query->max_num_pages;
}
else {
global $$var;
if( !is_a( $$var, 'WP_Query' ) )
return;
if( !isset( $$var->max_num_pages ) || !isset( $$var ) )
return;
$pages = absint( $$var->max_num_pages );
}
if( $pages < 1 )
return;
$page = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
echo 'Page ' . $page . ' of ' . $pages;
}
ПРИМЕЧАНИЕ: Код может быть помещен в ваш файл функций.
Просто вызовите функцию, в которой вы хотите отобразить сообщение "Страница x из y", например.
<?php current_paged(); ?>
Если вам нужен код для работы с пользовательским запросом, т.Е. тот, который вы создали с помощью WP_Query
, затем просто передайте имя переменной, в которой содержится запрос, в функция.
Пример несуществующего запроса:
$fred = new WP_Query;
$fred->query();
if( $fred->have_posts() )
... etc..
Получение текущей страницы для пользовательского запроса с помощью функции, опубликованной ранее..
<?php current_paged( 'fred' ); ?>
Если вы хотите просто полностью забыть о поддержке пользовательских запросов и ищете однострочный, то это должно сделать это..
<?php echo 'Page '. ( get_query_var('paged') ? get_query_var('paged') : 1 ) . ' of ' . $wp_query->max_num_pages; ?>
Надеюсь, это поможет..:)
Как упоминалось выше - более простой способ получить максимальное количество страниц с помощью:
global $wp_query
$wp_query->max_num_pages
Один из вариантов, который работает на всех страницах моего архива, таков:
$paged_maxnum = $GLOBALS['wp_query']->max_num_pages;
if ( $paged_maxnum > 1 ) {
$paged_current_page = get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1;
$title_page_nrs = 'page nr ' . $paged_current_page . ' of ' . $paged_maxnum;
echo '<title>' . get_the_archive_title( '', false ) . ' - ' . $title_page_nrs . ' | Your Website Name</title>';
} else {
echo '<title>' . get_the_archive_title( '', false ) . ' | Your Website Name</title>';
}
Первый запрос, если в этом wp_query
более одной страницы, затем объедините заголовок с текущей страницей через $paged_current_page
и общее количество страниц с $title_page_nrs
. Наконец echo
это. Если сначала выше 1 страницы, то else
если не выгружается. Это входит в мою archive.php или шаблоны для этого типа. Он производит:
<title>Taxonomy title - page nr 1 of 4 | Your Website Name</title>
Или
<title>Taxonomy title | Your Website Name</title>