17713433920 info@mac163.com

我们都知道默认的WordPress搜索功能不是很好,或者至少不如Google好,但是有一些技巧可以帮助改善搜索结果。这篇文章将向您展示将搜索结果限制为特定帖子类型或类别的不同方法,以及如何更改每页的默认数量或搜索结果。

按类别限制WordPress搜索结果

您可以使用以下几种方法来按类别限制搜索结果,这对于我们这样的网站非常有用,该网站包含主题,插件和博客等部分。

1.在Searchform.php中使用隐藏的输入字段

这是我目前在WPExplorer.com上使用的方法,因此当人们搜索主站点时,他们只会从“ WordPress主题”类别中获得搜索结果。您需要做的就是在您的searchform.php中添加一个隐藏的输入,其ID为“ cat”,值的类别ID为。

基本的searchform.php

<form method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>">
    <input type="text" size="16" name="s" value="Search"  />
    <input type="submit" value="Go" />
</form>

将以下内容添加到ID为5的类别中

<input type="hidden" name="cat" id="cat" value="5" />

完整代码

<form method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>">
    <input type="hidden" name="cat" id="cat" value="5" />
    <input type="text" size="16" name="s" value="Search"  />
    <input type="submit" value="Go" />
</form>

2.向您的Search.php文件添加查询语句

将搜索结果限制为特定类别的另一种有用的方法是,在if语句之前,将查询添加到search.php文件中。

在搜索中包括类别

通过在查询中使用正ID,您可以定义要在搜索结果中显示的类别(显示ID为1,2和3的类别)。

<?php
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
query_posts( "s=$s&paged=$paged&cat=1,2,3" );
?>

从搜索中排除类别

或者,您可以使用否定ID从搜索页面中排除某些类别(排除ID为7的类别)

<?php
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
query_posts( "s=$s&paged=$paged&cat=-7" );
?>

从搜索页面中排除页面

您可以通过以下几种方式来限制搜索结果以从结果中排除页面并仅显示帖子。

使用功能

只需将以下函数插入到functions.php文件中

// Remove pages from search results
function exclude_pages_from_search($query) {
    if ( $query->is_main_query() && is_search() ) {
        $query->set( 'post_type', 'post' );
    }
    return $query;
}
add_filter( 'pre_get_posts','exclude_pages_from_search' );

在Search.php文件中使用条件

从search.php文件中删除页面的另一种方法是在“ while(have_posts())”之后插入条件。如果您使用的是第三方主题,则不建议这样做,因为如果以后更新主题,您将丢失所做的编辑,如果它是您自己的自定义主题,那就可以了。

<?php
if ( have_posts() ) : while ( have_posts() ) : the_post();
   // Exclude pages from the loop
   if ( is_search() && ( $post->post_type=='page' ) ) {
       continue;
   } ?>

排除一个或多个特定页面

您还可以通过使用functions.php文件中添加的以下代码,从搜索结果页面上的ID中排除特定的帖子/页面。只需更改ID的数组即可包含您要排除的页面或帖子的ID。

// Exclude specific posts/pages from search
function exclude_pages_from_search($query) {
	if ( $query->is_main_query() && is_search() ) {
		$exclude_ids = array( 7, 19 , 21 ); // Array of the ID's to exclude
		$query->set( 'post__not_in', $exclude_ids );
	}
	return $query;
}
add_filter( 'pre_get_posts','exclude_pages_from_search' );

将搜索限制为帖子类型

在WordPress中使用端口类型的原因之一是因为您不希望在Feed或主wp循环中使用这些端口类型,这就是为什么它们非常适合滑块,推荐书,服务等之类的原因。但是,您的自定义帖子可能仍会出现在搜索结果页面中。

1.从搜索结果中排除自定义帖子类型

要从搜索结果中排除自定义帖子,您要做的就是在定义自定义帖子时设置以下参数(更多信息):

'exclude_from_search' => true

2.在搜索表单中使用隐藏字段仅显示特定自定义帖子类型的帖子

另外,如果您要设置高级搜索表单(仅搜索指定的自定义帖子类型),则可以使用与限制类别相同的方式在搜索表单中使用隐藏字段。

<input type =“ hidden” name =“ post_type” value =“ portfolio” />

这个额外的字段将放在您的搜索表单中,您只需用您自己的自定义帖子类型名称替换显示“投资组合”的地方即可。如果您网站上的某个部分使用自定义帖子类型,并且希望用户只能搜索这些特定帖子,则此方法非常有用。

更改每页结果数

默认情况下,WordPress使用在“设置”>“阅读”(博客页面最多显示…)下定义的数字来定义在搜索结果页面上显示多少个结果。如果您想在搜索页面上显示更多,更少或无限的结果,可以使用以下代码:

// Alter search posts per page
function myprefix_search_posts_per_page($query) {
    if ( $query->is_search ) {
        $query->set( 'posts_per_page', '10' );
    }
    return $query;
}
add_filter( 'pre_get_posts','myprefix_search_posts_per_page' );

此代码将放在您的functions.php文件中。如果与其他开发人员的主题一起使用,最好在您的子主题中使用。该代码会将您的搜索结果设置为每页“ 10”。您可以将号码更改为任何所需的号码。为使搜索结果不受限制,请使用-1。

高级/更好的搜索

默认情况下,WordPress根据您的帖子和页面中的任何内容进行搜索。可以通过函数来​​更改搜索的工作方式,但这相当复杂,因此,如果您想更改搜索的实际工作方式(搜索的内容),可以考虑使用“ WP扩展搜索 ”之类的插件。插入。单击下面的横幅将其检出,或在您的WordPress仪表板中的“插件”>“添加新”下进行搜索。

WordPress更好的搜索
WordPress更好的搜索

如果您想按元,类别,标签,术语,标题等进行搜索,此插件将使您能够更好地控制默认搜索。您可以在搜索中包括或排除某些帖子类型,排除早于特定日期的帖子,更改搜索结果中显示的项目数等等!


微信二维码

微信扫描二维码联系我们!
我们在微信上24小时期待你的声音
提供外贸路由器设备产品,轻松翻墙,解答:WP主题推荐,WP网站建设,Google SEO,百度SEO,专业服务器环境搭建等!


需要提供WordPress主题/插件的汉化服务可以随时联系我们!另外成品WordPress网站以及半成品WordPress网站建设,海外Google SEO优化托管服务,百度SEO优化托管服务,Centos/Debian服务器WP专用环境搭建,WP缓存服务器搭建,我们都是你的首选,拥有多年WP开源程序服务经验,我们一直在坚持客户体验,没有最好,只有更好!
回到顶部