Intereting Posts
Неожиданные проблемы после импорта данных WP Multisite перенаправляет весь поддомен в основной домен Как узнать, загружены ли все зарегистрированные файлы? Отображение страницы автора, если у пользователя нет сообщений Как создать пользовательский шаблон для отображения категории с изображением и соответствующими сообщениями ниже? Пользовательская тема WordPress: опубликовать дату и дату показа для сообщений рядом друг с другом Сброс CSS для переднего конца плагина? Разрешить автору контента публиковать, а не редактировать или удалять Плагин для электронной коммерции Automattic существует ли конкретное место, где должен быть добавлен add_filter? Создайте пользовательскую роль (клиент), которая может создать другую пользовательскую роль (сотрудника) этого клиента Как отображать данные из пользовательской таблицы в базе данных WordPress? Настройка домашней страницы WordPress не работает при первой загрузке Эффективность wp_options по сравнению с новой таблицей Отключите панель администратора (панель инструментов) в бэкэнд – нет простого способа

URL-адреса перезаписи и разбивки на страницы

Я должен сказать, что я полный nooby в пользовательских URL-адресах WordPress переписывает. Я искал последние несколько дней, чтобы найти четкое объяснение того, как определить и написать правильный шаблон для перезаписи URL. У меня есть настраиваемый шаблон страницы, который использует запрос var, переданный ему, например http://example.com/pagename?user=username . В этом «pagename» относится к шаблону пользовательской страницы, а «пользователь» относится к произвольному запросу var. Мне нужно, чтобы это было представлено с помощью URL http://example.com/pagename/username .

Я также требую, чтобы вышеупомянутое работало с разбиением на страницы. Итак, http://example.com/pagename/username/page/2 должен быть способен представлять http://example.com/pagename/page/2?user=username

Было бы здорово, если бы кто-то мог предоставить мне рабочий пример и объяснение того, как я должен определить и написать правильный шаблон для перезаписи URL.

С уважением, Джон

Расширяя превосходный ответ @Stephen Harris, я бы выбрал;

 add_action( 'generate_rewrite_rules', 'my_rewrite_rules' ); function my_rewrite_rules( $wp_rewrite ) { $wp_rewrite->rules = array( 'mypageslug/([^/]+)/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?pagename=mypageslug&user=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 2 ), 'mypageslug/([^/]+)/?$' => $wp_rewrite->index . '?pagename=mypageslug&user=' . $wp_rewrite->preg_index( 1 ) ) + $wp_rewrite->rules; } 

Это следует стандарту регулярного выражения defacto, используемому в ядре WordPress. Основное изменение в примере кода Стивена – это использование $wp_rewrite->index чтобы обеспечить переписывание перезаписи в WordPress (в противном случае он может быть добавлен в список «external'rewrite»).

Во-вторых, и самое главное, передавая pagename var в строке запроса – это означает, что WordPress будет вести себя так, как если бы он обычно загружал страницу с помощью slug mypageslug .

UPDATE: я забыл добавить, убедитесь, что user является публичным запросом var, иначе WordPress не будет отображать его из URL-адреса. Либо отфильтруйте его с помощью query_vars либо добавьте его с помощью глобального $wp ;

 add_filter( 'query_vars', 'my_query_vars' ); function my_query_vars( $vars ) { $vars[] = 'user'; } // my preferred method - make sure you run this only after 'init' has fired! $GLOBALS['wp']->add_query_var( 'user' ); // then once the request has been parsed (anything after the action 'parse_request') $user = get_query_var( 'user' ); 

У меня была аналогичная проблема и она была успешно решена. На самом деле я недавно написал это сообщение в блоге, которое использовало это решение.

WordPress использует правила, чтобы сделать URls довольно, идея состоит в том, чтобы использовать фильтр для вызова функции, добавляющей правила (затем после перехода к настройкам> Permalinks и нажатия сохранения правил следует добавить). Это код:

 add_action('generate_rewrite_rules', 'my_rewrite_rules'); function my_rewrite_rules( $wp_rewrite ) { $new_rules = array( 'pagename/(.+)' => 'pagename?user='.$wp_rewrite->preg_index(1), ); // Add the new rewrite rule into the top of the global rules array $wp_rewrite->rules = $new_rules + $wp_rewrite->rules; } 

Идея заключается в том, что WordPress проверяет, является ли URL-адрес формы http://www.example.com/pagename/something и использует это, чтобы установить пользовательскую переменную.

Чтобы получить разбиение на страницы, вам нужно добавить следующее правило в массив $ new_rules – выше правила уже там (это потому, что WordPress проверяет правила в порядке).

  'pagename/(.+)/page/?([0-9]{1,})' => 'pagename?user='.$wp_rewrite->preg_index(1).'&paged='.$wp_rewrite->preg_index(2), 

Точно так же это проверяет на http://www.example.com/pagename/something/page/2 и говорит и интерпретирует это как example.com/pagename?user=username&paged=2. (Paged – это переменная запроса, распознаваемая WordPress для определения страницы в разбивке на страницы).

Надеюсь это поможет!