如何在没有插件的情况下在 WordPress 中创建自定义搜索

已发表: 2022-07-25

想知道如何在没有插件的情况下在 WordPress 中创建自定义搜索?

通过在您的网站上自定义搜索,您可以增加网页浏览量、提高销售额并帮助您的访问者更快地找到他们想要的东西。

在本文中,我们将讨论如何在不安装插件的情况下在您的网站上自定义搜索,以及为什么您仍应考虑使用插件来做到这一点。

以下目录可帮助您快速浏览本文:

  • 为什么自定义搜索对您的 WordPress 网站很重要?
  • 在没有插件的情况下创建自定义搜索的缺点
  • 在您的网站上自定义 WordPress 搜索的最简单方法
  • 在没有插件的 WordPress 中创建自定义搜索

让我们开始!

为什么自定义搜索对您的 WordPress 网站很重要?

首先,让我们谈谈您网站上的自定义搜索如何帮助您发展业务。

在您的网站上自定义搜索允许您:

  • 提供更相关的搜索结果。 将您的搜索限制在特定类别以缩小搜索结果并帮助访问者更快地找到他们正在寻找的内容。
  • 获得更多的浏览量和销售额。 通过在搜索结果中宣传特定帖子或产品来提高您的内容可发现性并增加您的收入。
  • 建立忠实的受众。 在您的网站上获得积极搜索体验的访问者更有可能再次返回以探索您的更多内容。
  • 吸引更多来自搜索引擎的流量。 通过帮助访问者更快地找到正确的内容,您可以让他们在您的网站上停留更长时间,这是 Google 的主要排名因素之一。

在我们弄清楚自定义搜索可以为您的业务带来哪些好处之后,让我们来谈谈如果您在没有插件的情况下这样做会带来哪些缺点。

在没有插件的情况下创建自定义搜索的缺点

如果您想在没有插件的情况下在您的网站上创建自定义搜索,您应该考虑几个主要缺点。

1. 它需要编码技巧和深厚的 WordPress 知识

手动自定义站点搜索的主要缺点是它需要丰富的编码经验和对 WordPress 的深入了解。

问题是,WordPress 中没有默认的搜索配置工具。

因此,自定义搜索的唯一方法是修改 WordPress 核心文件和主题代码。

它不方便、耗时且不适合非技术人员。

此外,如果您做错了什么,可能会导致您的网站崩溃,因此在自定义主题文件时应该非常小心。

2. 你将拥有更少的功能

此外,即使您具有广泛的编码技能,您可以在没有插件的情况下添加的自定义搜索功能的数量也是有限的。

例如,您不能使用一组独特的规则添加多个搜索引擎、从搜索中排除特定页面或类别、管理搜索结果的顺序等等。

因此,如果完全控制搜索在您的网站上的工作方式对您至关重要,您应该考虑使用功能强大的 WordPress 搜索插件。

3. 您可能会丢失您的更改

最后,由于在没有插件的情况下自定义搜索需要对站点文件进行编辑,因此在更新主题或 WordPress 版本时所做的所有更改都会丢失。

避免这种情况的最佳方法是使用 WordPress 搜索插件,因为无论您对网站做什么,它都会保留您的设置。

有了这个,让我们来看看如何通过点击几下自定义您的网站上的搜索,而无需编码并且无论您的技术技能如何。

在您的网站上自定义 WordPress 搜索的最简单方法

在 WordPress 网站上自定义搜索的最简单方法是使用 SearchWP 之类的插件。

SearchWP logo

SearchWP 是 30,000 多名网站所有者信任的顶级 WordPress 搜索插件。

其对初学者友好的界面和强大的功能使您即使启动第一个网站也可以完全自定义搜索。

例如,使用 SearchWP,您可以管理 WordPress 应在何处查找匹配项、将搜索限制为特定类型的内容、启用按标签和自定义字段进行搜索等等。

最棒的是,您只需单击几下即可完成大部分此类操作。

您还可以使用 SearchWP 来:

  • 以实时模式显示搜索结果。 在您的网站上启用搜索结果的实时显示,以便您的访问者可以立即导航到他们想要的内容。
  • 跟踪访问者的搜索。 收集有关访问者在您的网站上搜索的内容、最可点击的结果以及其他有价值的数据的数据。
  • 在搜索结果中突出显示搜索词。 通过在搜索结果中突出显示关键字,帮助您的访问者确定他们是否更快地找到了正确的内容。
  • 从搜索中排除特定页面。 通过排除多余的页面和过时的内容来消除您网站上搜索结果中的混乱。

