Why not helping your visitors to find what they’re looking for on your blog, by using a cool auto-completion on your search field? To do so, we’ll use WordPress tagcloud, php and ajax.
Please note that even if this code is fully functional, this is an experimentation, and the SQL query isn’t really optimized.
The idea
We will use tags as a list of keyword to suggest to the readers.
When someone will start to type on the search field, we will use Javascript to send a request to a php page which will do the following SQL request SELECT * FROM matable WHERE ‘name’ LIKE ‘$search%’. Via Ajax, we’ll send back the request results to our page, and display it to the visitor.
First part: PHP
The first thing to do is to create a php page. This page will send a request to our WP database and display the tags as a html unordered list.
<?php
if (isset($_POST['search'])) {
$search = htmlentities($_POST['search']);
} else $search ='';
$db = mysql_connect('localhost','root',''); //Don't forget to change
mysql_select_db('wp', $db); //theses parameters
$sql = "SELECT name from wp_terms WHERE name LIKE '$search%'";
$req = mysql_query($sql) or die();
echo '<ul>';
while ($data = mysql_fetch_array($req))
{
echo '<li><a href="#" onclick="selected(this.innerHTML);">'.htmlentities($data['name']).'</a></li>';
}
echo '</ul>';
mysql_close();
?>
This code is simple: It receive a POST parameter (The letter(s) typed in the search field by the visitor) and then sends a request to our WP database in order to gets all tags starting with the letter(s) typed in the search box.
Part two: Ajax
Now it’s time to start the client-side programming. We need to code 4 Javascript functions in order to make our auto-completion work:
- Function ajax() will create a XMLHTTPRequest object.
- Function request() will send an Ajax request to our gettags.php file.
- Function return() will return gettags.php contents.
- And the selected() function will update the search field.
Here’s our gettags.js file and the 4 functions needed:
var myAjax = ajax();
function ajax() {
var ajax = null;
if (window.XMLHttpRequest) {
try {
ajax = new XMLHttpRequest();
}
catch(e) {}
}
else if (window.ActiveXObject) {
try {
ajax = new ActiveXObject("Msxm12.XMLHTTP");
}
catch (e){
try{
ajax = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {}
}
}
return ajax;
}
function request(str) {
//Don't forget to modify the path according to your theme
myAjax.open("POST", "wp-content/themes/openbook-fr/gettags.php");
myAjax.onreadystatechange = result;
myAjax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
myAjax.send("search="+str);
}
function result() {
if (myAjax.readyState == 4) {
var liste = myAjax.responseText;
var cible = document.getElementById('tag_update').innerHTML = liste;
document.getElementById('tag_update').style.display = "block";
}
}
function selected(choice){
var cible = document.getElementById('s');
cible.value = choice;
document.getElementById('tag_update').style.display = "none";
}
Part three: Editing your theme
Now that we have our php and javascript ready, we can edit the searchform.php file from your WP theme:
Your searchform.php file should look like this:
<form method="get" id="searchform" action="<?php bloginfo('url'); ?>/">
<div>
<input type="text" value="<?php the_search_query(); ?>" name="s" id="s" />
<input type="submit" id="searchsubmit" value="Search" />
</div>
</form>
We have to add a div, which will display the received data from the request, as well as a Javascript event on the search form:
<form method="get" id="searchform" action="<?php bloginfo('url'); ?>/">
<div>
<input type="text" value="<?php the_search_query(); ?>" name="s" id="s" onkeyup="request(this.value);"/>
<input type="submit" id="searchsubmit" value="Search" class="button" />
</div>
<div id="tag_update"></div>
</form>
Final part: CSS
Due to the fact that every theme use different color schemes, this is only an example. Anyways, I thought it could be a good start:
#tag_update {
display: block;
border-left: 1px solid #373737;
border-right: 1px solid #373737;
border-bottom: 1px solid #373737;
position:absolute;
z-index:1;
}
#tag_update ul {
margin: 0;
padding: 0;
list-style: none;
}
#tag_update li{
display:block;
clear:both;
}
#tag_update a {
width:134px;
display: block;
padding: .2em .3em;
text-decoration: none;
color: #fff;
background-color: #1B1B1C;
text-align: left;
}
#tag_update a:hover{
color: #fff;
background-color: #373737;
background-image: none;
}
That’s all. You now have a very nice auto-completing search form! If you have any questions, feel free to leave a comment below.













There Are 26 Responses So Far »
Pingback: How to: Create an Ajax-based Auto-completing Search Field for your Wordpress Theme « Rich Internet Applications
Pingback: links for 2008-09-10 « Tom Altman’s Wedia Conversation
Pingback: How To: creiamo un autocompletamento in Ajax nel motore di ricerca di Wordpress! - Geekissimo
Pingback: WordPress Weekend Resources - September 12, 2008 | Theme Lab
Pingback: Links da Semana: Logos para Wordpress, Pesquisa em Ajax e etc | Wordpress Themes
Pingback: Ajax: Create an Ajax-based Auto-completing Search Field for your Wordpress Them | bloground - Blogging resources, themes and plugins for your development
Pingback: 30+ (More) Most Wanted Wordpress Tips, Tricks and Hacks | Wordpress
Pingback: 30+??????WordPress????? | ??|??
Pingback: HackWordPress.com | CNET.ro
Pingback: Como crear un formulario de busqueda autocompletable con Ajax para wordpress | Labrys
Pingback: Collection of WordPress Hacks | WordPress Hacks
Pingback: pligg.com
Pingback: You are now listed on FAQPAL
Pingback: Top tutorials week ending 02/21/09
Pingback: 70 Very Useful Wordpress Hacks & Tricks » De Web Times - Sharing Useful Resources.
Pingback: DSergio.com – Enlaces de interes #01
Pingback: Ajax search box -creaza in Wordpress autocomplete la casuta de cautare
Pingback: 100+ Awesome Resource list for Wordpress | WebSenseLogic
Pingback: Top 10 WordPress Hacks of All Time | Bitmag
Pingback: Top 10 WordPress Hacks of All Time
Pingback: Resources and links – 1 April 2011
Pingback: 10 Facebook Hacks For The Bloggers – Techs Blog