SearchWPブログ

WordPressのチュートリアル、ヒント、リソースでビジネスを成長させる

プラグインなしでWordPressでカスタム検索を作成する方法

プラグインなしでWordPressのカスタム検索を作成する方法をお探しですか?

サイトの検索をカスタマイズすることで、ページビュー数を増やし、売上を伸ばし、訪問者が探しているものをより早く見つけられるようにすることができます。

この記事では、プラグインをインストールせずにサイトの検索をカスタマイズする方法と、それでもプラグインを使用することを検討すべき理由について説明します。

始めましょう!

WordPressウェブサイトにとってカスタム検索が重要な理由

まず、サイトのカスタム検索がビジネスの成長にどのように役立つかについて説明しましょう。

サイトの検索をカスタマイズすることで、次のことが可能になります。

  • より関連性の高い検索結果を提供する。特定のカテゴリに検索を限定することで検索結果を絞り込み、訪問者が探しているものをより早く見つけられるようにします。
  • より多くのページビューと売上を獲得する。検索結果で特定の投稿や商品を宣伝することで、コンテンツの発見可能性を高め、収入を増やします。
  • 忠実なオーディエンスを構築する。サイトで肯定的な検索体験をした訪問者は、より多くのコンテンツを探索するために再び訪れる可能性が高くなります。
  • 検索エンジンからのトラフィックを増やす。訪問者が適切なコンテンツをより早く見つけられるようにすることで、サイトに長く滞在してもらうことができます。これはGoogleの主要なランキング要因の1つです。

カスタム検索がビジネスにもたらすメリットを理解したら、次にプラグインなしでそれを行う場合に予想されるデメリットについて説明しましょう。

プラグインなしでカスタム検索を作成する際の欠点

プラグインなしでサイトのカスタム検索を作成したい場合は、いくつかの大きな欠点を考慮する必要があります。

1. コーディングスキルとWordPressに関する深い知識が必要

サイトの検索を手動でカスタマイズする主な欠点は、広範なコーディング経験とWordPressに関する深い知識が必要であることです。

問題は、WordPressにはデフォルトの検索設定ツールがないことです。

そのため、検索をカスタマイズする唯一の方法は、WordPressのコアファイルとテーマのコードを変更することです。

これは不便で時間がかかり、技術に詳しくない人には適していません。

さらに、何か間違ったことをするとサイトがクラッシュする可能性があるため、テーマファイルをカスタマイズする際は細心の注意を払う必要があります。

2. 機能が少なくなる

さらに、広範なコーディングスキルを持っていても、プラグインなしで追加できるカスタム検索機能の数は限られています。

たとえば、独自のルールセットを持つ複数の検索エンジンを追加したり、特定のページやカテゴリを検索から除外したり、検索結果の順序を管理したりすることはできません。

したがって、サイトでの検索方法を完全に制御することが重要である場合は、強力なWordPress検索プラグインの使用を検討する必要があります。

3. 変更が失われる可能性がある

最後に、プラグインなしで検索をカスタマイズするにはサイトのファイルを編集する必要があるため、テーマやWordPressのバージョンを更新すると、行ったすべての変更が失われます。

そのような状況を回避する最善の方法は、WordPressの検索プラグインを使用することです。これにより、サイトで何を行っても設定が保持されます。

これで、技術的なスキルに関係なく、コーディングなしで数回クリックするだけでサイトの検索をカスタマイズする方法を見ていきましょう。

サイトのWordPress検索をカスタマイズする最も簡単な方法

WordPressサイトの検索をカスタマイズする最も簡単な方法は、SearchWPのようなプラグインを使用することです。

SearchWP

SearchWPは、50,000以上のウェブサイト所有者から信頼されている、評価の高いWordPress検索プラグインです。

初心者向けのインターフェイスと強力な機能により、初めてのウェブサイトを立ち上げる場合でも、検索を完全にカスタマイズできます。

