Передача пользовательских аргументов в paginate_links

2 июл. 2011 г., 20:46:45
Просмотры: 16.7K
Голосов: 3

Например, у меня есть URL domain.com/about?project=1, но у меня включены ЧПУ и я использую paginate_links для генерации пагинации. Проблема в том, что генерируются ссылки вида domain.com/about?project=1/page/1, что ломает функционал, так как project воспринимается как 1/page/1.

Есть ли способ получить domain.com/about/project/1/page/1 в ссылках пагинации? Я передаю этот параметр через форму методом GET для отображения проекта.

0
Все ответы на вопрос 1
5

Чтобы добавить аргументы к ссылкам в пагинации записей, используйте аргумент 'add_args' в функции. Вам нужно передать аргументы в виде ассоциативного массива. Например, чтобы добавить project=1 в конец всех ссылок, сделайте следующее:

global $wp_query;
paginate_links(array(
  'total' => $wp_query->max_num_pages,
  'current' => (get_query_var('paged') ? get_query_var('paged') : 1),
  'base' => 'http://domain.com/about/%_%',
  'format' => 'page/%#%',
  'add_args' => array( 'project' => 1 /* или любой другой номер проекта */ ),
));

Надеюсь, это помогло!

РЕДАКТИРОВАНИЕ

Чтобы получить URL вида domain.com/about/projects/1/page/1, вы можете добавить пользовательскую структуру постоянных ссылок. Предположим, что about — это страница.

function wpse21802_init(){
  add_rewrite_rule( '([^/]+)/projects/([^/])/?$', 'index.php?pagename=$matches[1]&project=$matches[2]', 'top' );
  add_rewrite_rule( '([^/]+)/projects/([^/])/page/(/d+)/?$', 'index.php?pagename=$matches[1]&project=$matches[2]&paged=$matches[3]', 'top' );
}
add_action( 'init', 'wpse21802_init' );

После добавления этого кода сбросьте правила перезаписи, перейдя в Настройки → Постоянные ссылки.

2 июл. 2011 г. 22:05:24
Комментарии

Но это генерирует http://domain.com/about/page/1?project=1

Sein Oxygen Sein Oxygen
2 июл. 2011 г. 23:38:50

"Я отправляю это из формы, используя get для отображения проекта." Project - это $_GET переменная в этой ссылке, верно? 'add_args' => array( 'project' => absint($_GET['project'])

John P Bloch John P Bloch
3 июл. 2011 г. 00:18:04

Да, но снова прочитайте основной вопрос: Есть ли способ получить domain.com/about/project/1/page/1 в ссылках пагинации? Я отправляю это из формы, используя get для отображения проекта.

Sein Oxygen Sein Oxygen
3 июл. 2011 г. 05:29:52

Я обновил свой ответ, но также хочу отметить, что WordPress уже поддерживает такую структуру URL просто за счёт использования иерархии страниц.

John P Bloch John P Bloch
3 июл. 2011 г. 15:43:57

Или 'add_args' => array( '#mydiv'), если вы хотите, чтобы при клике по ссылке происходила прокрутка к определённому div.

Tim Hallman Tim Hallman
6 февр. 2020 г. 23:28:13