📅  最后修改于: 2023-12-03 15:06:01.325000             🧑  作者: Mango
WordPress搜索是网站中必不可少的功能之一。搜索功能可以帮助用户快速找到自己需要的文章或页面。而一个好的搜索功能往往要依靠优秀的代码实现。在本篇文章中,我们将介绍在WordPress中实现搜索功能所需要的代码片段。
首先,我们需要在网站中添加一个搜索表单。在WordPress中,可以使用get_search_form()
函数获取搜索表单的HTML代码。
<?php get_search_form(); ?>
但这种方式所生成的HTML代码可能无法满足我们的需求,因此我们可以使用自定义的搜索表单。
<form role="search" method="get" id="searchform" action="<?php echo home_url('/'); ?>">
<input type="text" value="" name="s" id="s" placeholder="Search...">
<input type="submit" id="searchsubmit" value="Search">
</form>
上面的代码中,home_url()
函数会返回网站的主页地址,s
是查询参数,placeholder
属性定义了输入框的提示文字。
在WordPress中,搜索结果页的默认模板是search.php
。当用户在搜索框中输入关键字并提交时,WP会自动使用该模板呈现搜索结果。
<?php if (have_posts()) : ?>
<h2 class="page-title"><?php printf(__('Search Results for: %s', 'textdomain'), get_search_query()); ?></h2>
<?php while (have_posts()) : the_post(); ?>
<!-- The loop -->
<?php endwhile; ?>
<?php else : ?>
<h2 class="page-title"><?php _e('Nothing Found', 'textdomain'); ?></h2>
<p><?php _e('Sorry, but nothing matched your search criteria. Please try again with some different keywords.', 'textdomain'); ?></p>
<?php get_search_form(); ?>
<?php endif; ?>
上面的代码会先判断是否有搜索结果。若有,则输出搜索关键字及搜索结果;若没有,则输出提示信息以及搜索表单。
如果想要修改默认的搜索结果模板,可以使用PHP或者WP的模板标签来实现。以下是一些常见的模板标签:
the_title()
输出当前文章或页面的标题。
<h2 class="entry-title"><a href="<?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a></h2>
the_excerpt()
输出当前文章或页面的摘要。
<div class="entry-summary">
<?php the_excerpt(); ?>
</div>
the_content()
输出当前文章或页面的正文内容。
<div class="entry-content">
<?php the_content(); ?>
</div>
get_the_post_thumbnail()
输出当前文章或页面的特色图片。
<?php if ( has_post_thumbnail() ) : ?>
<a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
<?php echo get_the_post_thumbnail(); ?>
</a>
<?php endif; ?>
如果要想对搜索页面的查询结果进行自定义排序、排除某些类型的内容等操作,可以使用WP提供的过滤器pre_get_posts
来实现。以下是一个例子:
function custom_search_filter($query) {
if ( ! is_admin() && $query->is_search() && $query->is_main_query()) {
// 排除某些类型的内容
$query->set('post_type', array('post', 'page'));
// 自定义按发布时间降序排列
$query->set('orderby', 'date');
$query->set('order', 'DESC');
}
}
add_action('pre_get_posts', 'custom_search_filter');
上面的代码会排除attachment
类型的内容,并按发表时间降序排序。
到此为止,我们已经介绍了在WordPress中实现搜索功能所需要的基本代码片段。希望这篇文章对您有所帮助。