たとえば、SearchWPを使用すると、WordPressが一致を検索する場所を管理したり、特定のコンテンツタイプに検索を制限したり、タグやカスタムフィールドでの検索を有効にしたり、その他多くのことができます。

最も良い点は、これらのほとんどのことを数回クリックするだけで実行できることです。

SearchWPを使用して、次のこともできます。

SearchWPが最高のWordPress検索プラグインである理由を学んだ後、それを使用してサイトの検索をニーズに合わせてカスタマイズする方法を見てみましょう。

ステップ1:SearchWPのインストールと有効化

最初のステップは、SearchWPのウェブサイトにアクセスし、SearchWPのコピーを入手することです。

完了したら、SearchWPアカウントダッシュボードにアクセスし、ダウンロードをクリックします。

アカウントエリアからSearchWPプラグインをダウンロード

次に、SearchWPのダウンロードボタンを押して、プラグインをコンピューターに保存できます。

ダウンロード後、左下隅にあるSearchWPライセンスキーをコピーすることもお勧めします。

次に、サイトにSearchWPをインストールする必要があります。ヘルプが必要な場合は、WordPressプラグインのインストールに関する詳細ガイドに従ってください。

その後、SearchWPへようこそ画面とセットアップウィザードが表示されます。「オンボーディングウィザードを開始」ボタンをクリックし、画面の指示に従ってください。

オンボーディングウィザード SearchWP

ステップ2:検索のカスタマイズを開始する

次に、SearchWPで検索エンジンを追加、削除、カスタマイズできます。これらは、サイトで検索を実行するときに従われるルールのセットと考えてください。

エンジンをカスタマイズすることにより、検索ソースのリストを管理し、新しいコンテンツ属性を考慮させ、特定のカテゴリに検索を制限するなどを行うことができます。

SearchWPを使用すると、無制限の数の検索エンジンを追加し、それらをサイトの個々の検索フォームに接続できます。

これにより、さまざまなビジネスニーズに合わせてカスタム検索フォームをすばやく作成し、サイトの好きな場所に配置できます。

このチュートリアルではサイト全体の検索方法をカスタマイズしたいので、デフォルトの検索エンジンを編集します。

まず、WordPressがコンテンツを検索する場所を、検索ソースのリストを設定することで指定しましょう。

検索ソースを管理する

開始するには、WordPressダッシュボードから SearchWP » アルゴリズム にアクセスしてください。

ここから、ソースと設定ボタンを押すことができます。

WordPressで新しい検索エンジンを編集または追加する

ここで、検索プロセスに含めるソースを管理できます。

デフォルトでは、投稿、ページ、メディアファイルの中から検索します。

検索ソースを選択

検索ソースを削除するには、横にあるチェックボックスをオフにします。たとえば、サイトの検索を投稿のみに制限しましょう。

これを行うには、投稿以外のすべてのソースのチェックを外し、変更を保存するために完了をクリックします。

投稿のみをソースとして選択

検索ソースのリストを設定したら、投稿の属性とタクソノミーを考慮するようにWordPressを設定して、検索を強化しましょう。

検索属性を設定する

開始するには、投稿検索ソースセクションにある属性の追加/削除ボタンをクリックします。

投稿に属性を追加

次のウィンドウで、検索を実行する際にSearchWPに考慮させたいカスタムフィールドやタクソノミーなどの属性を指定できます。

デフォルトでは、タイトル、コンテンツ、スラッグ、抜粋、作成者が属性として含まれます。

投稿属性

特定のカスタムフィールドを検索可能にするには、カスタムフィールドフィールドをクリックしてその名前を入力します。

同様に、タグやカテゴリなどのタクソノミーをソースに含めることもできます。

新しいタクソノミーを検索可能にするには、タクソノミーフィールドをクリックして目的のタクソノミーを選択します。

たとえば、検索を実行する際に投稿タグを考慮するようにWordPressを設定しましょう。これを行うには、ドロップダウンメニューからタグオプションを選択します。

