Ajax-based Auto-completing Search Field for your WordPress Theme
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.

Your searchform.php file should look like this:
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.<?phpThis 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.
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();
?>
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.
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'); ?>/">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:
<div>
<input type="text" value="<?php the_search_query(); ?>" name="s" id="s" />
<input type="submit" id="searchsubmit" value="Search" />
</div>
</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 {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.
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;
}
Post a Comment
Post a Comment