Naoki-Joさん、こんにちは。
initフックあたりで、$_REQUEST[‘s’]があり、ダルブクォートで囲まれていなければ、付加するようにしてはいかがでしょう。
ありがとうございます。
フックについてよくわからないのですが、
init
のタイミングであるコードを実行したいという場合、
function double_q() {
ここにやりたい処理「YARITAIKOTO」を書く
}
add_action('init', 'double_q');
というコードを、functions.php に書くと、
init という処理が実行されるタイミングで、「YARITAIKOTO」
というプログラムが実行されるという理解でいいんでしょうか。
http://wpdocs.sourceforge.jp/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3_API/%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%95%E3%83%83%E3%82%AF%E4%B8%80%E8%A6%A7
に書かれている順番で処理されるので、好きなタイミングで処理したければ、
そのタイミングを
add_action(‘〇〇’, ‘double_q’);
の〇〇部分に記載するということなんでしょうか。
Naoki-Joさん、こんにちは。
御認識いただいているとおりです。
1点、先のレスで間違いがあって、対象とすべき変数は、$_REQUESTではなくて、$_GETでした。
function add_double_quote_search_query() {
$_GET['s'] = trim( $_GET['s'] );
if ( ! is_admin() && isset( $_GET['s'] ) ) {
if ( mb_substr( $_GET['s'], 0, 2 ) != '\"' || mb_substr( $_GET['s'], -2, 2 ) != '\"' ) {
$_GET['s'] = '\"' . $_GET['s'] . '\"';
}
}
}
add_action( 'init', 'add_double_quote_search_query' );
$_GET[‘s’]の両端が、\"
でなければ、追加するようになっています。バッククォートなのは、WordPressがデフォルトでバッククォートを追加する処理(addslashes)を行っているため、バッククォートがかけられた状態の文字列を追加するためです。
ありがとうございます。大変、勉強になります。
そのコードを書くことによって、強制的に「””」を付けての検索は実現できました。
ただ、ひとつ問題が起きているのですが、
ホームページ(一番ルートになっているページ http://〇〇○)を表示するときに、
強制的に、「””」の検索結果のページになってしまいます。
その他の、ページ(http://〇〇○/〇〇)
などでは大丈夫です。
いろいろと教えていただいたコードをもとに、試してみましたが、
原因がわかりません。
何か解決方法はあるでしょうか。
よろしくお願いします。
Naoki-Joさん、こんにちは。
すみません、コードの順序がただしくないため、常に$_GET[‘s’]が存在(検索されている状態)になっていました。下記が修正コードです。
function add_double_quote_search_query() {
if ( ! is_admin() && isset( $_GET['s'] ) ) {
$_GET['s'] = trim( $_GET['s'] );
if ( mb_substr( $_GET['s'], 0, 2 ) != '\"' || mb_substr( $_GET['s'], -2, 2 ) != '\"' ) {
$_GET['s'] = '\"' . $_GET['s'] . '\"';
}
}
var_dump( $_GET['s'] );
}
add_action( 'init', 'add_double_quote_search_query' );
jim912 さん
ありがとうございます。
早速、試してみたところ、
var_dump( $_GET['s'] );
の結果の値がホームページ上で表示されているようなので、
削って以下の通りにしてみたら、
思っていたような動きになりました。
function add_double_quote_search_query() {
if ( ! is_admin() && isset( $_GET['s'] ) ) {
$_GET['s'] = trim( $_GET['s'] );
if ( mb_substr( $_GET['s'], 0, 2 ) != '\"' || mb_substr( $_GET['s'], -2, 2 ) != '\"' ) {
$_GET['s'] = '\"' . $_GET['s'] . '\"';
}
}
}
add_action( 'init', 'add_double_quote_search_query' );
今のところ、問題なく動いているように見えますが、
var_dump( $_GET['s'] );
は抜いたらまずいようなものでしょうか。
Naoki-Joさん
たびたびすいません。コードの検証用のものなので、抜いてしまって問題ありません。