在您了解 SearchWP 为何是最好的 WordPress 搜索插件之后,让我们看看如何使用它来根据您的需要在您的网站上自定义搜索。

第 1 步:安装并激活 SearchWP

第一步是在此处获取您的 SearchWP 副本。

完成后,转到您的 SearchWP 帐户仪表板,然后单击下载

go to the Downloads tab

然后,按下载 SearchWP按钮并将插件保存到您的计算机。

click Download SearchWP

下载后,复制左下角的 SearchWP 许可证密钥。

copy your license key

接下来,您需要在您的网站上安装 SearchWP。 如果您需要帮助,可以按照我们关于安装 WordPress 插件的详细指南进行操作。

在您的网站上启动并运行 SearchWP 后,下一步就是激活您的插件副本。

为此,请转到您的 WordPress 仪表板,然后单击顶部面板SearchWP按钮下的激活许可证

click Activate License

之后,在许可证字段中输入您的许可证密钥,然后按激活

press Activate

激活 SearchWP 副本后,您就可以开始自定义搜索了。

第 2 步:开始自定义搜索

要开始使用,请单击SearchWP设置中的引擎。

go to Engines

您可以在此选项卡上添加、删除和自定义您的搜索引擎。

your search engines

SearchWP 安装后会自动创建默认搜索引擎。

它链接到每个现有的搜索表单,因此通过对其进行自定义,您可以控制搜索在您的网站上的工作方式。

例如,您可以管理搜索源列表、让 WordPress 考虑新的内容属性、将搜索限制为特定类别等等。

使用 SearchWP,您可以添加无限数量的搜索引擎并将它们连接到您网站上的各个搜索表单。

多亏了这一点,您可以针对各种业务需求快速创建自定义搜索表单,并将它们放置在您网站上的任何位置。

由于在本教程中我们希望自定义搜索在整个站点中的工作方式,因此我们将编辑默认搜索引擎。

首先,让我们通过配置搜索源列表来指定 WordPress 将在哪里搜索内容。

管理您的搜索源

要开始使用,请按默认搜索引擎部分下的来源和设置按钮。

click Sources and Settings

在这里,您可以管理 WordPress 应该在哪里搜索匹配项。 默认情况下,它会在PostsPagesMedia文件中进行搜索。

uncheck search sources

要删除搜索源,请取消选中它旁边的框。 例如,让我们将网站上的搜索限制为仅帖子。

为此,我们将取消选中除帖子之外的所有其他来源,然后单击完成以保存更改。

left only Posts search source active

一旦我们建立了我们的搜索源列表,让我们也通过让 WordPress 考虑帖子属性和分类来增强我们的搜索。

配置您的搜索属性

要开始使用,请单击帖子搜索源部分中的添加/删除属性按钮。

click Add Remove attributes

在出现的窗口中,您可以指定希望 WordPress 在执行搜索时考虑的属性和分类法。

add new attributes

要使特定的自定义字段可搜索,请单击自定义字段字段并输入其名称。

click on the Custom Fields field

还有一个Any Meta Key快捷方式,通过添加它,您可以一次搜索所有现有的搜索字段。

click Add Any Meta key

添加完自定义字段后,我们还可以制作 WordPress 索引分类法。

在 WordPress 中,分类法是一种对内容和数据进行分类的方法。 例如,它可以是帖子类别、标签、格式或其他内容。

要使新分类法可搜索,请单击分类法字段并选择所需的分类法。

click on the Taxonomies field

例如,让我们让 WordPress 在执行搜索时考虑发布标签。 为此,请从下拉菜单中选择标签选项。

choose the Tags taxonomy

您还可以通过取消选中它们旁边的框来使 WordPress 忽略默认的帖子属性,例如TitleContentSlugExcerpt

uncheck the default attributes

完成管理帖子搜索源属性后,按完成保存更改。

press Done

现在,让我们看看如何缩小搜索范围,为访问者提供更相关的结果。

将搜索限制为特定的帖子类别

要开始,请按编辑规则按钮。

click Edit Rules

然后,单击添加规则

click Add Rule

您可以在此处添加 WordPress 过滤搜索结果内容的规则。

