実現したいこと
Wordpressの検索結果ページのURLを変更したいです。
通常、例えば以下のようなHTMLからだと
HTML
1<form method="get" id="search" action="<?php echo home_url('/'); ?>"> 2<input type="text" name="s" id="search-input" value="<?php if( $keyword ) echo $keyword; ?>" placeholder="キーワードから探す" /> 3<input type="hidden" name="post_type" value="column"> 4<button type="submit" accesskey="f"></button> 5</form>
以下のURLに遷移します。
XXX.com/?s={検索クエリ}&post_type=column
さらに、ページネーション(the_posts_pagination()
)使用時は以下のようなURLになります。
XXX.com/page/2?s={検索クエリ}&post_type=column
これを以下のようなURLに変えたいです。
XXX.com/search?s={検索クエリ}&post_type=column
ページネーション使用時
XXX.com/search?s={検索クエリ}&post_type=column&page=2
試したこと
①以下サイトにあるようなURL変更
https://on-ze.com/archives/7719
function.phpに以下を追記したのですが、
php
1function my_custom_search_url() { 2 if ( is_search() && ! empty( $_GET['s'] ) ) { 3 wp_safe_redirect( home_url( '/search/' ) . urlencode( get_query_var( 's' ) ) ); 4 exit(); 5 } 6} 7add_action( 'template_redirect', 'my_custom_search_url' );
これだと&post_type=column
が消滅してしまいます。
②formタグ側の変更
formのactionの末尾にsearch/index.php
を追記
index.phpをつけることで動作はしたのですが、URLとしては以下の形式になりました
XXX.com/search/index.php?s={検索クエリ}&post_type=column
まぁこの形式でもいいかなーと思ったのですが、ここでさらにthe_posts_pagination()
を使ってページネーションを動作させた場合、
XXX.com/search/index.php/page/2?s={検索クエリ}&post_type=column
のように、結構カオスなURLになってしまいました。
何か良い方法をご存知の方がいらっしゃいましたら教えていただきたいです。
あなたの回答
tips
プレビュー