投稿タグを選択

投稿ソース属性の管理が終了したら、変更を保存するために完了を押します。

次に、訪問者にさらに関連性の高い結果を提供するために、検索を絞り込む方法を見てみましょう。

特定の投稿カテゴリに検索を制限する

開始するには、ソースのルールの編集ボタンを押してください。

検索結果のルールを編集

新しいウィンドウがポップアップ表示されます。

単にルールの追加ボタンをクリックします。

新しい検索ルールを追加

ここで、WordPressが検索結果のコンテンツをフィルタリングするルールを追加できます。

たとえば、特定のカテゴリを検索から除外したり、検索をそれらに制限したりするルールを追加できます。

テストサイトでの検索をニュースカテゴリに制限したいと仮定しましょう。

これを行うには、まず除外するエントリ:オプションを選択し、次にカテゴリタクソノミーを選択していることを確認します。

ここから、検索を制限したいカテゴリの名前を一番右のフィールドに入力できます。この場合、ニュースになります。

除外ルールを設定する

検索エンジンのルールのカスタマイズが終了したら、変更を保存するために完了をクリックします。

検索エンジンのカスタマイズが完了したら、最終ステップに進み、検索エンジンを保存する準備が整いました。

検索エンジンの保存

これを行うには、SearchWPダッシュボードの右上にある保存ボタンを押してください。

エンジンの設定を保存

これで完了です。コードを一行も書かずに、ニーズに合わせて検索を完全にカスタマイズできました。

カスタマイズどおりに機能することを確認するために、新しい検索をテストしましょう。

ステップ3:新しい検索をテストする

開始するには、あなたのウェブサイトにアクセスし、テスト検索を実行してください。

たとえば、投稿タグを検索可能にしたので、タグのみで投稿を見つけようとしてみましょう。

テストサイトには、「New WordPress Features」というタイトルの投稿があり、「Updates」タグが付いています。

このタグで検索して、投稿を見つけられるか確認しましょう。

検索結果を検索

タイトル、抜粋、またはコンテンツに「updates」という単語がなくても、投稿を見つけることができました。

これは、検索エンジンが一致するものを探す際に、投稿タグを考慮するようになったことを意味します。

投稿が見つかりました

また、サイトでの検索が「News」カテゴリに限定されていることを確認しましょう。

これを行うために、「WordPress」を検索します。他のカテゴリにもWordPress関連の投稿がたくさんあるためです。

別の検索を行う

取得した検索結果の中で、Newsカテゴリの投稿のみが表示されていることがわかります。

これは、WordPressはニュース内のみを検索する必要があるという、検索エンジンに追加したルールが正しく機能していることを意味します。

適切な投稿が見つかりました

これで、検索をカスタマイズする最も簡単な方法を学びました。次に、プラグインなしでそれを行う方法を見てみましょう。

プラグインなしでWordPressでカスタム検索を作成する

プラグインなしで検索をカスタマイズするには、テーマを編集する必要があります。

これを行う最も安全な方法は、サイトで使用している現在のテーマの子テーマを作成することです。

これにより、子テーマに変更を加えたときに、親テーマはそのまま残り、重大なエラーが発生した場合にすぐに切り替えることができます。

さらに、子テーマがあれば、変更を失うことなく親テーマを更新できます。子テーマの作成方法の詳細については、この子テーマの作成方法チュートリアルをご覧ください。

プロのヒント: 何か問題が発生した場合に備えて、サイトの最新コピーを復元できるように、WordPressバックアッププラグインを使用してサイトの最新コピーを用意しておくこともできます。

子テーマを作成して有効化した後、検索のカスタマイズを開始する準備が整いました。

開始するには、WordPressダッシュボードの外観 » テーマファイルエディターに移動します。次に、右側のパネルでfunctions.phpファイルを見つけてクリックします。

