Описание
Выводит ссылки пагинации для стариц архивов. paginate_links может быть использована для создания пагинации для любых страниц.
Выводит подобную конструкцию: « предыдущая 1 … 3 4 5 6 7 … 9 следующая »
Функция возвращает html код.
Использование
<?php echo paginate_links( $args ) ?>
Шаблон использования
<?php
$args = array(
'base' => '%_%'
,'format' => '?page=%#%'
,'total' => 1
,'current' => 0
,'show_all' => False
,'end_size' => 1
,'mid_size' => 2
,'prev_next' => True
,'prev_text' => __('« Previous')
,'next_text' => __('Next »')
,'type' => 'plain'
,'add_args' => False
,'add_fragment' => ''
);
echo paginate_links( $args );
?>
Параметры
- $args (строка/массив)
- Аргументы для построения пагинации.
По умолчанию: предустановки
Аргументы параметра $args
- base (строка)
- База для замены по формату. В конструкции: http://example.com/all_posts.php%_% %_% будет заменено значением аргумента format (см. ниже).
По умолчанию: '%_%' - format (строка)
- Формат замены.
По умолчанию: '?page=%#%' - total (число)
- Общее количество страниц, которые участвуют в пагинации.
По умолчанию: 1 - current (число)
- Номер текущей страницы пагинации.
По умолчанию: 0 - show_all (логический)
- Если выставить в true, то в списке ссылок будут показаны все страницы учавствующие в пагинации. По умолчанию показывается только несколько ссылок спереди и сзади номера текущей страницы, количество ссылок регулируется аргументами: end_size и mid_size.
По умолчанию: false - end_size (число)
- Сколько номеров показывать сначала и конца ("предыдущая 12 ... 4 ... 89 следующая").
По умолчанию: 1 - mid_size (число)
- Сколько номеров показывать до и после текущего номера (... 123 5 678 ...).
По умолчанию: 2 - prev_next (логический)
- Выводить боковые ссылки "предыдущая/следующая страица". По умолчанию выводятся, если ненужно выводить эти ссылки пишем false.
По умолчанию: ture - prev_text (строка)
- Текст ссылки "предыдущая страница".
По умолчанию: __('« Previous') - next_text (строка)
- Текст ссылки "следующая страница".
По умолчанию: __('Next »') - type (строка)
- Формат возвращаемых данных.
- plain — строка ссылок разделенная пробелами. По умолчанию;
- array — массив данных (для дальнейшей обработки);
- list — html список <ul>.
По умолчанию: 'plain'
- add_args (логический)
- Массив аргументов которые нужно добавить.
По умолчанию: false - add_fragment (строка)
- Текст который добавиться ко всем ссылкам.
По умолчанию: ''
Примеры
1. Чтобы добавить пагинацию на страницу результатов поиска или страницу архивов, используйте такой код:
<?php
global $wp_query;
$big = 999999999; // уникальное число для замены
$args = array(
'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) )
,'format' => ''
,'current' => max( 1, get_query_var('paged') )
,'total' => $wp_query->max_num_pages
);
echo paginate_links( $args );
?>
paginate_links()
из файла: /wp-includes/general-template.php WP 3.3.2function paginate_links( $args = '' ) {
$defaults = array(
'base' => '%_%', // http://example.com/all_posts.php%_% : %_% is replaced by format (below)
'format' => '?page=%#%', // ?page=%#% : %#% is replaced by the page number
'total' => 1,
'current' => 0,
'show_all' => false,
'prev_next' => true,
'prev_text' => __('« Previous'),
'next_text' => __('Next »'),
'end_size' => 1,
'mid_size' => 2,
'type' => 'plain',
'add_args' => false, // array of query args to add
'add_fragment' => ''
);
$args = wp_parse_args( $args, $defaults );
extract($args, EXTR_SKIP);
// Who knows what else people pass in $args
$total = (int) $total;
if ( $total < 2 )
return;
$current = (int) $current;
$end_size = 0 < (int) $end_size ? (int) $end_size : 1; // Out of bounds? Make it the default.
$mid_size = 0 <= (int) $mid_size ? (int) $mid_size : 2;
$add_args = is_array($add_args) ? $add_args : false;
$r = '';
$page_links = array();
$n = 0;
$dots = false;
if ( $prev_next && $current && 1 < $current ) :
$link = str_replace('%_%', 2 == $current ? '' : $format, $base);
$link = str_replace('%#%', $current - 1, $link);
if ( $add_args )
$link = add_query_arg( $add_args, $link );
$link .= $add_fragment;
$page_links[] = '<a class="prev page-numbers" href="' . esc_url( apply_filters( 'paginate_links', $link ) ) . '">' . $prev_text . '</a>';
endif;
for ( $n = 1; $n <= $total; $n++ ) :
$n_display = number_format_i18n($n);
if ( $n == $current ) :
$page_links[] = "<span class='page-numbers current'>$n_display</span>";
$dots = true;
else :
if ( $show_all || ( $n <= $end_size || ( $current && $n >= $current - $mid_size && $n <= $current + $mid_size ) || $n > $total - $end_size ) ) :
$link = str_replace('%_%', 1 == $n ? '' : $format, $base);
$link = str_replace('%#%', $n, $link);
if ( $add_args )
$link = add_query_arg( $add_args, $link );
$link .= $add_fragment;
$page_links[] = "<a class='page-numbers' href='" . esc_url( apply_filters( 'paginate_links', $link ) ) . "'>$n_display</a>";
$dots = true;
elseif ( $dots && !$show_all ) :
$page_links[] = '<span class="page-numbers dots">' . __( '…' ) . '</span>';
$dots = false;
endif;
endif;
endfor;
if ( $prev_next && $current && ( $current < $total || -1 == $total ) ) :
$link = str_replace('%_%', $format, $base);
$link = str_replace('%#%', $current + 1, $link);
if ( $add_args )
$link = add_query_arg( $add_args, $link );
$link .= $add_fragment;
$page_links[] = '<a class="next page-numbers" href="' . esc_url( apply_filters( 'paginate_links', $link ) ) . '">' . $next_text . '</a>';
endif;
switch ( $type ) :
case 'array' :
return $page_links;
break;
case 'list' :
$r .= "<ul class='page-numbers'>\n\t<li>";
$r .= join("</li>\n\t<li>", $page_links);
$r .= "</li>\n</ul>\n";
break;
default :
$r = join("\n", $page_links);
break;
endswitch;
return $r;
}Ещё из раздела
- get_search_query() view
- selected() view
- remove_submenu_page() view
- has_action() view
- get_the_category_list() view
Смотрите также: Функции WordPress и Теги Шаблона.
Если друг вы забыли пароль к админ-панели joomla и не знаете как теперь быть, то вам поможет статья по востановлению пароля к админке джумлы (joomla). Кроме этой статьи на блоге tytto.ru, вы сможете найти рад других интересный и полезных статей по движку Джумла и WordPress.
куда вставлять то?
В то место шаблона, где нужна эта самая пагинация!
Очень интересно - будет ли меньше грузить хостинг подобный код, нежели общепринятый плагин PageNavi ?
Очень сомневаюсь!
Обнаружил одну проблему с навигацией по результатам поиска.
К примеру, сделан запрос "hello world", ссылка получается такой:
site.ru/?s=hello+world
Однако при переходе на вторую страницу, она выглядит уже неправильно:
site.ru/page/2/?s=helloworld
Т.е. плюс между словами пропадает.
Однако имеется еще и другая проблема. Навигация по результатам поиска не работает (начиная со 2-й страницы), если вводятся русские буквы
Тимур, не знаешь, как можно решить эту проблему?
Изменил код в статье под это дело - он и вправду был какой-то кривой, я его не проверял. Спс за коммент.
В общем, проверил, новый код вроде пашет как надо. Кстати, нашел его в кодексе. Очень изящное решение. Мне понравилось! Не то что было до этого
Спасибо большое! Проверил - действительно все работает
Ура, сам же и нашел решение. Вот тут описано - http://ayudawordpress.com/foro/topic/la-paginacion-no-funciona-en-los-resultados-de-busqueda