如何在沒有插件的情況下在 WordPress 中創建自定義搜索
已發表: 2022-07-25想知道如何在沒有插件的情況下在 WordPress 中創建自定義搜索?
通過在您的網站上自定義搜索,您可以增加網頁瀏覽量、提高銷售額並幫助您的訪問者更快地找到他們想要的東西。
在本文中,我們將討論如何在不安裝插件的情況下在您的網站上自定義搜索,以及為什麼您仍應考慮使用插件來做到這一點。
以下目錄可幫助您快速瀏覽本文:
- 為什麼自定義搜索對您的 WordPress 網站很重要?
- 在沒有插件的情況下創建自定義搜索的缺點
- 在您的網站上自定義 WordPress 搜索的最簡單方法
- 在沒有插件的 WordPress 中創建自定義搜索
讓我們開始!
為什麼自定義搜索對您的 WordPress 網站很重要?
首先,讓我們談談您網站上的自定義搜索如何幫助您發展業務。
在您的網站上自定義搜索允許您:
- 提供更相關的搜索結果。 將您的搜索限制在特定類別以縮小搜索結果並幫助訪問者更快地找到他們正在尋找的內容。
- 獲得更多的瀏覽量和銷售額。 通過在搜索結果中宣傳特定帖子或產品來提高您的內容可發現性並增加您的收入。
- 建立忠實的受眾。 在您的網站上獲得積極搜索體驗的訪問者更有可能再次返回以探索您的更多內容。
- 吸引更多來自搜索引擎的流量。 通過幫助訪問者更快地找到正確的內容,您可以讓他們在您的網站上停留更長時間,這是 Google 的主要排名因素之一。
在我們弄清楚自定義搜索可以為您的業務帶來哪些好處之後,讓我們來談談如果您在沒有插件的情況下這樣做會帶來哪些缺點。
在沒有插件的情況下創建自定義搜索的缺點
如果您想在沒有插件的情況下在您的網站上創建自定義搜索,您應該考慮幾個主要缺點。
1. 它需要編碼技巧和深厚的 WordPress 知識
手動自定義站點搜索的主要缺點是它需要豐富的編碼經驗和對 WordPress 的深入了解。
問題是,WordPress 中沒有默認的搜索配置工具。
因此,自定義搜索的唯一方法是修改 WordPress 核心文件和主題代碼。
它不方便、耗時且不適合非技術人員。
此外,如果您做錯了什麼,可能會導致您的網站崩潰,因此在自定義主題文件時應該非常小心。
2. 你將擁有更少的功能
此外,即使您具有廣泛的編碼技能,您可以在沒有插件的情況下添加的自定義搜索功能的數量也是有限的。
例如,您不能使用一組獨特的規則添加多個搜索引擎、從搜索中排除特定頁面或類別、管理搜索結果的順序等等。
因此,如果完全控制搜索在您的網站上的工作方式對您至關重要,您應該考慮使用功能強大的 WordPress 搜索插件。
3. 您可能會丟失您的更改
最後,由於在沒有插件的情況下自定義搜索需要對站點文件進行編輯,因此在更新主題或 WordPress 版本時所做的所有更改都會丟失。
避免這種情況的最佳方法是使用 WordPress 搜索插件,因為無論您對網站做什麼,它都會保留您的設置。
有了這個,讓我們來看看如何通過點擊幾下自定義您的網站上的搜索,而無需編碼並且無論您的技術技能如何。
在您的網站上自定義 WordPress 搜索的最簡單方法
在 WordPress 網站上自定義搜索的最簡單方法是使用 SearchWP 之類的插件。
SearchWP 是 30,000 多名網站所有者信任的頂級 WordPress 搜索插件。
其對初學者友好的界面和強大的功能使您即使啟動第一個網站也可以完全自定義搜索。
例如,使用 SearchWP,您可以管理 WordPress 應在何處查找匹配項、將搜索限制為特定類型的內容、啟用按標籤和自定義字段進行搜索等等。
最棒的是,您只需單擊幾下即可完成大部分此類操作。
您還可以使用 SearchWP 來:
- 以實時模式顯示搜索結果。 在您的網站上啟用搜索結果的實時顯示,以便您的訪問者可以立即導航到他們想要的內容。
- 跟踪訪問者的搜索。 收集有關訪問者在您的網站上搜索的內容、最可點擊的結果以及其他有價值的數據的數據。
- 在搜索結果中突出顯示搜索詞。 通過在搜索結果中突出顯示關鍵字,幫助您的訪問者確定他們是否更快地找到了正確的內容。
- 從搜索中排除特定頁面。 通過排除多餘的頁面和過時的內容來消除您網站上搜索結果中的混亂。
在您了解 SearchWP 為何是最好的 WordPress 搜索插件之後,讓我們看看如何使用它來根據您的需要在您的網站上自定義搜索。
第 1 步:安裝並激活 SearchWP
第一步是在此處獲取您的 SearchWP 副本。
完成後,轉到您的 SearchWP 帳戶儀表板,然後單擊下載。
然後,按下載 SearchWP按鈕並將插件保存到您的計算機。
下載後,複製左下角的 SearchWP 許可證密鑰。
接下來,您需要在您的網站上安裝 SearchWP。 如果您需要幫助,可以按照我們關於安裝 WordPress 插件的詳細指南進行操作。
在您的網站上啟動並運行 SearchWP 後,下一步就是激活您的插件副本。
為此,請轉到您的 WordPress 儀表板,然後單擊頂部面板SearchWP按鈕下的激活許可證。
之後,在許可證字段中輸入您的許可證密鑰,然後按激活。
激活 SearchWP 副本後,您就可以開始自定義搜索了。
第 2 步:開始自定義搜索
要開始使用,請單擊SearchWP設置中的引擎。
您可以在此選項卡上添加、刪除和自定義您的搜索引擎。
SearchWP 安裝後會自動創建默認搜索引擎。
它鏈接到每個現有的搜索表單,因此通過對其進行自定義,您可以控制搜索在您的網站上的工作方式。
例如,您可以管理搜索源列表、讓 WordPress 考慮新的內容屬性、將搜索限制為特定類別等等。
使用 SearchWP,您可以添加無限數量的搜索引擎並將它們連接到您網站上的各個搜索表單。
多虧了這一點,您可以針對各種業務需求快速創建自定義搜索表單,並將它們放置在您網站上的任何位置。
由於在本教程中我們希望自定義搜索在整個站點中的工作方式,因此我們將編輯默認搜索引擎。
首先,讓我們通過配置搜索源列表來指定 WordPress 將在哪裡搜索內容。
管理您的搜索源
要開始使用,請按默認搜索引擎部分下的來源和設置按鈕。
在這裡,您可以管理 WordPress 應該在哪裡搜索匹配項。 默認情況下,它會在Posts 、 Pages和Media文件中進行搜索。
要刪除搜索源,請取消選中它旁邊的框。 例如,讓我們將網站上的搜索限制為僅帖子。
為此,我們將取消選中除帖子之外的所有其他來源,然後單擊完成以保存更改。
一旦我們建立了我們的搜索源列表,讓我們也通過讓 WordPress 考慮帖子屬性和分類來增強我們的搜索。
配置您的搜索屬性
要開始使用,請單擊帖子搜索源部分中的添加/刪除屬性按鈕。
在出現的窗口中,您可以指定希望 WordPress 在執行搜索時考慮的屬性和分類法。
要使特定的自定義字段可搜索,請單擊自定義字段字段並輸入其名稱。
還有一個Any Meta Key快捷方式,通過添加它,您可以一次搜索所有現有的搜索字段。
添加完自定義字段後,我們還可以製作 WordPress 索引分類法。
在 WordPress 中,分類法是一種對內容和數據進行分類的方法。 例如,它可以是帖子類別、標籤、格式或其他內容。
要使新分類法可搜索,請單擊分類法字段並選擇所需的分類法。
例如,讓我們讓 WordPress 在執行搜索時考慮發布標籤。 為此,請從下拉菜單中選擇標籤選項。
您還可以通過取消選中它們旁邊的框來使 WordPress 忽略默認的帖子屬性,例如Title 、 Content 、 Slug和Excerpt 。
完成管理帖子搜索源屬性後,按完成保存更改。
現在,讓我們看看如何縮小搜索範圍,為訪問者提供更相關的結果。
將搜索限制為特定的帖子類別
要開始,請按編輯規則按鈕。
然後,單擊添加規則。
您可以在此處添加 WordPress 過濾搜索結果內容的規則。
例如,您可以添加規則以從搜索中排除特定類別,反之亦然,將搜索限制在這些類別中。
假設我們希望將測試站點上的搜索限制為“新聞”類別。
為此,首先確保選擇Only show entries if:選項和Categories分類。
然後在最右邊的字段中輸入您想要限制搜索的類別的名稱。 在我們的例子中,它將是News 。
完成自定義搜索引擎規則後,單擊完成以保存更改。
當您對自定義搜索的方式感到滿意時,您就可以進入最後一步並保存搜索引擎了。
保存您的搜索引擎
為此,請按 SearchWP 儀表板右上角的保存引擎。
然後單擊重建索引以使 WordPress 重新索引您的所有內容並應用新的搜索引擎設置。
而已。 您無需編寫任何代碼即可完全根據您的需要定制搜索。
讓我們測試您的新搜索,以確保它可以根據您的自定義設置。
第 3 步:測試您的新搜索
要開始,請訪問您的網站並執行測試搜索。 例如,由於我們使帖子標籤可搜索,讓我們嘗試僅通過其標籤來查找帖子。

