何週間も試してみた結果、実用的な解決策を見つけることができたので、私はほとんどの関数と試行を取り除き、ちょうど私のfunctions.phhファイルでページネーション関数を残しました:
/**
* Pagination links for search and archives
*/
function get_pagination_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','%#%'),
'total' => $wp_query->max_num_pages,
'current' => $current,
'show_all' => false,
'end_size' => $endsize,
'mid_size' => $midsize,
'type' => $type,
'prev_next' => false,
'paged' => get_query_var( 'paged' )
);
return paginate_links( $pagination );
}
私の検索フォームは以下のようになります。
<form class="search-form" action="<?php echo home_url( '/' ); ?>" method="get">
<fieldset>
<div class="input-inside-label">
<label for="s">Suchen …</label>
<input type="text" name="s" class="s" value="<?php the_search_query(); ?>" />
</div>
<button type="submit" class="search-button">Suchen</button>
</fieldset>
</form>
やりたいこと:標準の/?s=
をドイツ語の/suche
に書き換えたいのですが
それで、 "test"を検索するとき、私のURLを(www.mydomain.com/suche/test
の代わりに)/?s=test
のように見せたいです。
さらに、ページネーションも書き換えたいのですが… "test"を検索してpage 2
をクリックするときは、アドレスをこのようにします。
www.mydomain.com/suche/test/seite/2
だから本質的に私は/?s=
をドイツ語のsuche
(検索用)に書き換えそして&paged=2
をドイツ語のseite
(ページ用)に書き換えたい
お分かりのように、私が今自分のコードに持っているのは、他のすべての試行を削除したため、上記のページ付け関数だけです。それをうまく機能させることはできませんでした。
それについて巧妙なアイデアはありますか?私は最新のワードプレスバージョンを使用していて、フィルタベースの解決策を見つけたいと思います。私はどのJSも検索フォームと対話したくありません。
前もって感謝します
目標を達成するための3つのステップがあります。
add_rewrite_rule( 'suche/([^/]+)/?$', 'index.php?s=$matches[1]', 'top' );
add_rewrite_rule( 'suche/([^/]+)(/seite/(\d+))/?$', 'index.php?s=$matches[1]&paged=$matches[3]', 'top' );
上記は、書き換え規則の配列に直接書き換え規則を追加しているので、誰かが/suche/apfel/
のようなURLにアクセスしたときはいつでも、それは内部的にindex.php?s=apfel
として翻訳されます。
// redirect immediately
if ( isset( $_GET[ 's' ] ) ) {
$location = '/suche/' . $_GET[ 's' ];
if ( isset( $_GET[ 'paged' ] ) && $_GET[ 'paged' ] )
$location .= '/seite/' . $_GET[ 'paged' ];
wp_redirect( trailingslashit( home_url( $location ) ), 301 );
exit;
}
これをあなたのfunctions.php
に入れてください。検索要求が検出されるとすぐにwordpressはNice検索URLにリダイレクトし、ブラウザは301
ステータスがwp_redirect()
に渡されるためリダイレクトを記憶します。
ここで検索用の代替URLを作成しています。$paged
パラメータが存在する場合は、それも追加します。
function pagination_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' => home_url( '/suche/' . get_search_query() . '%_%' ),
'format' => '/seite/%#%/', // ?page=%#% : %#% is replaced by the page number
'total' => $wp_query->max_num_pages,
'current' => $current,
'show_all' => false,
'end_size' => $endsize,
'mid_size' => $midsize,
'type' => $type,
'prev_next' => false
);
return paginate_links( $pagination );
}
この関数に欠けていた唯一のことは、現在の検索のNice URLベースとNice URL page引数を作成するために変更されたformat
とbase
引数を使用することでした。
それはあなたが必要とすることをするべきです。他のフィルタを使ってもっと多くのURLを掘り下げて翻訳を使うことができますが、かなりの数があるので、これは良い出発点です!