@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番目のビット…ページネーションの2ページ目をクリックすると、URLは現在このように見えます…
mysite.com/page/2/?s=term
代わりに、ドイツ語の単語をドイツ語のseite
( "page"の場合)にします。たぶんこんな感じでも…
mysite.com/suche/term/seite/2
@Chipが提供していたこの関数で、どういうわけか可能ですか?これに対する有効な解決策が見つからないようです。
前もって感謝します。私は本当に助けてくれてありがとう。
UPDATE
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] );
}
GETパラメータフォーマットが依然として検索に使用されている主な理由は、検索フォームが通常のGETフォームであり、送信時にGETパラメータが追加されたフォームURLであることです。
しかし、カスタムURLを使用して検索をキャプチャする場合のもう1つの問題は、検索語がスラッシュなどの任意のテキストになる可能性があることです。
ご希望の検索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' );
これは書き換えルールスタックの一番上にルールを登録します。これはフォームsuche/<term>
、suche/<term>/
、seite/<term>/seite/<page>
およびseite/<term>/seite/<page>/
のURLを取得し、それらをクエリ変数s=<term>
およびpaged=<page>
に変換します。
ステップ1a:WP管理領域のSettings > Permalinks
ページにアクセスして、パーマリンクを再生成します。
ステップ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>
この例では、submit
イベントがキャプチャされてキャンセルされ、代わりにURLが更新されるフォームが示されています。 注意:これはテストされていません。
ステップ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' );
これはあなたの望む振る舞いを達成するのに十分なはずです。