there are no rules by default

例如,您可以添加规则以从搜索中排除特定类别,反之亦然,将搜索限制在这些类别中。

假设我们希望将测试站点上的搜索限制为“新闻”类别。

为此,首先确保选择Only show entries if:选项和Categories分类。

limit search to a specific category

然后在最右边的字段中输入您想要限制搜索的类别的名称。 在我们的例子中,它将是News

specify a category

完成自定义搜索引擎规则后,单击完成以保存更改。

click Done to save your rules

当您对自定义搜索的方式感到满意时,您就可以进入最后一步并保存搜索引擎了。

保存您的搜索引擎

为此,请按 SearchWP 仪表板右上角的保存引擎

click Save Engines

然后单击重建索引以使 WordPress 重新索引您的所有内容并应用新的搜索引擎设置。

click Rebuild Index

而已。 您无需编写任何代码即可完全根据您的需要定制搜索。

让我们测试您的新搜索,以确保它可以根据您的自定义设置。

第 3 步:测试您的新搜索

要开始,请访问您的网站并执行测试搜索。 例如,由于我们使帖子标签可搜索,让我们尝试仅通过其标签来查找帖子。

在我们的测试站点上,我们有一个名为“New WordPress Features”的帖子,其中包含“Updates”标签。

让我们通过这个标签搜索,看看我们是否能找到我们的帖子。

press Find Results

尽管标题、摘录或内容中没有“更新”一词,我们还是找到了该帖子。

we found the post

这意味着我们的搜索引擎现在在查找匹配项时会考虑帖子标签。

我们还要确保我们网站上的搜索现在仅限于“新闻”类别。

为此,我们将搜索“WordPress”,因为我们在其他类别中有许多与 WordPress 相关的帖子。

make another search

您可以看到,我们得到的搜索结果中只显示了来自News类别的帖子。

we found the right posts

这意味着我们添加到搜索引擎中的规则,即 WordPress 应该只在新闻中搜索,可以正常工作。

因此,您刚刚学会了自定义搜索的最简单方法。 现在让我们看看如何在不使用插件的情况下做到这一点。

在没有插件的 WordPress 中创建自定义搜索

要在没有插件的情况下自定义搜索,您需要对主题进行编辑。

最安全的方法是为您在网站上使用的当前主题创建一个子主题。

这样,当您更改子主题时,您的父主题保持不变,让您可以在出现严重错误时快速切换到它。

另外,拥有子主题可以让您在不丢失更改的情况下更新父主题。 有关如何创建子主题的更多详细信息,请查看如何创建子主题教程。

创建并激活子主题后,您就可以开始自定义搜索了。

首先,导航到 WordPress 仪表板中的外观 » 主题文件编辑器

go to Theme Files Editor

然后,在右侧面板中找到functions.php文件并单击它。

click the function file

之后,根据您要在您的网站上搜索的自定义内容,按照以下说明进行操作。

启用按标签和类别搜索帖子

要在没有插件的情况下在您的网站上搜索帖子标签和类别,请将以下代码添加到主题的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 );

完成后,按更新文件按钮保存更改。

press Done

现在,您的网站访问者可以按标签和类别搜索帖子。

启用按评论内容和作者姓名搜索

要在没有插件的情况下在您的网站上搜索评论和作者姓名,请将以下代码添加到主题的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 );

完成后,单击编辑器底部的更新文件按钮以保存更改。

click Done

现在您的访问者可以通过评论内容和作者姓名进行搜索。

通过发布自定义字段启用搜索

要在没有插件的情况下在您的网站上搜索自定义字段,请将以下代码添加到主题的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 );

完成后,按编辑器底部的更新文件按钮以保存更改。

press Done

现在您的访问者可以按自定义字段搜索帖子。

在本文中,您了解了如何在没有插件的情况下在您的网站上创建自定义搜索,以及为什么使用插件来实现此目标更加方便。

我们希望它能帮助您做出决定并选择您喜欢在您的网站上使用的方法。

准备好在您的网站上单击几下自定义搜索了吗? 您可以在此处开始使用 SearchWP。

正在寻找一种为您的网站创建自定义主题的方法? 查看我们关于如何创建自定义 WordPress 主题的分步教程。

想要自定义您的搜索结果页面? 按照我们的如何自定义您的 WordPress 搜索结果页面指南。