【WordPress】サイト内検索フォーム・検索結果ページの作成 | KoMariCote

【WordPress】サイト内検索フォーム・検索結果ページの作成

WordPressでキーワード検索をするための検索フォームと検索結果ページの作り方メモです。

  • 検索フォームは get_search_form() で表示。このテンプレートタグによってデフォルトでフォームが出力される。
  • デフォルトの検索フォームではなく、searchform.php ファイルを作成して独自に作成することもできる。
  • search.php ファイルを作成して検索結果一覧が表示されるようにする。

”get_search_form” で検索フォームを設置

WordPressでは、 get_search_form() というテンプレートタグによって簡単に検索フォームを設置することができます。

表示させたい場所にこのタグを追加すれば、WordPressが用意しているデフォルトの検索フォームが表示されます。

デフォルトのデザインでよければ、これで検索フォームの設置は完了。
スタイルを変更したい場合は出力されるHTMLを参照して、CSSを追加すればOK。

WordPressバージョン6.8.1にて確認したところ、以下のようなHTMLが表示されました。

HTML
<form role="search" method="get" class="search-form" action="https://example.local/">
  <label>
    <span class="screen-reader-text">検索:</span>
    <input type="search" class="search-field" placeholder="検索…" value="" name="s">
  </label>
  <input type="submit" class="search-submit" value="検索">
</form>

テーマ機能の設定で、html5とsearch-formを追加していない場合は以下のように出力されました。

HTML
<form role="search" method="get" id="searchform" class="searchform" action="https://example.local/">
  <div>
    <label class="screen-reader-text" for="s">検索:</label>
    <input type="text" value="" name="s" id="s">
    <input type="submit" id="searchsubmit" value="検索">
  </div>
</form>

WordPressのバージョンや使用テーマなどによって出力されるHTML構造が異なることがあるので、実際に get_search_form() を設置して確認してみてください。

テーマに searchform.php があれば、 get_search_form() はそのファイルを優先します。

検索フォームを新たに作成する

デフォルトの形ではなく、HTML構造や各所テキストなどを変更したい場合もあるかと思います。

その場合は、searchform.php ファイルをテーマフォルダの直下に作成し、独自の検索フォームを記述します。

【コード例】

searchform.php
<form role="search" method="get" class="search-form" action="<?php echo esc_url(home_url('/')); ?>">
  <label>
    <span class="screen-reader-text">検索:</span>
    <input type="search" class="search-field" placeholder="検索…" value="" name="s">
  </label>
  <button aria-label="検索" type="submit"></button>
</form>

検索フォームを自作する際の基本ルールは以下です。

  • formタグのaction属性はサイトのホームURLにします。
  • 入力するinputタグのname属性は "s" にします。

<span class="screen-reader-text">検索:</span> はスクリーンリーダー用のテキストです。screen-reader-text というクラスは、WordPressで非表示になるようCSSが当てられています。「検索」というテキストを視覚的に表示させたくない場合に、アクセシビリティに対応するための記述です。
screen-reader-text の部分を削除すれば「検索」テキストが表示されます。

inputタグのvalue属性に <?php the_search_query(); ?> を記述すると、検索結果を出した時に検索フォームに入力したテキストを表示させた状態にすることができます。

searchform.php
<form role="search" method="get" class="search-form" action="<?php echo esc_url(home_url('/')); ?>">
  <label>
    <span class="screen-reader-text">検索:</span>
    <input type="search" class="search-field" placeholder="検索…" value="<?php the_search_query(); ?>" name="s">
  </label>
  <button aria-label="検索" type="submit"></button>
</form>

検索結果ページを作成

検索結果ページでは、まず search.php が呼び出され、なければ index.php が呼び出されます

search.php は、archive.php など記事一覧ページと同じような構成でOK。

search.php
<?php get_header(); ?>

<h1><?php the_search_query(); ?>」の検索結果</h1>
<?php if (have_posts()): ?>
  <p><?php echo $wp_query->found_posts; ?>件の記事が見つかりました</p>

  <?php while ( have_posts() ) : the_post(); ?>
    <!-- 記事一覧のループ -->
  <?php endwhile; ?>

  <?php else: ?>
    <p>記事が見つかりません。</p>
<?php endif; ?>
<?php the_posts_pagination(); ?>

<?php get_footer(); ?>

search.php を作らず、index.php にif文で条件分岐をかける形でも表示されます。

index.php
<?php get_header(); ?>
<?php if(is_search()): ?>
  <!-- 検索結果ページの表示 -->
<?php else: ?>
  <!-- 検索結果ページ以外の表示 -->
<?php endif; ?>
<?php get_footer(); ?>

カテゴリー : WordPress