【ブログデザイン改善】検索フォーム設置

作業内容
完成した状態の共有から
ヘッターの右上エリアに検索アイコンとして虫眼鏡を設置しました。

虫眼鏡を押すと、検索欄が表示されます。

では、作業手順をお伝えします。
検索フォーム設置
PHP と HTML で「虫眼鏡アイコン」と「検索欄」「検索ボタン」を設置
CSS で「虫眼鏡アイコン」と「検索欄」「検索ボタン」の装飾を設定
検索欄を表示/非表示にするアニメーション作成
「js」フォルダと「search-toggle.js」ファイルの作成
JavaScriptで「虫眼鏡アイコン」を押せば「検索欄」「検索ボタン」が表示されるアニメーション機能を設定
トップ画面へ「重要なページ」や「SNSアカウント」へのリンクをバナーとして設置したい方は、こちらの記事もご一読ください。
検索フォーム設置
PHP と HTML で「虫眼鏡アイコン」と「検索欄」「検索ボタン」を設置
「虫眼鏡アイコン」と「検索欄」「検索ボタン」を設置していきます。

/独自ドメイン/public_html/wp-content/themes/子テーマ/functions.php
functions.php へ追加する形で記述します。
/* 検索フォーム */
add_action( 'lightning_site_header_logo_after', 'my_header_search' );
function my_header_search() {
?>
<div class="header-search">
<button class="search-toggle" aria-label="検索">
<i class="fas fa-search"></i>
</button>
<div class="search-form-wrap">
<?php get_search_form(); ?>
</div>
</div>
<?php
}
add_action( 'lightning_site_header_logo_after', 'my_header_search' );
Lightning テーマの 'lightning_site_header_logo_after' アクションフックに my_header_search() を登録する。
つまり、
テーマ(lightning_site)がヘッダーロゴ(header_logo)を出力した直後(after)のタイミングで
my_header_search() が実行され、
検索フォームなどの任意のHTMLを追加表示する。
<div class="header-search">・・・</div>
検索フォームのHTMLを囲むコンテナにクラス名「header-search」を名付ける。
<button class="search-toggle" aria-label="検索">
<i class="fas fa-search"></i>
</button>
検索フォームの表示/非表示を切り替えるための「虫眼鏡ボタン」
ボタンに、クラス名「search-toggle」と名付ける。
ボタンに、アクセシビリティ属性 [Webページやアプリを「目が見えない人・キーボード操作の人・音声読み上げを使う人」でも使いやすくするための補助情報] 「検索」と名付ける。
アイコンにクラス名「fas fa-search」と名付ける。
「fas fa-search」は、Font Awesome の 検索アイコン(虫眼鏡)を表示する。 fas = Font Awesome Solid スタイル
Font Awesome(フォントオーサム)は、虫眼鏡・ゴミ箱・SNSロゴなどのアイコンを、画像ではなく「フォント(文字)」のように扱える仕組み。アイコン用ライブラリ。
<div class="search-form-wrap">
<?php get_search_form(); ?>
</div>
「検索欄」「検索ボタン」を囲むコンテナにクラス名「search-form-wrap」を名付ける。
get_search_form() により、WordPress標準の検索フォームテンプレートを読み込んで表示する。
CSSで「虫眼鏡アイコン」と「検索欄」「検索ボタン」の装飾を設定
WordPress管理画面 → 外観 → カスタマイズ → 追加CSS
追加CSS へ追加する形で記述します。
/* =========================================
ヘッダー検索まわりのスタイル
========================================= */
/* 全体(検索エリアの位置調整) */
.header-search {
position: relative; /* 自分の元の位置を基準に移動可能にする */
top: -15px; /* 上方向に15px移動して微調整 */
}
/* =========================================
虫眼鏡ボタン(検索トグル)
========================================= */
.search-toggle {
background: transparent; /* 背景なし */
border: none; /* 枠線なし */
font-size: 24px; /* アイコンサイズ */
cursor: pointer; /* マウスを乗せた時にポインター表示 */
padding: 0; /* 余白なし */
color: var(--main-color); /* メインカラー(CSS変数) */
transition: all 0.3s ease; /* 色や動きの変化を滑らかにする */
}
/* ホバー時(マウスを乗せた時) */
.search-toggle:hover {
color: var(--accent-color); /* アクセントカラーに変更 */
transform: translateY(-1px); /* 少し上に動かす */
}
/* =========================================
ヘッダー全体レイアウト
========================================= */
.site-header-container {
align-items: flex-end; /* 子要素(ロゴ・検索など)を下揃えにする */
}
/* =========================================
検索フォーム(テキスト入力)
========================================= */
.header-search input[type="text"] {
width: 240px; /* 横幅 */
height: 40px; /* 高さ */
padding: 0 15px; /* 左右の内側余白 */
border: 2px solid var(--main-color); /* 枠線 */
border-radius: 999px; /* 丸い(ピル型)デザイン */
background: #fff; /* 背景色 */
color: var(--text-color); /* 文字色 */
transition: border-color 0.3s ease,
box-shadow 0.3s ease; /* フォーカス時の変化を滑らかに */
}
/* フォーカス時(入力欄をクリックした状態) */
.header-search input[type="text"]:focus {
outline: none; /* デフォルトの青い枠を消す */
border-color: #ffaa00; /* 枠線色を変更 */
box-shadow: 0 0 0 4px rgba(255,143,179,.15); /* 外側に光るような影 */
}
/* =========================================
検索ボタン(送信ボタン)
========================================= */
.header-search input[type="submit"] {
padding: 0 18px; /* 横の余白 */
border: none; /* 枠線なし */
border-radius: 999px; /* 丸ボタン */
background: var(--main-color); /* 背景色 */
height: 40px; /* 高さ統一 */
}
/* ホバー時 */
.header-search input[type="submit"]:hover {
background: #ffaa00; /* 色変更 */
transform: translateY(-1px); /* 少し浮かせる */
}
/* =========================================
レスポンシブ(スマホ対応)
========================================= */
@media (max-width: 991px) {
.header-search {
display: none; /* スマホでは検索エリアを非表示にする */
}
}
動作確認
「虫眼鏡アイコン」「検索欄」「検索ボタン」の3つが設置されているか
CSSに合わせた「位置」や「色」が状況に合わせて動作しているか