テーマファイルを編集することに慣れていない場合は、WPCodeを使用することをお勧めします。これにより、何も壊すリスクなしにカスタムコードをサイトに挿入できます。このガイドで、WebからWordPressにコードスニペットをコピーして貼り付ける方法を確認できます。

functions.phpファイルを開く

その後、サイトの検索にどのようなカスタマイズを行いたいかに応じて、以下の手順に従ってください。

タグとカテゴリによる投稿の検索を有効にする

プラグインなしでサイトの投稿タグとカテゴリを検索可能にするには、次のコードをテーマの functions.php ファイルに追加する必要があります。

<pre class="wp-block-syntaxhighlighter-code">
/*
 * ----------------------------------------------------------
 *
 * Search Posts by Tags and Categories
 *
 * ----------------------------------------------------------
 */

/**
 * Join the terms, term_relationship, and term_taxonomy tables.
 *
 * @global $wpdb
 *
 * @param string $join  The JOIN clause.
 * @param object $query The current WP_Query instance.
 *
 * @return string The JOIN clause.
 */
function search_custom_posts_join( $join, $query ) {

	global $wpdb;

	if ( ! is_main_query() || ! is_search() ) {
		return $join;
	}

	$join .= &amp;amp;amp;quot;
    LEFT JOIN
    (
        {$wpdb-&amp;amp;amp;gt;term_relationships}
        INNER JOIN
            {$wpdb-&amp;amp;amp;gt;term_taxonomy} ON {$wpdb-&amp;amp;amp;gt;term_taxonomy}.term_taxonomy_id = {$wpdb-&amp;amp;amp;gt;term_relationships}.term_taxonomy_id
        INNER JOIN
            {$wpdb-&amp;amp;amp;gt;terms} ON {$wpdb-&amp;amp;amp;gt;terms}.term_id = {$wpdb-&amp;amp;amp;gt;term_taxonomy}.term_id
    )
    ON {$wpdb-&amp;amp;amp;gt;posts}.ID = {$wpdb-&amp;amp;amp;gt;term_relationships}.object_id &amp;amp;amp;quot;;

	return $join;
}

add_filter( 'posts_join', 'search_custom_posts_join', 10, 2 );

/**
 * Modify the WHERE clause to include searches against taxonomies.
 *
 * @global $wpdb
 *
 * @param string   $where The WHERE clause.
 * @param WP_Query $query The current WP_Query instance.
 *
 * @return string The WHERE clause.
 */
function search_custom_posts_where( $where, $query ) {

	global $wpdb;

	if ( ! is_main_query() || ! is_search() ) {
		return $where;
	}

	// Get additional where clause for the user.
	$user_where = '';

	$user_id = get_current_user_id();
	$status  = array( &amp;amp;amp;quot;'publish'&amp;amp;amp;quot; );

	// Include private posts if the user is logged in.
	if ( $user_id ) {
		$status&#x5B;]    = &amp;amp;amp;quot;'private'&amp;amp;amp;quot;;
		$user_where .= &amp;amp;amp;quot; AND {$wpdb-&amp;amp;amp;gt;posts}.post_author = {$user_id}&amp;amp;amp;quot;;
	}

	$user_where .= &amp;amp;amp;quot; AND {$wpdb-&amp;amp;amp;gt;posts}.post_status IN( &amp;amp;amp;quot; . implode( ',', $status ) . &amp;amp;amp;quot; ) &amp;amp;amp;quot;;

	$where .= &amp;amp;amp;quot; OR (
                    {$wpdb-&amp;amp;amp;gt;term_taxonomy}.taxonomy IN( 'category', 'post_tag' )
                    AND
                    {$wpdb-&amp;amp;amp;gt;terms}.name LIKE '%&amp;amp;amp;quot; . esc_sql( get_query_var( 's' ) ) . &amp;amp;amp;quot;%'
                    {$user_where}
                )&amp;amp;amp;quot;;

	return $where;
}

