WordPressでトップページに静的HTMLを設定ときに生じやすい問題の一つにサイト内検索が正しく機能しない(検索結果の代わりにトップページが表示される)不具合があります。
ここでは、サイト内検索を正しく機能させるために実際に行った対策と、修正できない場合にチェックしたいポイントについて解説いたします。
解決策はテーマにある検索用設定ファイルの一部を編集
サイト内検索を行った結果、検索結果ではなく代わりにHTMLコンテンツを適用したトップページが表示されてしまうことについての解決策はthemeでディレクトリにあるsearchform.php
の記述の一部を修正するだけです。
ここでは、Cocoonテーマを例にしてsearchform.phpを編集してみます。他のテーマでも修正箇所はほぼ同じですがWPのデフォルトテーマなどもともとthemeディレクトリにsearchform.phpがないテーマもあるので、その場合はsearchform.phpを独自に作成する必要があるので多少作業の難易度が上がります。
子テーマ内にsearchform.phpをコピー
themeディレクトリのファイルを直接編集するとテーマがアップデートされたときに上書きされてしまう可能性があるので、子テーマにコピーしてから編集をします。
searchform.phpの場所はthemeディレクトリの直下にあります。
検索結果の表示をindex.phpに変更
子テーマにコピーしたsearchform.phpをエディタで開くとファイルの中ほどに次の記述があります。
<form class="search-box input-box" method="get" action="<?php echo home_url('/'); ?>">
この行の後半action="<?php echo home_url('/'); ?>
にあるシングルクォーテーションで囲まれた/の後に「index.php」を追加記述します。
<form class="search-box input-box" method="get" action="<?php echo home_url('/index.php'); ?>">
編集が終わったらファイルを上書きして子テーマへアップロード。
これで、サイト内検索の結果が表示されるようになります。
WordPressのサイト内検索の機能は、もともと検索結果をトップページのindex.phpを使って表示しています。
トップページにindex.htmlなどの静的ページを適用させてしまうと、そのままではWordPressがトップページにはindex.phpがあるものと想定した動作をしてしまいこれが検索結果にトップページがそのまま表示されてしまう原因に繋がっています。
この動作を回避するためsearchform.phpでサイト内検索の表示に直接index.phpを指定したのが今回の解決策です。
検索結果の表示にindex.phpを指定する際の注意点
トップページに静的ページを適用したことにより、サイト内検索が正常に機能しなくなる問題については上に書いた方法で解決が可能かと思われます。
しかし、このindex.phpを直接使う方法には一つ盲点があります。
トップページに静的ページを指定したい方というのは、ある程度サーバー知識のある中級以上の知識を持ってらっしゃる方と思われますが、サーバー知識があってHTMLが使える方だとindex.htmlをはじめindex.phpも併せて.htaccessで正規化させているはずです。
WordPressを使う上ではindex.phpを.htaccessで正規化させたままでも問題はありませんが、このページで対策をしたサイト内検索を有効に使うためには、.htaccessに記述したindex.phpの正規化解除しておく必要があります。
また、.htaccessによる正規化はブラウザによって強力にキャッシュされることがあるので、キャッシュをクリアするなどしないと修正の検証もできないことになります。
searchform.phpの編集は済ませたけど、変わらずトップページが表示されてしまう場合はこの辺も疑ってみる必要があります。
また、今回の不具合に限りませんがWordPressでは使っているthemeやプラグインなどにより動作が制限されることもあるので、一般に有効とされる対策が効かないケースも珍しくありません。
特に静的ページをトップページに適用させるに当たっては一筋縄ではいかず解決しなければならない問題は他にもあると考えてよいでしょう。
おすすめ記事
WordPressでトップページに静的htmlを使う方法とそれに伴う課題 デフォルトから現行のパーマリンクへリダイレクトできないWordPressの静的トップページ問題