問題なく設置と動作がされていました。
検索欄を表示/非表示にするアニメーション作成
「js」フォルダと「search-toggle.js」ファイルの作成
/独自ドメイン/public_html/wp-content/themes/子テーマ/js/search-toggle.js
「js」フォルダを作成

「search-toggle.js」ファイルを作成

JavaScriptで「虫眼鏡アイコン」を押せば「検索欄」「検索ボタン」が表示されるアニメーション機能を設定
作成した 「search-toggle.js」ファイルへ記述していきます。
/*
* HTMLの読み込みが完了した後に処理を実行する
*/
document.addEventListener('DOMContentLoaded', function() {
const button = document.querySelector('.search-toggle');
const form = document.querySelector('.search-form-wrap');
if (!button || !form) return;
button.addEventListener('click', function() {
form.classList.toggle('active');
});
document.addEventListener('click', function(e) {
if (!e.target.closest('.header-search')) {
form.classList.remove('active');
}
});
});
const button = document.querySelector('.search-toggle');
「虫眼鏡ボタン」情報を取得。「button」へ格納する。
const form = document.querySelector('.search-form-wrap');
「検索欄」「検索ボタン」情報を取得。「form」へ格納する。
if (!button || !form) return;
「虫眼鏡ボタン」または「検索欄」「検索ボタン」が存在しない場合は処理を終了
button.addEventListener('click', function() {・・・});
「虫眼鏡ボタン」をクリックしたときの処理
form.classList.toggle('active');
「検索欄」「検索ボタン」の 'active' クラスを付けはずしする。 = 「検索欄」「検索ボタン」の 表示 / 非表示 を切り替える。
document.addEventListener('click', function(e) {・・・});
ページ内のどこかをクリックしたときの処理
if (!e.target.closest('.header-search')) {・・・}
もし、クリックした場所が .header-search(検索フォームのHTMLを囲むコンテナ) の外側なら
form.classList.remove('active');
「検索欄」「検索ボタン」の 'active' クラスを外す。 = 「検索欄」「検索ボタン」を 非表示 にする。
CSSでアニメーション設定
WordPress管理画面 → 外観 → カスタマイズ → 追加CSS
追加CSS へ追加する形で記述します。
場所はどこでも機能しますが、分かりやすいようにキミマチは「虫眼鏡ボタン」の下に記述しました。
/* =========================================
虫眼鏡ボタン(検索トグル)
========================================= */
.search-toggle {
background: transparent;
border: none;
font-size: 24px;
cursor: pointer;
padding: 0;
color: var(--main-color);
transition: all 0.3s ease;
}
/* ホバー時(マウスを乗せた時) */
.search-toggle:hover {
color: var(--accent-color);
transform: translateY(-1px);
}
/* =========================================
検索欄 検索ボタン
========================================= */
/* 検索欄 検索ボタン 初期は非表示 */
.search-form-wrap {
position: absolute; /* 親要素を基準に絶対配置 */
right: 0; /* 親要素の右端に配置 */
top: 40px; /* 上から40px下に配置 */
background: #fff; /* 背景色を白にする */
padding: 10px; /* 内側の余白 */
border: 1px solid var(--border-color); /* 枠線 */
border-radius: 12px; /* 角を丸くする */
box-shadow: 0 4px 12px rgba(0,0,0,.08); /* 影を付ける */
opacity: 0; /* 完全に透明 */
visibility: hidden; /* 非表示にする */
transform: translateY(-10px); /* 上へ10px移動 */
transition:
opacity .3s ease, /* 透明度を0.3秒で変化 */
transform .3s ease, /* 移動を0.3秒で変化 */
visibility .3s; /* 表示状態を0.3秒で切替 */
}
/* 検索欄 検索ボタン 表示時 */
.search-form-wrap.active {
opacity: 1; /* 不透明にして表示 */
visibility: visible; /* 表示状態にする */
transform: translateY(0); /* 元の位置へ戻す */
}
/* =========================================
ヘッダー全体レイアウト
========================================= */
.site-header-container {
align-items: flex-end;
}
動作確認
「虫眼鏡ボタン」を押すと、上からふわっと表示される。



問題なく動作していることを確認。柔らかい印象の表示アニメーションになってしまいます。
では、非表示への切り替えも確認してみます。

今回は、ページの適当なところを押して


こちらも問題なく動作確認。
まとめ
今回は、キミマチラボに記事検索機能を実装して、サイトに合わせたデザインやアニメーションにしてみました。
記事検索機能の実装を行った理由は、「Google AdSenseの審査に落ちたこと」でした。
Google AdSense審査の不承認原因を調べながら記事にしている中で、キミマチラボには「検索機能」がないなと気づきました。
次の再審査申請での対策として評価してもらえたらいいなと思いながら、
場所も取らず可愛い印象で「検索機能」の実装ができて、キミマチは満足です。
サイトのデザインをもっと凝りたいなという方は、こちらのカテゴリーを覗いていただければと思います。
カテゴリー「ブログデザイン改善」
Google AdSense審査の不承認原因について詳しく知りたいよという方は、こちらの記事をご一読ください。
ここまで読んでいただき、ありがとうございました。