在我們的測試站點上,我們有一個名為“New WordPress Features”的帖子,其中包含“Updates”標籤。
讓我們通過這個標籤搜索,看看我們是否能找到我們的帖子。
儘管標題、摘錄或內容中沒有“更新”一詞,我們還是找到了該帖子。
這意味著我們的搜索引擎現在在查找匹配項時會考慮帖子標籤。
我們還要確保我們網站上的搜索現在僅限於“新聞”類別。
為此,我們將搜索“WordPress”,因為我們在其他類別中有許多與 WordPress 相關的帖子。
您可以看到,我們得到的搜索結果中只顯示了來自News類別的帖子。
這意味著我們添加到搜索引擎中的規則,即 WordPress 應該只在新聞中搜索,可以正常工作。
因此,您剛剛學會了自定義搜索的最簡單方法。 現在讓我們看看如何在不使用插件的情況下做到這一點。
在沒有插件的 WordPress 中創建自定義搜索
要在沒有插件的情況下自定義搜索,您需要對主題進行編輯。
最安全的方法是為您在網站上使用的當前主題創建一個子主題。
這樣,當您更改子主題時,您的父主題保持不變,讓您可以在出現嚴重錯誤時快速切換到它。
另外,擁有子主題可以讓您在不丟失更改的情況下更新父主題。 有關如何創建子主題的更多詳細信息,請查看如何創建子主題教程。
創建並激活子主題後,您就可以開始自定義搜索了。
首先,導航到 WordPress 儀表板中的外觀 » 主題文件編輯器。
然後,在右側面板中找到functions.php文件並單擊它。
之後,根據您要在您的網站上搜索的自定義內容,按照以下說明進行操作。
啟用按標籤和類別搜索帖子
要在沒有插件的情況下在您的網站上搜索帖子標籤和類別,請將以下代碼添加到主題的functions.php文件中:
/* * ---------------------------------------------------------- * * 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 .= " LEFT JOIN ( {$wpdb->term_relationships} INNER JOIN {$wpdb->term_taxonomy} ON {$wpdb->term_taxonomy}.term_taxonomy_id = {$wpdb->term_relationships}.term_taxonomy_id INNER JOIN {$wpdb->terms} ON {$wpdb->terms}.term_id = {$wpdb->term_taxonomy}.term_id ) ON {$wpdb->posts}.ID = {$wpdb->term_relationships}.object_id "; 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( "'publish'" ); // Include private posts if the user is logged in. if ( $user_id ) { $status[] = "'private'"; $user_where .= " AND {$wpdb->posts}.post_author = {$user_id}"; } $user_where .= " AND {$wpdb->posts}.post_status IN( " . implode( ',', $status ) . " ) "; $where .= " OR ( {$wpdb->term_taxonomy}.taxonomy IN( 'category', 'post_tag' ) AND {$wpdb->terms}.name LIKE '%" . esc_sql( get_query_var( 's' ) ) . "%' {$user_where} )"; 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 "{$wpdb->posts}.ID"; } add_filter( 'posts_groupby', 'search_custom_posts_groupby', 10, 2 );
完成後,按更新文件按鈕保存更改。
現在,您的網站訪問者可以按標籤和類別搜索帖子。
啟用按評論內容和作者姓名搜索
要在沒有插件的情況下在您的網站上搜索評論和作者姓名,請將以下代碼添加到主題的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->comments . ' ON ' . $wpdb->posts . '..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( "/\(\s*" . $wpdb->posts . ".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/", "(" . $wpdb->posts . ".post_title LIKE $1) OR (" . $wpdb->comments . ".comment_author LIKE $1) OR (" . $wpdb->comments . ".comment_content LIKE $1)", $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文件中:
/* * ---------------------------------------------------------- * * 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->postmeta. ' ON '. $wpdb->posts . '..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( "/\(\s*" . $wpdb->posts . ".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/", "(" . $wpdb->posts . ".post_title LIKE $1) OR (" . $wpdb->postmeta . ".meta_value LIKE $1)", $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 );
完成後,按編輯器底部的更新文件按鈕以保存更改。
現在您的訪問者可以按自定義字段搜索帖子。
在本文中,您了解瞭如何在沒有插件的情況下在您的網站上創建自定義搜索,以及為什麼使用插件來實現此目標更加方便。
我們希望它能幫助您做出決定並選擇您喜歡在您的網站上使用的方法。
準備好在您的網站上單擊幾下自定義搜索了嗎? 您可以在此處開始使用 SearchWP。
正在尋找一種為您的網站創建自定義主題的方法? 查看我們關於如何創建自定義 WordPress 主題的分步教程。
想要自定義您的搜索結果頁面? 按照我們的如何自定義您的 WordPress 搜索結果頁面指南。