add_filter( 'posts_where', 'search_custom_posts_where', 10, 2 );

/**
 * Set the GROUP BY clause to post IDs.
 *
 * @global $wpdb
 *
 * @param string   $groupby The GROUPBY clause.
 * @param WP_Query $query   The current WP_Query instance.
 *
 * @return string The GROUPBY clause.
 */
function search_custom_posts_groupby( $groupby, $query ) {

	global $wpdb;

	if ( ! is_main_query() || ! is_search() ) {
		return $groupby;
	}

	return &amp;amp;amp;quot;{$wpdb-&amp;amp;amp;gt;posts}.ID&amp;amp;amp;quot;;
}

add_filter( 'posts_groupby', 'search_custom_posts_groupby', 10, 2 );
</pre>




完了したら、ファイルを更新ボタンを押して変更を保存します。

完了を押す

これで、サイト訪問者はタグとカテゴリで投稿を検索できるようになります。

コメント内容と著者名の検索を有効にする

プラグインなしでサイトのコメントと著者名を検索可能にするには、次のコードをテーマの functions.php ファイルに追加します。

/*
 * ----------------------------------------------------------
 *
 * Search by Comment Content and Author Names
 *
 * ----------------------------------------------------------
 */

/**
 * Joins the comments and posts tables.
 *
 * @global $wpdb
 *
 * @param string $join  The JOIN clause.
 * @param object $query The current WP_Query instance.
 *
 * @return string The JOIN clause.
 */
function search_custom_comments_posts_join( $join, $query ) {

	global $wpdb;

	if ( ! is_main_query() || ! is_search() ) {
		return $join;
	}

	$join .= ' LEFT JOIN ' . $wpdb-&amp;amp;amp;gt;comments . ' ON ' . $wpdb-&amp;amp;amp;gt;posts . '.ID = ' . $wpdb-&amp;amp;amp;gt;comments . '.comment_post_ID ';

	return $join;
}

add_filter( 'posts_join', 'search_custom_comments_posts_join', 10, 2 );

/**
 * Modify the WHERE clause to include searches against comments.
 *
 * @global $wpdb
 *
 * @param string   $where The WHERE clause.
 * @param WP_Query $query The current WP_Query instance.
 *
 * @return string The WHERE clause.
 */
