WordPress の検索フォームを使った場合は、the_search_query()
で検索文字列を表示できるんですが、各検索エンジンの文字列は、それぞれ仕様が違うために、そのままでは取得できません。Search Word Highlight とかのプラグインは、検索エンジンごとに検索語を検出しています。
ということで、当該プラグインのソースを見て、抽出された検索語をどうにか取得して、検索フォームに入れればいいでしょうか。
Default テーマの場合、searchform.php で検索フォームを出力しているんので、$searchword
に検索エンジンでの検索ワードが入っているとすると、3行目を下のようなコードに変えればいいでしょうか ($searchword
に中身を入れる処理は別途必要です)。
<div><input type="text" value="<?php
if (isset($searchword)) {
echo attribute_escape($searchword);
} else {
the_search_query();
} ?>" name="s" id="s" />
lilyfan 様 ありがとうございました。
お返事が送れて申し訳ありません。
やはり、Search Word Highlight からキーワードを取得しないといけないのですね。
プログラムを見ても理解できません。(^^;)
phpをもう少し勉強して地道にプログラム解析します。
有難うございました。
しかし、ソースプログラムがあるに理解できないって最悪です・・・
supermarkn さん、こんにちは。 🙂
Search Word Highlight 作者です。
このプラグインには検索語を取得する隠し API が実はひっそりとありまして、lilyfan さんのコードと併せて以下の感じで実現できるかと思います。
<?php
if(isset($swh)) {
$searchword = htmlspecialchars($swh->getHighlighString());
if($searchword == null) unset($searchword);
}
?>
<div><input type="text" value="<?php
if (isset($searchword)) {
echo attribute_escape($searchword);
} else {
the_search_query();
} ?>" name="s" id="s" />
よければお試しください。 😀
<?php
if(isset($swh)) {
$searchword = htmlspecialchars($swh->getHighlighString());
if($searchword == null) unset($searchword);
}
?>
<div><input type="text" value="<?php
if (isset($searchword)) {
echo attribute_escape($searchword);
} else {
the_search_query();
} ?>" name="s" id="s" />
これだと、$searchword
が2重にエスケープされてしまうのでダメですね。HTML エスケープは出力直前で行うという基本に従えばよく、前半の抽出部分でエスケープするのは余計になっています。
冗長な処理をまとめてしまって、以下のように単純にすればよさそうです。
<div><input type="text" value="<?php
if (isset($swh)) {
echo attribute_escape($swh->getHighlighString());
} else {
the_search_query();
} ?>" name="s" id="s" />
すいません、すいません。 フォローありがとうございます。
if (isset($swh)) {
$swh はプラグインが有効化されていると isset になってしまうので、意味合い的には
<div><input type="text" value="<?php
if (isset($swh) && $swh->getHighlighString() != null) {
echo attribute_escape($swh->getHighlighString());
} else {
the_search_query();
} ?>" name="s" id="s" />
くらいでよいですかね。 😀
$swh はプラグインが有効化されていると isset になってしまうので、意味合い的には
ああ、そうだったんですか。それだと、元のコード ($searchword
に検索語を入れる) 方がいいですね。null との比較を演算子でやるのはいまいちなので、以下のようになるでしょうか。
<?php
if (isset($swh)) {
$searchword =$swh->getHighlighString();
}
?>
<div><input type="text" value="<?php
if (isset($searchword) && $searchword) {
echo attribute_escape($searchword);
} else {
the_search_query();
} ?>" name="s" id="s" />
hiromasaさん、lilyfanさん 本当にありがとうございます。
まさか、Search Word Highlightの作者の方が出でこられるとはびっくりしております。
Search Word Highlight for Mutibyteのプラグインを利用されてもらってます。(^^)
まずは、取り急ぎ、ご挨拶とお礼まで。 記載していただいた内容を読ませていただきたいと思います。 これからちょっと楽しい時間をすごせそうです。また、後ほど・・・
この機能は他の方達も絶対利用したいのではないかなと思います。
申し訳ありません。 詳しく書いていただいているのに変な質問させてもらいます。
現在のコーディングが
<form method=”get” action=”<?php bloginfo(‘url’); ?>/”>
***旧変更箇所 ここから***
<input type=”text” value=”” name=”s” class=”text” />
***旧変更箇所 ここまで***
<input type=”submit” id=”search-submit” class=”button” value=”検索” />
</form>
なんですが、このコーディングを
<form method=”get” action=”<?php bloginfo(‘url’); ?>/”>
***新変更箇所 ここから***
<?php if (isset($swh)) {
$searchword =$swh->getHighlighString();
}
?>
<input type=”text” value=”<?php
if (isset($searchword) && $searchword) {
echo attribute_escape($searchword);
} else {
the_search_query();
} ?>” name=”s” id=”s” />
***新変更箇所 ここまで***
<input type=”submit” id=”search-submit” class=”button” value=”検索” />
</form>
上記だけの修正で良いのでしょうか。 すいません、勉強不足で。
ちょっと追加。
上記だけの修正で良いのでしょうか。 すいません、勉強不足で。
いえいえ、きちんと確認を取ることはいいことですよ。「分からないことをあやふやにしない」のは勉強として正しい方法ですから。
まあ、プログラミングの場合は「たぶんこうだろう」と考えて、トライ & エラーで進めるのもよい方法なので、どちらがよいとも言えなかったりしますが。
時間がかかりましたが、ようやく理解ができました。
hiromasaさん、lilyfanさん 丁寧なご指導ありがとうございました。