検索結果に投稿内のhtml属性値を検索対象から除く

WordPressの検索では、検索結果にhtmlの属性値等でも、キーワードに含まれると検索結果に表示されます。

デフォルトの状態であれば、特に大きな不具合にはなりませんが 

最悪、例えば 投稿本文内でPHPが記述できるようなプラグインを使用したりしていれば、

$_GET 等をキーワードにすると、そこにPHPスクリプトが含まれている投稿であるという事が簡単に推測できてしまいます。

Insert PHP — WordPress Plugins を使って投稿本文にPHPを書いてみましょう

表示は以下のようになります。

htmlソースは、以下のようになります。

PHPコードを直書きした部分は、WordPressがhtmlコメントを追加して、表示しないようになり、PHPの実行結果のhello wordが表示されます。

しかし、検索する場合はこれとは全く異なります。

検索すれば、[insert_php]でも echo でも検索結果のページにこの投稿は、表示されます。

検索の場合は、実際に本文に記述された文字列を調べるので、検索にヒットするのです。

このページのコードは、このようなショートコードを検索でヒットさせないといったコードを目指しているわけではありませんが、検索機能が何を行っているかを解かりやすくするために、このような実験をしています。

WordPressの検索機能がそのようなものだと知っている人は、プラグインの使用を思いとどまる事もできるわけですが、そのような事に気づかないままに利用している人も少なくないだろうと思います。

Raindropsテーマでも、これまで検索フォームではhtmlタグを使えないといった処理を行ってきたわけですが、直接 urlに検索キーワードを打ち込むと検索できる状況にあり、

いつかは取り組んでおくべきだろうと考えていました。

以前にも、検索結果を表示する仕組み – WordPress Snippetという記事の中で触れていましたが

日本語フォーラムでも トピック: ウィジェットの検索で画像ファイル名を対象外にしたい « サポートフォーラム — WordPress 等 似通った質問が時々見られます。

改めて、方法を模索してみようと思いました。

functions.php

searchform.php

Memo

wp-includes/class-wp-query.php

AMPプラグイン関連

AMPプラグインでは、PHPコード部分は、以下のように変換されていました。
致命的エラーが発生していました。


コメントは受け付けていません