function search_custom_comments_posts_where( $where, $query ) {

	global $wpdb;

	if ( ! is_main_query() || ! is_search() ) {
		return $where;
	}

	$where = preg_replace(
		&amp;amp;amp;quot;/\(\s*&amp;amp;amp;quot; . $wpdb-&amp;amp;amp;gt;posts . &amp;amp;amp;quot;.post_title\s+LIKE\s*(\'[^\']+\')\s*\)/&amp;amp;amp;quot;,
		&amp;amp;amp;quot;(&amp;amp;amp;quot; . $wpdb-&amp;amp;amp;gt;posts . &amp;amp;amp;quot;.post_title LIKE $1) OR (&amp;amp;amp;quot; . $wpdb-&amp;amp;amp;gt;comments . &amp;amp;amp;quot;.comment_author LIKE $1) OR (&amp;amp;amp;quot; . $wpdb-&amp;amp;amp;gt;comments . &amp;amp;amp;quot;.comment_content LIKE $1)&amp;amp;amp;quot;,
		$where
	);

	return $where;
}

add_filter( 'posts_where', 'search_custom_comments_posts_where', 10, 2 );

/**
 * Prevent search results duplicates.
 *
 * @param string   $distinct The DISTINCT clause.
 * @param WP_Query $query    The current WP_Query instance.
 *
 * @return string The DISTINCT clause.
 */
function search_custom_comments_posts_distinct( $distinct, $query ) {

	if ( ! is_main_query() || ! is_search() ) {
		return $distinct;
	}

	return 'DISTINCT';
}

add_filter( 'posts_distinct', 'search_custom_comments_posts_distinct', 10, 2 );

完了したら、エディタ下部にある ファイルを更新ボタンをクリックして変更を保存します。

完了をクリック

これで、訪問者はコメント内容と著者名で検索できるようになります。

投稿カスタムフィールドの検索を有効にする

プラグインなしでサイトのカスタムフィールドを検索可能にするには、次のコードをテーマの functions.php ファイルに追加します。

<pre class="wp-block-syntaxhighlighter-code">
/*
 * ----------------------------------------------------------
 *
 * Search by Post Custom Fields
 *
 * ----------------------------------------------------------
 */

/**
 * Joins the postmeta and posts tables.
 *
 * @global $wpdb
 *
 * @param string $join  The JOIN clause.
 * @param object $query The current WP_Query instance.
 *
 * @return string The JOIN clause.
 */
function search_custom_meta_posts_join( $join, $query ) {

	global $wpdb;

	if ( ! is_main_query() || ! is_search() ) {
		return $join;
	}

	$join .=' LEFT JOIN '.$wpdb-&amp;amp;amp;gt;postmeta. ' ON '. $wpdb-&amp;amp;amp;gt;posts . '.ID = ' . $wpdb-&amp;amp;amp;gt;postmeta . '.post_id ';

	return $join;
}

add_filter( 'posts_join', 'search_custom_meta_posts_join', 10, 2 );

/**
 * Modify the WHERE clause to include searches against postmeta.
 *
 * @global $wpdb
 *
 * @param string   $where The WHERE clause.
 * @param WP_Query $query The current WP_Query instance.
 *
 * @return string The WHERE clause.
 */
function search_custom_meta_posts_where( $where ) {

	global $wpdb;

	if ( ! is_main_query() || ! is_search() ) {
		return $where;
	}

	$where = preg_replace(
		&amp;amp;amp;quot;/\(\s*&amp;amp;amp;quot; . $wpdb-&amp;amp;amp;gt;posts . &amp;amp;amp;quot;.post_title\s+LIKE\s*(\'&#x5B;^\']+\')\s*\)/&amp;amp;amp;quot;,
		&amp;amp;amp;quot;(&amp;amp;amp;quot; . $wpdb-&amp;amp;amp;gt;posts . &amp;amp;amp;quot;.post_title LIKE $1) OR (&amp;amp;amp;quot; . $wpdb-&amp;amp;amp;gt;postmeta . &amp;amp;amp;quot;.meta_value LIKE $1)&amp;amp;amp;quot;, $where );

	return $where;
}

add_filter( 'posts_where', 'search_custom_meta_posts_where', 10, 2 );

/**
 * Prevent search results duplicates.
 *
 * @param string   $distinct The DISTINCT clause.
 * @param WP_Query $query    The current WP_Query instance.
 *
 * @return string The DISTINCT clause.
 */
function search_custom_meta_posts_distinct( $distinct, $query ) {

	if ( ! is_main_query() || ! is_search() ) {
		return $distinct;
	}

	return 'DISTINCT';
}

add_filter( 'posts_distinct', 'search_custom_meta_posts_distinct', 10, 2 );
</pre>




完了したら、エディタ下部にある ファイルを更新ボタンを押して変更を保存します。

完了を押す

これで、訪問者はカスタムフィールドで投稿を検索できるようになります。

この記事が、プラグインなしでカスタム検索を作成する方法を学ぶのに役立ったことを願っています。また、カスタムWordPressテーマの作成方法WordPress検索結果ページのカスタマイズ方法に関するガイドも参照することをお勧めします。

数回のクリックでサイトの検索をカスタマイズする準備はできましたか?ここからSearchWPを開始できます

著者アバター
Aazim Akhtar

今日からより良いWordPress検索エクスペリエンスを作成しましょう

役に立たない検索結果で訪問者を失うことはもうありません。SearchWPを使用すると、独自のスマートなWordPress検索をすばやく簡単に作成できます。

Get SearchWP Now
複数の検索エンジンアイコン