ヒシキリュウ.com
フリーランスエンジニアが運営するITとキャリアのメディア
  • 初心者向けASP
  • おすすめレンタルサーバー
  • おすすめ未経験IT転職求人
  • おすすめフリーランス案件

【WordPress】posts_searchフィルターフックで検索フォームの検索対象拡張方法

Wordpressロゴ WordPress
X Facebook はてブ Pocket Pinterest LinkedIn
2022.06.122023.07.26
この記事は約3分で読めます。

WordPressの検索は、デフォルトの検索対象が件名と本文のみです。

検索対象を拡張できるプラグインもあるにはあるのですが、更新されていないものが多く、実際に入れたらエラーが出ることがしばしばだったので自力実装してみました。

今回、タグ名・カテゴリ名・カスタムフィールドも検索対象に加えたいことがありましたので、そのやり方をご紹介します。

  1. 実際に書いたコード
  2. コードの解説
スポンサーリンク

実際に書いたコード

function.phpなどに以下のコードを追加すれば検索対象が増えます。

add_filter('posts_search',function($search, $wp_query) {
	global $wpdb;
	//検索ページ以外だったら終了
	if (!$wp_query->is_search)
		return $search;

	if (!isset($wp_query->query_vars))
		return $search;

	$search_words = explode(' ', isset($wp_query->query_vars['s']) ? $wp_query->query_vars['s'] : '');
	if ( count($search_words) > 0 ) {
		$search = '';
		foreach ( $search_words as $word ) {
			if ( !empty($word) ) {
				$search_word = $wpdb->escape("%{$word}%");
				$search .= " AND (
						{$wpdb->posts}.post_title LIKE '{$search_word}'
						OR {$wpdb->posts}.post_content LIKE '{$search_word}'
						OR EXISTS (
							SELECT r.object_id
							FROM {$wpdb->term_relationships} AS r
							INNER JOIN {$wpdb->term_taxonomy} AS tt ON r.term_taxonomy_id = tt.term_taxonomy_id
							INNER JOIN {$wpdb->terms} AS t ON tt.term_id = t.term_id
							WHERE r.object_id = {$wpdb->posts}.ID AND 
							(t.name LIKE '{$search_word}'
						OR t.slug LIKE '{$search_word}'
						OR tt.description LIKE '{$search_word}')
						)
						OR EXISTS (
							SELECT p.post_id
							FROM {$wpdb->postmeta} AS p
							WHERE p.post_id = {$wpdb->posts}.ID AND p.meta_value LIKE '{$search_word}'
						)
				) ";
			}
		}
	}
	return $search;
}, 10, 2);
スポンサーリンク

コードの解説

まず、検索を拡張するには、add_filterの’posts_search’を使います。

管理画面の検索にも及んでしまうため、「$wp_query->is_search」以外では、処理しないようにします。

「$search」のクエリにterm(カテゴリー・タグ)やpostmetaの条件を追加すれば拡張ができます。

OR検索については、検索語を分割すればできますが、SQL文を加工する所が結構大変なので効果があるかどうか判断してから実装した方が良いです。

この記事を書いた人
サイト運営者
Ryu
Ryu

フリーランスエンジニア。転職含め9社経験。第二新卒から未経験でIT就職。社内SEとSIerのSEで働き、企画〜運用保守、フロント〜バック・インフラとフルスタックな守備範囲。C#とSQLとSalesforceが得意。

Ryuをフォローする
WordPress
MySQLphpWordPressカスタムフィールドカテゴリータームタグ検索フォーム
スポンサーリンク
シェアする
X Facebook はてブ Pocket Pinterest LinkedIn
Ryu

おすすめの未経験IT特化の就職・転職エージェントの評判

  • はじめてのエンジニア 評判
  • ウズキャリIT評判
  • CODE×CODE CAREER評判
  • UZUZ理系評判

おすすめのフリーランスエージェントの評判

  • レバテックフリーランス評判
  • Midworks(ミッドワークス)評判
  • フォスターフリーランス評判
  • ITプロパートナーズ評判
  • HiProTech(ハイプロテック)評判
  • PE-BANK評判

おすすめの技術本

イラスト図解式 この一冊で全部わかるWeb技術の基本 [ NRIネットコム株式会社 ]
イラスト図解式 この一冊で全部わかるWeb技術の基本 [ NRIネットコム株式会社 ]
楽天ブックス
¥ 1,848(2024/12/30 03:55時点)
Amazon
楽天
Yahoo!ショッピング
DMM
体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践 [ 徳丸 浩 ]
体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践 [ 徳丸 浩 ]
楽天ブックス
¥ 3,520(2024/12/30 03:55時点)
Amazon
楽天
Yahoo!ショッピング
DMM

