Пользовательская постоянная ссылка для поиска и разбивки на страницы

@Chip Bennet помог мне в предыдущем вопросе и разместил всю свою функцию разбивки на страницы. Эта функция работает отлично для меня, но я хотел бы иметь пользовательские постоянные ссылки на немецком языке.

/** * Paginate Archive Index Page Links */ function oenology_get_paginate_archive_page_links( $type = 'plain', $endsize = 1, $midsize = 1 ) { global $wp_query, $wp_rewrite; $wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] : $current = 1; // Sanitize input argument values if ( ! in_array( $type, array( 'plain', 'list', 'array' ) ) ) $type = 'plain'; $endsize = (int) $endsize; $midsize = (int) $midsize; // Setup argument array for paginate_links() $pagination = array( 'base' => @add_query_arg('paged','%#%'), 'format' => '', 'total' => $wp_query->max_num_pages, 'current' => $current, 'show_all' => false, 'end_size' => $endsize, 'mid_size' => $midsize, 'type' => $type, 'prev_text' => '<<', 'next_text' => '>>' ); if( $wp_rewrite->using_permalinks() ) $pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg( 's', get_pagenum_link( 1 ) ) ) . 'page/%#%/', 'paged' ); if( !empty($wp_query->query_vars['s']) ) $pagination['add_args'] = array( 's' => get_query_var( 's' ) ); return paginate_links( $pagination ); } 

Я использую эту функцию в моем шаблоне search.php как это.

 <div class="pagination"> <?php echo oenology_get_paginate_archive_page_links(); ?> </div> 

Если я ищу в своей строке поиска, URL-адрес для результирующей страницы выглядит так:

mysite.com/?s=term

Я бы хотел, чтобы немецкий suche (значит «поиск») …

mysite.com/suche/term

А второй бит … при нажатии на страницу 2 страницы разбиение URL выглядит в настоящее время вот так …

mysite.com/page/2/?s=term

Я хотел бы, чтобы seite слово было немецким словом seite (для «страницы»). Может быть, даже так …

mysite.com/suche/term/seite/2

Возможно ли это с помощью этой функции, предоставляемой @Chip? Кажется, я не могу найти для этого рабочего решения.

Заранее спасибо. Я бы очень признателен за помощь.


ОБНОВИТЬ

 function oenology_get_paginate_archive_page_links( $type = 'plain', $endsize = 1, $midsize = 1 ) { global $wp_query, $wp_rewrite; $wp_query->query_vars['paged'] > 1 ? $current = $wp_query->query_vars['paged'] : $current = 1; // Sanitize input argument values if ( ! in_array( $type, array( 'plain', 'list', 'array' ) ) ) $type = 'plain'; $endsize = (int) $endsize; $midsize = (int) $midsize; // Setup argument array for paginate_links() $pagination = array( 'base' => @add_query_arg('paged','%#%'), 'format' => '?paged=%#%', 'total' => $wp_query->max_num_pages, 'current' => $current, 'show_all' => false, 'end_size' => $endsize, 'mid_size' => $midsize, 'type' => $type, 'prev_next' => false ); if ( $wp_rewrite->using_permalinks() ) $pagination['base'] = user_trailingslashit( trailingslashit( remove_query_arg( 's', get_pagenum_link( 1 ) ) ) . 'seite/%#%/', 'paged' ); /*if ( !empty($wp_query->query_vars['s']) ) $pagination['add_args'] = array( 's' => get_query_var( 's' ) );*/ return paginate_links( $pagination ); } /** * Change search- & paginationbase */ add_action( 'generate_rewrite_rules', 'wr_generate_rewrite_rules' ); function wr_generate_rewrite_rules( $rewrite ) { $rewrite->rules = array_merge( array( 'suche/([^/]+)(?:/seite/(\d+))?/?' => 'index.php?s='.$rewrite->preg_index(1).'&paged='.$rewrite->preg_index(2) ), $rewrite->rules ); } add_filter( 'get_pagenum_link', 'wr_search_pagenum_link' ); function wr_search_pagenum_link( $link ) { if ( !is_search() ) return $link; // Attempt to parse the page number from the provided URL if ( !preg_match( '#/page/(\d+)#', $link, $matches ) ) return $link; // Return a re-formed URL return home_url( '/suche/' . urlencode( get_query_var( 's' ) ) . '/seite/' . $matches[0] ); } 

Solutions Collecting From Web of "Пользовательская постоянная ссылка для поиска и разбивки на страницы"

Я считаю, что основной причиной того, что формат параметров GET по-прежнему используется для поиска, является то, что формы поиска являются регулярными формами GET, которые при отправке URL-адресов форм с добавленными параметрами GET.

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

Предположим, мы использовали желаемый формат URL-адреса поиска:

mysite.com/suche/term

И я искал термин "belegte brot" с котировками. Мы получим URL:

mysite.com/suche/%22belegte+brot%22

Что не очень красиво, и подобное ускорение должно быть сделано для любых других специальных символов.

Тем не менее, по-прежнему можно получить структуру постоянной ссылки, которую вы ищете.

Шаг 1 : зарегистрируйте структуру постоянной ссылки

Захватите действие generate_rewrite_rules , чтобы добавить новые шаблоны:

 function my_generate_rewrite_rules( $rewrite ) { $rewrite->rules = array_merge( array( 'suche/([^/]+)(?:/seite/(\d+))?/?' => 'index.php?s='.$rewrite->preg_index(1).'&paged='.$rewrite->preg_index(2) ), $rewrite->rules ); } add_action( 'generate_rewrite_rules', 'my_generate_rewrite_rules' ); 

Это регистрирует правило в самом верху стека правил перезаписи, которое будет захватывать URL-адреса форм suche/<term> , suche/<term>/ , seite/<term>/seite/<page> и seite/<term>/seite/<page>/ и преобразовать их в переменные запроса s=<term> и paged=<page>

Шаг 1a : Восстановите постоянные ссылки, посетив страницу « Settings > Permalinks в области администрирования WP.

Шаг 2. Вставьте JavaScript в форму поиска, которая вместо отправки формы с использованием параметров GET вместо этого перенаправит URL-адрес вышеуказанной формы:

 <form id="search" action="<?php echo home_url( '/suche/' ); ?>"> <input name="s" /> </form> <script> jQuery('#search').submit(function(ev) { ev.preventDefault(); location.href = jQuery(this).attr('action') + escape( jQuery('#search').find('[name="s"]').val() ); }); </script> 

В этом примере показана форма, чье событие передачи захватывается и отменяется, вместо этого обновляется URL-адрес. NB: Это не проверено.

Шаг 3. Добавьте крючок в фильтр get_pagenum_link для формирования ожидаемых URL-адресов:

 function my_search_pagenum_link( $link ) { if( !is_search() ) return $link; // Do nothing unless on a search // Attempt to parse the page number from the provided URL if( !preg_match( '#/page/(\d+)#', $link, $matches ) ) return $link; // Return a re-formed URL return home_url( '/suche/' . urlencode( get_query_var( 's' ) ) . '/seite/' . $matches[0] ); } add_filter( 'get_pagenum_link', 'my_search_pagenum_link' ); 

Этого должно быть достаточно для достижения желаемого поведения.