自定义和扩展WordPress搜索功能

二月 14
磊子 2012年 11 条评论

今天在做一个WordPress项目的时候,客户要求对wordpress默认的搜索功能进行修改,要求按照作者,按照文章标题,以及按照文章内容,这三个条件进行搜索。实现起来也比较简单,为了防止以后会用到所以来总结一下。

首先说下添加的方法,一是自己创建一个搜索框出来,二是使用wordpress默认的搜索框。代码如下:

<?php get_search_form(); ?> //直接使用默认搜索框放到你需要显示的地方即可

<form method="get" id="searchform" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input name="s" id="s" type="text" class="text" />
<input id="searchsubmit" type="submit" class="submit" value=" " />
</form>
//自己手动创建,需要注意的是里面的name="s" id="s" 这个是必须有的,而且是不能改的。

//如果改了的话wordpress就获取不到你要搜索的内容了。

添加好之后,你需要创建一个search.php文件出来,用来显示搜索内容,如果不创建它会在index.php里面显示,不过建议大家创建出来便于自己定义。创建好之后就可以在里面添加显示代码。默认的显示方法是

<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
<div><a href="<?php  echo get_permalink($post->ID); ?>"><?php the_title(); ?></a></div>
<?php endwhile; ?>
<?php else : ?>

<article>
<header class="entry-header">
<h1 class="entry-title"><?php _e( '没有找到该文章', 'leizi' ); ?></h1>
</header>

<div class="entry-content">
<p><?php _e( '抱歉没有找到该文章', 'leizi' ); ?></p>
<?php get_search_form(); ?>
</div>
</article>
<?php endif; ?>

如果你想自己定义搜索显示内容,不使用默认显示方法。下面是磊子自己简单写了一段。

<form method="get" id="searchform" action="<?php bloginfo('home'); ?>">
<div style=""><input name="s" id="s" type="text" /></div>
<div style="width:55px;"><input id="searchsubmit" type="submit" value=" " /></div>
<div></div>
<div><label><input value="title" name="sosearch" type="radio" checked="checked" />按标题</label> <label><input value="users" name="sosearch" type="radio" />按作者</label> <label><input value="posts" name="sosearch" type="radio" />按全文</label></div>
</form>

//上面这一段放到需要显示的地方。下面这一段是放在search.php文件里面

<?php
$resault = $_GET['s']; //获取搜索内容
$tiaoj = $_GET['sosearch']; //获取搜索条件,上面写到按照标题,作者,全文
if($tiaoj == "users")
{
  //通过搜索条件来判断显示的内容,第一个是按文章作者搜索显示	

        $user_info = $wpdb->get_results("SELECT * FROM $wpdb->users WHERE display_name like '%".$resault."%'");
	if(!empty($user_info))
	{
		foreach($user_info as $key => $val)
		{
			$posts_info = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE 	post_type = 'post' and post_status = 'publish' and post_author = '".$val->ID."'");

			foreach($posts_info as $k=>$v)
			{
?>
			   <li><span><?php the_time('Y-m-d'); ?></span><a href="<?php echo get_permalink($v->ID); ?>"><?php echo $v->post_title; ?></a></li>
<?php
			}
		}
	}
	else
	{
		echo "<li>抱歉,没有找到符合搜索条件的内容!</li>";
	}
}
elseif($tiaoj == "title")
{
        //按照文章标题进行显示

	$posts_info = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE 	post_type = 'post' and post_status = 'publish' and post_title like '%".$resault."%'");
	if(!empty($posts_info))
	{
		foreach($posts_info as $k=>$v)
		{
?>
		   <li><span><?php the_time('Y-m-d'); ?></span><a href="<?php echo get_permalink($v->ID); ?>"><?php echo $v->post_title; ?></a></li>
<?php
		}
	}
	else
	{
		echo "<li>抱歉,没有找到符合搜索条件的内容!</li>";
	}
}
elseif($tiaoj == "posts")
{
        //按照文章内容进行显示

	$posts_info = $wpdb->get_results("SELECT * FROM $wpdb->posts WHERE 	post_type = 'post' and post_status = 'publish' and post_content like '%".$resault."%'");
	if(!empty($posts_info))
	{
		foreach($posts_info as $k=>$v)
		{
?>
		    <li><span><?php the_time('Y-m-d'); ?></span><a href="<?php echo get_permalink($v->ID); ?>"><?php echo $v->post_title; ?></a></li>
<?php
		}
	}
	else
	{
		echo "<li>抱歉,没有找到符合搜索条件的内容!</li>";
	}
}

大概效果:

以上就是磊子通过使用数据库语句进行模糊搜索然后按照条件来进行显示。不过这里还需要一些改进的地方,比如添加分页,还有就是其他更简单的方法,这个需要大家集思广益,提出更好的方法和建议,当然了插件就不需要啦,呵呵!

» 版权所有©转载必须以链接形式注明作者和原始出处:磊子的博客 » 自定义和扩展WordPress搜索功能
» 地址:( Ctrl+C 复制 )
» 如果对本站感兴趣,请到网站右下方订阅本站,将为你带来更多精彩和实用的文章
» 如果您对这篇文章感兴趣,不妨小小的 捐助(Donate)一下博主吧,不管多少都是对博主最大的支持和鼓励哟,博主-磊子感谢大家的支持!!!

11 条留言 其中:访客:7 条, 博主:4 条

  1. 博主您好 请教一下 我用的是自定义栏目,类似于标签的那种,应该如何写搜索条件呢。

  2. 王法说:

    求助,像这样怎么分页啊?

  3. 大鹏说:

    搜索结果不能分页,能让它分页吗

  4. yehaoran说:

    我的wordpress搜索功能,不管搜索什么,结果都跳转到404页面,请教博主这是怎么回事啊?

    • 磊子说:

      跳转的404页面? 你的搜索页面是否创建好了呢? 还有你把404页面的文件先注释或者删掉看看是什么效果。

  5. 求索说:

    磊子输出的结果怎么排序,现在输出后最新的文章在最后面,能不能控制搜索结果的顺序,让最新的文章显示在最上面 :?:

    • 磊子说:

      这个你可以在SQL语句上面添加排序order by desc 这样搜索出来的内容就排序好了。

  6. 妹子控说:

    这个确实不错

  7. 好方法,不过有点影响美观、、、 :shock:

说点什么吧




wireless earbuds moscow mule mugs bluetooth speakers waterproof camera best wireless earbuds best vacuum cleaner best drugstore foundation best dishwasher best waist trainer wireless headphones best vacuum 0594918 best bluetooth earbuds waterproof bluetooth speaker tattoo cover up action camera
订阅本站