関連記事

WordPress

【WordPress】モバイル・タブレットを判定するwp_is_mobile関数

2023.05.16
WordPress
WordPress

【WordPress】アイキャッチ画像を遅延読み込みさせない方法【LCP・FCP対策】

WordPressブログ運営
WordPress

【PHP】WordPressテーマ編集で「Parse error: syntax error, unexpected T_STRING in」が出た時の解決方法

2023.07.26
WordPress
WordPress

ホリエモンドットコムのようにNewsPicksからWordPressに自動投稿する方法

2023.05.16
WordPress
WordPress

【PHP】WordPressタグ操作方法まとめ【取得・更新】

2023.05.16
WordPress
スポンサーリンク



【PHP】WordPressテーマ編集で「Parse error: syntax error, unexpected T_STRING in」が出た時の解決方法
【WordPress】モバイル・タブレットを判定するwp_is_mobile関数
ホーム
ブログ
プログラミング
PHP
WordPress
転職サイト・転職エージェント
未経験IT転職  20代未経験転職  ニート向け 
フリーランスエージェント
おすすめ  支払いサイト短い 
PVアクセスランキング にほんブログ村
2025年5月
月 火 水 木 金 土 日
 1234
567891011
12131415161718
19202122232425
262728293031  
« 4月    

新着情報

【Salesforce】Salesforce for Slackでメンションする方法
2024.03.06Salesforce
ウォーターフォールはメリットがないで燃えた話と内製化のすすめ
2024.03.05ソフトウェア工学
ルンバを買うならアイロボット公式オンラインストア特典が豪華
2024.02.14おすすめ商品
2023年買って良かったもの
2024.01.06おすすめ商品
【Salesforce】sfdxコマンドが使えない時の対処法
2024.01.03Salesforce
【Salesforce】レポートでエクスポートすることのできるレコード件数の上限を増やす方法
2023.12.02Salesforce
【評判】ENたま転職支援サービスの口コミと評判は?
2023.10.15就職&転職
フリーランスエージェント別Salesforce公開案件数比較
2023.09.18Salesforceフリーランス
【評判】カラフルボックス(ColorfulBox)の口コミは?
2023.09.14セキュリティ・ネットワーク・サーバーブログ運営
【Salesforce/Apex】テストで作成日(CreatedDate)を変更するTest.setCreatedDate
2023.09.13Salesforce

アーカイブ

よく読まれた記事(月間)

Wi-Fiが不安定・速度が遅い対策とSGP200W(NURO光)DNSおすすめ設定
2021.08.072024.02.16
【Salesforce】数式でのIF関数の使用例(入れ子や複数条件など)
2023.07.262023.09.13
【無料】おすすめパブリックDNSサーバー3選 ipv4,ipv6対応
2022.02.252023.08.13
【Salesforce】数式で日付⇔テキスト変換、日付フォーマットまとめ
2023.04.102023.09.17
【Salesforce】数式で「文字列を含む」を判定するCONTAINS関数
2023.08.06
【PHP】配列の最後(末尾)の要素を取得まとめ array_key_last, count, end関数
2021.07.242023.08.23
【Salesforce】標準項目一覧とシステム項目一覧まとめ
2023.02.162023.10.06
【Salesforce】数式で文字列結合(文字列連結)のやり方
2023.04.272023.08.29
【Salesforce】sfdxコマンドが使えない時の対処法
2024.01.03
【C#】配列の最後(末尾)の要素を取得する方法と速度比較
2023.08.23
スポンサーリンク




カテゴリー

  • ニュース297
  • ブログ116
    • アプリ5
    • おすすめ商品3
    • キャリア37
      • IT業界のキャリアコラム2
      • フリーランス18
      • 就職&転職17
    • セキュリティ・ネットワーク・サーバー21
    • プログラミング42
      • C#3
      • PHP11
        • WordPress6
      • Salesforce27
      • ソフトウェア工学1
    • ブログ運営17

目次

  1. 実際に書いたコード
  2. コードの解説
ヒシキリュウ.com
  • 人気ブログランキング
  • にほんブログ村
  • プライバシーポリシー
  • 運営者情報
  • お問い合わせ
  • サイトマップ
© 2021-2025 ヒシキリュウ.com.
    • 初心者向けASP
    • おすすめレンタルサーバー
    • おすすめ未経験IT転職求人
    • おすすめフリーランス案件
  • ヒシキリュウ.com