<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Richard Shepherd &#187; Web</title>
	<atom:link href="http://www.richardshepherd.com/category/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.richardshepherd.com</link>
	<description>Making the web. Better looking.</description>
	<lastBuildDate>Fri, 04 Jun 2010 18:03:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>This isn&#8217;t one of those blogs&#8230;</title>
		<link>http://www.richardshepherd.com/this-isnt-one-of-those-blogs/</link>
		<comments>http://www.richardshepherd.com/this-isnt-one-of-those-blogs/#comments</comments>
		<pubDate>Fri, 04 Jun 2010 17:54:08 +0000</pubDate>
		<dc:creator>richardshepherd</dc:creator>
				<category><![CDATA[Random]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.richardshepherd.com/?p=1273</guid>
		<description><![CDATA[(Flickr image from mar00ned) You know how there are those blogs that are updated regularly, and they have wonderful tutorials on everything? They keep you up to date with the latest trends. They have lots of regular commenters and a community of followers and evangelists? Yeah. This isn&#8217;t one of those blogs. I barely have [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.richardshepherd.com/wpblog/wp-content/uploads/2010/06/defective.jpg"><img class="aligncenter size-full wp-image-1276" title="defective" src="http://www.richardshepherd.com/wpblog/wp-content/uploads/2010/06/defective.jpg" alt="" width="500" height="338" /></a></p>
<p style="text-align: right;"><span style="font-size: x-small;">(Flickr image from </span><a href="http://www.flickr.com/photos/mar00ned/183189125/" target="_blank"><span style="font-size: x-small;">mar00ned</span></a><span style="font-size: x-small;">)</span></p>
<p>You know how there are those blogs that are updated regularly, and they have wonderful tutorials on everything? They keep you up to date with the latest trends. They have lots of regular commenters and a community of followers and evangelists?</p>
<p>Yeah. This isn&#8217;t one of those blogs. I barely have time to brush my teeth in the morning, and I certainly don&#8217;t have time to log in every evening and write something mega-awesome and valuable. Besides, there are plenty of those blogs out there and I encourage you to find them.</p>
<p>No, this is just a sporadic catch up with what&#8217;s going on with me. If I stumble across something I find useful then I&#8217;ll drop in a piece about it, and if you leave a comment or a question I&#8217;ll try to get back to you.</p>
<p>For a current run down on my brain, check out my <a href="http://richardshepherd.tumblr.com/">Tumblog</a>.</p>
<p>If you want a stream of my nonsense, I&#8217;m on <a href="http://twitter.com/richardshepherd">Twitter</a>.</p>
<p>If you want to read something useful, check out my articles for <a href="http://carsonified.com/blog/author/richardshepherd/">Think Vitamin</a>.</p>
<p>And if you&#8217;re wondering about this lovely theme, it&#8217;s from <a href="http://www.woothemes.com/themes/" target="_blank">WooThemes</a>.</p>
<p>So hang around and enjoy yourself, but if this place is pointless then don&#8217;t blame me :)</p>
<p>rich</p>
]]></content:encoded>
			<wfw:commentRss>http://www.richardshepherd.com/this-isnt-one-of-those-blogs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The first Panda Preview</title>
		<link>http://www.richardshepherd.com/the-first-panda-preview/</link>
		<comments>http://www.richardshepherd.com/the-first-panda-preview/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 11:28:56 +0000</pubDate>
		<dc:creator>richardshepherd</dc:creator>
				<category><![CDATA[Creativity]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[thePandaSays]]></category>

		<guid isPermaLink="false">http://www.richardshepherd.com/?p=1211</guid>
		<description><![CDATA[The Pandas are getting ready, slowing positioning themselves for launch. Never before have so many Pandas worked so hard on a web app, crafting every inch with the finest bamboo their chubby little paws can carry. Here&#8217;s a sneak peak :)]]></description>
			<content:encoded><![CDATA[<p>The Pandas are getting ready, slowing positioning themselves for launch. Never before have so many Pandas worked so hard on a web app, crafting every inch with the finest bamboo their chubby little paws can carry.</p>
<p>Here&#8217;s a sneak peak :)</p>
<p style="text-align: center;"><a href="http://thepandasays.com"><img class="shadow-border size-full wp-image-1212 aligncenter" src="http://www.richardshepherd.com/wpblog/wp-content/uploads/2010/03/panda-preview1.png" alt="panda-preview1" width="350" height="200" /></a><a href="http://thepandasays.com"></a></p>
<p style="text-align: center;"><a href="http://thepandasays.com"><img class="shadow-border size-full wp-image-1213 aligncenter" src="http://www.richardshepherd.com/wpblog/wp-content/uploads/2010/03/panda-preview2.png" alt="panda-preview2" width="350" height="200" /></a></p>
<p style="text-align: center;"><a href="http://thepandasays.com"><img class="shadow-border size-full wp-image-1214 aligncenter" src="http://www.richardshepherd.com/wpblog/wp-content/uploads/2010/03/panda-preview3.png" alt="panda-preview3" width="350" height="200" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.richardshepherd.com/the-first-panda-preview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Custom Fonts in WordPress with Cufon</title>
		<link>http://www.richardshepherd.com/custom-fonts-in-wordpress-with-cufon/</link>
		<comments>http://www.richardshepherd.com/custom-fonts-in-wordpress-with-cufon/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 14:33:10 +0000</pubDate>
		<dc:creator>richardshepherd</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[cufon]]></category>
		<category><![CDATA[custom fonts]]></category>
		<category><![CDATA[font-face]]></category>
		<category><![CDATA[sifr]]></category>
		<category><![CDATA[typekit]]></category>

		<guid isPermaLink="false">http://www.richardshepherd.com/?p=1100</guid>
		<description><![CDATA[A couple of weeks ago I got an email from Ben who said &#8220;I would love to know how you do those header custom fonts &#8230;!!&#8221; Well, without wanting to turn this blog into an episode of Why Don&#8217;t You I thought I should really answer this question on the blog so that others could [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago I got an email from Ben who said</p>
<p><em>&#8220;I would love to know how you do those header custom fonts &#8230;!!&#8221;</em></p>
<p>Well, without wanting to turn this blog into an episode of <a href="http://en.wikipedia.org/wiki/Why_Don%27t_You" target="_blank">Why Don&#8217;t You</a> I thought I should really answer this question on the blog so that others could have a read.<span id="more-1100"></span></p>
<h3>Custom Fonts, different options and the pros and cons</h3>
<p><img class="alignnone size-full wp-image-1144" src="http://www.richardshepherd.com/wpblog/wp-content/uploads/2010/02/cufon.jpg" alt="cufon" width="490" height="122" /></p>
<p>First of all, there has always been some debate on the pros and cons of using custom fonts. In the old days, when people used to use IE6&#8230; What? They still do? Oh. Okay, well a few years ago the only way to use custom fonts on your site was using images. Image replacement has got more sophisticated with CSS techniques, and there&#8217;s a comprehensive round-up of these techniques over at the marvelous <a href="http://css-tricks.com/css-image-replacement/" target="_blank">CSS Tricks</a>. However, this is still <em>image replacement</em> &#8211; in other words, you&#8217;re looking at a graphical representation of the text and not the text itself.</p>
<p><img class="alignright size-full wp-image-1141" src="http://www.richardshepherd.com/wpblog/wp-content/uploads/2010/02/sifr.jpg" alt="sifr" width="192" height="116" />Another popular way to use custom fonts is the flash replacement technique, and <a href="http://www.mikeindustries.com/blog/sifr">sIFR</a> is one of the heavyweights in this area.  Until relatively recently this was the most popular way to get &#8216;real&#8217; fonts on your page with only a couple of drawbacks &#8211; the (slight) increase in page load time, and the fact that some browsers are set up to block flash (adverts).</p>
<p>There is some truth that not <em>everyone</em> has Flash installed but to be honest I&#8217;m not that interested in supporting them. We&#8217;re talking about a handful of visitors a year and, like the 1% (or less) that have JavaScript turned off I simply can&#8217;t justify penalising the other 99%. Sure, make your site IE6 compatible, but don&#8217;t lose any sleep over supporting Flash or Javascript.</p>
<p>Which brings us nicely on to Cufon, which uses Javascript to display custom fonts.</p>
<h4>Javascript? Fonts? How does THAT work?!?!</h4>
<p><img class="size-full wp-image-1138 alignright" src="http://www.richardshepherd.com/wpblog/wp-content/uploads/2010/02/cufon-logo.jpg" alt="Cufon" width="134" height="49" />The special headings on this site (which is an open-source font called Chunk Five) are rendered using <a href="http://cufon.shoqolate.com/generate/" target="_blank">Cufon</a>. For the techinically minded amongst you (and I don&#8217;t count myself in that illustrious bunch ) Cufon converts font paths to VML paths, stores this information as JSON (JavaScript Object Notation) and then renders the fonts using JavaScript. This is clever stuff, but we need not worry about the complex jiggery-pokery.</p>
<p>There are three (fairly) easy steps to WordPress custom font heaven with Cufon:</p>
<ol>
<li>Choose a font, and upload it to the Cufon Generator</li>
<li>Let Cufon work it&#8217;s magic, and then download the new font .js file</li>
<li>Upload this file, and add a couple of bits of javascript to the  of your page</li>
</ol>
<h3>Step One</h3>
<h4>Choose your font</h4>
<p>Step one is easy enough; just place the TrueType/OpenType/Printer Font Binary/PostScript file(s) somewhere handy, like on your desktop. Now you may have downloaded these files from an <a href="http://www.dafont.com">free font library</a>, or you may be copying them from your fonts directory, but you must consider the <em>legal implications</em> of using the font.</p>
<h4>A word on the law</h4>
<p>Do you own the right to use the font? If it&#8217;s a commercial font, have you paid for it? If you downloaded it from somewhere like <a href="http://www.dafont.com/">DaFont</a> you must check the licensing that accompanies the font. In short: keep it legal, kids.</p>
<p>If you&#8217;re not sure if you have permission to use your font then you might want to look at a service like TypeKit which I talk about below!</p>
<p>If you&#8217;re happy with your font then it&#8217;s time to upload it to Cufon, which you do over at <a href="http://cufon.shoqolate.com/generate/" target="_blank">http://cufon.shoqolate.com/generate/</a>.</p>
<h3>Step Two</h3>
<h4>Let Cufon work it&#8217;s magic</h4>
<p>There are a few things to fill in, but they&#8217;re fairly straightforward. Let&#8217;s look at some of the common options&#8230;</p>
<p><img class="alignnone size-full wp-image-1134" src="http://www.richardshepherd.com/wpblog/wp-content/uploads/2010/02/select-the-font.jpg" alt="Select the font" width="466" height="305" /></p>
<p>To save space, and therefore page load time, only choose the styles that you know you&#8217;re going to use. For example, I didn&#8217;t use the Italic or Bold Italic typefaces for  this site which makes the font.js file that little bit smaller (and so load that little bit quicker).</p>
<p><img class="alignnone size-full wp-image-1142" src="http://www.richardshepherd.com/wpblog/wp-content/uploads/2010/02/include-these-glyphs1.jpg" alt="Use the following glyphs" width="487" height="405" /></p>
<p>Take your pick really. You may adopt a &#8216;kitchen sink&#8217; approach and go for the lot (as above) or again just choose those glyphs you know you&#8217;ll need. There are further options such as &#8216;Latin Extended&#8217; and &#8216;Russian&#8217; but you probably won&#8217;t need these. Unless you Russian. Or Roman.</p>
<p><img class="alignnone size-full wp-image-1143" src="http://www.richardshepherd.com/wpblog/wp-content/uploads/2010/02/security1.jpg" alt="security" width="517" height="171" /></p>
<p>This is a <em>really</em> good idea. Restrict use to your own domain to stop thieves, squatters, and copyright issues!</p>
<p><img class="alignnone size-full wp-image-1137" src="http://www.richardshepherd.com/wpblog/wp-content/uploads/2010/02/lets-do-this.jpg" alt="Let's do this" width="178" height="48" /></p>
<p>Finally click the Let&#8217;s do this! button to download your newly created .font.js file!</p>
<h3>Step Three</h3>
<h4>Upload and add some script</h4>
<p>This next bit is entirely down to you &#8211; you&#8217;ll need to upload the .js file to your site somewhere, and make a note of the path. Let&#8217;s assume you upload <strong>ChunkFive_400.font.js</strong> to the <strong>www.example.com/js/</strong> folder. We could include this file in a page using the following:</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">&lt;</span>script src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;/js/ChunkFive_400.font.js&quot;</span> type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></div></td></tr></tbody></table></div>
<p>You need to to do the same with the Cufon file, which you can download from <a href="http://cufon.shoqolate.com/js/cufon-yui.js" target="_blank">http://cufon.shoqolate.com/js/cufon-yui.js</a>. Again, you&#8217;ll need to include this in your page like so:</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">&lt;</span>script src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;/js/cufon-yui.js&quot;</span> type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></div></td></tr></tbody></table></div>
<p>Of course, you could change that path to wherever your Cufon .js files are located. We now need to add them to your site, by placing them somewhere in the section. If you don&#8217;t know how to do this, the easiest way is to enter your WordPress admin area, and go to Appearance &gt; Editor. In the editor, select the file called <strong>header.php</strong> where you&#8217;ll find the head section, and problem see some other javascript files that are included. Just drop your two lines of code in there!</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">&lt;</span>script src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;/js/ChunkFive_400.font.js&quot;</span> type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span> <span style="color: #339933;">&lt;</span>script src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;/js/cufon-yui.js&quot;</span> type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></div></td></tr></tbody></table></div>
<p>One final thing. You need declare which bits of your page to change to the new custom font. Again this is pretty easy to do. If you want all your heading tags to take on this new font you might use something like this:</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; Cufon.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'h1, h2, h3, h4, h5, h6'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></div></td></tr></tbody></table></div>
<p>You could even describe specific areas on the page using jQuery, like so:</p>
<div class="codecolorer-container javascript default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br /></div></td><td><div class="javascript codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span><br />
&nbsp; &nbsp; &nbsp; Cufon.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#introduction'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></div></td></tr></tbody></table></div>
<p>This would make all text in take on the custom font. Cool :)</p>
<p>If you wanted, just take a look at the source code for this page &#8211; that might help explain things a little better!</p>
<h3>Wp-Cufon</h3>
<p>If that sounds too much like hard work, and it <em>really</em> shouldn&#8217;t, you could take a look at a WordPress plugin which does some of the heavy lifting for you. You can find Wp-Cufon at <a href="http://wordpress.org/extend/plugins/wp-cufon/installation/" target="_blank">http://wordpress.org/extend/plugins/wp-cufon/installation/</a> but, to be honest, I encourage you to do this yourself because you&#8217;ll learn so much more about how Cufon works. In fact, even if you use the plug-in you still have to create the .js font file yourself.</p>
<h3>font-face, Typekit and others</h3>
<p>This post is already quite long enough, so I&#8217;m going to postpone looking at @font-face and Typekit for a later post. I&#8217;m going to <em>post</em>pone. Geddit?! I&#8217;ll be here all week&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.richardshepherd.com/custom-fonts-in-wordpress-with-cufon/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPress Custom Fields For Beginners</title>
		<link>http://www.richardshepherd.com/wordpress-custom-fields-for-beginners/</link>
		<comments>http://www.richardshepherd.com/wordpress-custom-fields-for-beginners/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 19:10:32 +0000</pubDate>
		<dc:creator>richardshepherd</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[custom fields]]></category>
		<category><![CDATA[Flickr]]></category>
		<category><![CDATA[get_post_meta]]></category>

		<guid isPermaLink="false">http://www.richardshepherd.com/?p=721</guid>
		<description><![CDATA[This is a tutorial for beginners, and we were all beginners once. To a beginner I remember custom fields looking quite pointless. I couldn&#8217;t quite grasp what they were for. Then, after building a few WordPress sites, I watched an excellent tutorial from Chris Coyier over at CSS Tricks and it really opened my eyes. [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-726" title="fieldsofgold" src="http://s85883.gridserver.com/wpblog/wp-content/uploads/2009/11/fieldsofgold.jpg" alt="fieldsofgold" width="520" height="250" /></p>
<p>This is a tutorial for beginners, and we were all beginners once.</p>
<p>To a beginner I remember custom fields looking quite pointless. I couldn&#8217;t quite grasp what they were for.</p>
<p>Then, after building a few WordPress sites, I watched an excellent tutorial from Chris Coyier over at CSS Tricks and it really opened my eyes. There&#8217;s a link at the bottom of this post to Chris&#8217;s excellent video series. And that link was generated using a custom field.<br />
<span id="more-721"></span><br />
To whet your appetite, here&#8217;s an example of a search function I <a href="http://www.thet.org" target="_blank">built for THET</a> using custom fields. You can select from three options and then WordPress will search through all the posts custom fields until it finds a match.</p>
<p style="text-align: center;"><a href="http://www.thet.org" target="_blank"><img class="size-full wp-image-733 aligncenter" title="thet-search" src="http://s85883.gridserver.com/wpblog/wp-content/uploads/2009/11/thet-search.jpg" alt="thet-search" width="216" height="220" /></a></p>
<p style="text-align: left;">That&#8217;s a really powerful way to harness WordPress custom fields, but we&#8217;re going to start with something a little easier.</p>
<h3 style="text-align: left;">The project</h3>
<p style="text-align: left;">In this tutorial, we&#8217;re going to stick with something simple. All you&#8217;ll need is some basic PHP, together with feeling comfortable working with some WordPress files; specifically single.php which you&#8217;ll find in http://your-wordpress-url.com/wp-content/themes/your-theme/single.php.</p>
<p style="text-align: left;">To keep things both easy <em>and</em> hopefully useful, we&#8217;re going to create a couple of custom fields which display a credit and a link to a flickr image. I&#8217;m using it in this post! The image at the top of the field (custom <em>fields</em>, gettit?!) came thanks to a flickr user called innoxiuss. And if you scroll to the bottom of this page you&#8217;ll see a credit that looks like this:</p>
<p><img class="alignnone size-full wp-image-732" title="attribute" src="http://s85883.gridserver.com/wpblog/wp-content/uploads/2009/11/atrribute.jpg" alt="atrribute" width="218" height="27" /></p>
<p>Well that credit is generated thanks to two custom fields and a little bit of php code.</p>
<h3>What is a WordPress Custom Field?</h3>
<p>Okay. So think of a custom field as a bit of data. It can be anything at all, as long as it&#8217;s an alpha numeric string that can be stored in the WordPress database. So a custom field is not an image, it&#8217;s the URL <em>of</em> the image.</p>
<p>A custom field has two properties, a <strong>name</strong> and a <strong>value</strong>.</p>
<p>For example, the name could be <strong>image </strong>and the value could be <strong>www.yoursite.com/image.jpg</strong>.</p>
<p>But here&#8217;s the thing: <em>it doesn&#8217;t have to make that much sense</em>. The name could be <strong>fruit</strong> and the value could be <strong>apple</strong>. And as pointless as that looks, there are instances where that information could come in useful.</p>
<p>Let&#8217;s take the real world example of the flickr credit on the bottom of this page. There are actually two custom fields in there. The first is the flickr user and the second is the URL of the photo.</p>
<p>Name: <strong>flickr_attribute_url</strong><br />
Value: <strong>http://www.flickr.com/photos/innoxiuss/2665404220/</strong></p>
<p>Name: <strong>flickr_attribute_name</strong><br />
Value: <strong>innoxiuss</strong></p>
<h3>How to add a Custom Field</h3>
<p>Custom fields are added on the Edit Post page, and it looks like this&#8230;</p>
<p><img title="custom-fields-empty" src="http://s85883.gridserver.com/wpblog/wp-content/uploads/2009/11/custom-fields-empty.jpg" alt="custom-fields-empty" width="787" height="236" /></p>
<p>If you can&#8217;t see it, then scroll to the top and under &#8216;Screen Options&#8217; make sure that &#8216;Custom Fields&#8217; is ticked.</p>
<p>All you have to do is click on the &#8216;Enter new&#8217; link (in blue) and enter a name for your data under &#8216;Name&#8217;.</p>
<p>Next enter your data&#8217;s value under &#8216;Value&#8217;.</p>
<p>Finally, click on the &#8216;Add Custom Field&#8217; button and you&#8217;re done. This is what it might look like&#8230;</p>
<p><img class="alignnone size-full wp-image-723" title="adding-custom-field" src="http://s85883.gridserver.com/wpblog/wp-content/uploads/2009/11/adding-custom-field.jpg" alt="adding-custom-field" width="765" height="166" /></p>
<p>You can add as many custom fields as you like, and on some posts I have over 20. Here you can see I&#8217;ve added two, making sure that the names are <strong>unique</strong>.</p>
<p><img title="custom-fields-full" src="http://s85883.gridserver.com/wpblog/wp-content/uploads/2009/11/custom-fields-full.jpg" alt="custom-fields-full" width="766" height="186" /></p>
<p>And that&#8217;s it. You now have two custom fields each containing a snippet of data.</p>
<p>But without rolling up our selves and getting our hands dirty with some PHP, this isn&#8217;t going to do a thing.</p>
<h3>Adding the PHP</h3>
<p>Here&#8217;s the code we&#8217;ll be using. Have a read through and see if it makes sense&#8230;</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
&nbsp; <span style="color: #666666; font-style: italic;">// Check to see if this data (custom field) exists</span><br />
&nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>get_post_meta<span style="color: #009900;">&#40;</span><span style="color: #000088;">$post</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ID</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'flickr_attribute_name'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
&nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// It does, so let's start building our HTML!</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;div class=&quot;flickr_attribute&quot;&gt;'</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// Grab the name of the flickr user from the custom field</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// called 'flickr_attribute_name'</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000088;">$flickr_attribute_name</span> <span style="color: #339933;">=</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;get_post_meta<span style="color: #009900;">&#40;</span><span style="color: #000088;">$post</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ID</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'flickr_attribute_name'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// Grab the url of the flickr user from the custom field</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// called 'flickr_attribute_url'</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #000088;">$flickr_attribute_url</span> <span style="color: #339933;">=</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;get_post_meta<span style="color: #009900;">&#40;</span><span style="color: #000088;">$post</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ID</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'flickr_attribute_url'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// Continue with our HTML, using our new variables</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'photo courtesy of &lt;a href=&quot;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$flickr_attribute_url</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&quot; target=&quot;_blank&quot;&gt;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$flickr_attribute_name</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/a&gt; over at flickr'</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// Close of the DIV and we're done</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/div&gt;&lt;!-- /.flickr attribute --&gt;'</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// End of the get_post_meta if statement</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<p>Okay, let&#8217;s take a moment to go through the code.</p>
<p>First of all, make sure you have created the custom fields in your WordPress post, and that you have the names of the fields exactly right. After all, if there&#8217;s no custom field data there&#8217;s nothing to do!</p>
<p>We check for the data in the first line:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>get_post_meta<span style="color: #009900;">&#40;</span><span style="color: #000088;">$post</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ID</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'flickr_attribute_name'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span></div></td></tr></tbody></table></div>
<p>We use the WordPress function <a href="http://codex.wordpress.org/Function_Reference/get_post_meta">get_post_meta</a> to grab the value for &#8216;flickr_attribute_name&#8217;. If there&#8217;s no data there then this statement will be null and the if won&#8217;t run. If there is something in that custom field then the code will carry on executing.</p>
<p>But hold on a minute, what&#8217;s all that other stuff? Well, the get_post_meta function has the following parameters:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">get_post_meta<span style="color: #009900;">&#40;</span><span style="color: #000088;">$post_id</span><span style="color: #339933;">,</span> <span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$single</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>We set our <strong>$post_id</strong> as the current post using $post->ID. Our <strong>$key</strong> is the name of the custom field which is &#8216;flickr_attribute_name&#8217;. And finally we set <strong>$single</strong> to true.</p>
<p>What is single? If it&#8217;s set to <strong>true</strong> it returns a single result as a string. If it&#8217;s set to <strong>false</strong> it returns multiple results as an array. We&#8217;ll get on to arrays in later tutorials, but for now we&#8217;re going to keep it simple. We only have one value for our flickr credit so we leave it as <strong>true</strong>.</p>
<p>So now we know we have some data, let&#8217;s carry on with the code. We put our content in a DIV so we can style it to our liking</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">// It does, so let's start building our HTML!</span><br />
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;div class=&quot;flickr_attribute&quot;&gt;'</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>And we also create two variables with our custom field data in. The <strong>get_post_meta</strong> function works exactly as we described it above.</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">// Grab the name of the flickr user from the custom field</span><br />
<span style="color: #666666; font-style: italic;">// called 'flickr_attribute_name'</span><br />
<span style="color: #000088;">$flickr_attribute_name</span> <span style="color: #339933;">=</span><br />
<br />
&nbsp; get_post_meta<span style="color: #009900;">&#40;</span><span style="color: #000088;">$post</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ID</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'flickr_attribute_name'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// Grab the url of the flickr user from the custom field</span><br />
<span style="color: #666666; font-style: italic;">// called 'flickr_attribute_url'</span><br />
<span style="color: #000088;">$flickr_attribute_url</span> <span style="color: #339933;">=</span><br />
&nbsp; get_post_meta<span style="color: #009900;">&#40;</span><span style="color: #000088;">$post</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">ID</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'flickr_attribute_url'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Again, note that we set the <strong>$single</strong> parameter to <strong>true</strong>, because we know there is only one bit of data. How do we know this? Well, in this instance it&#8217;s because we&#8217;ve set the custom field up ourselves in the WordPress backend.</p>
<p>Finally, we throw together the rest of the HTML, and close off the <strong>if</strong> statement.</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// Continue with our HTML, using our new variables</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'photo courtesy of &lt;a href=&quot;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$flickr_attribute_url</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&quot; target=&quot;_blank&quot;&gt;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$flickr_attribute_name</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/a&gt; over at flickr'</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; &nbsp;<span style="color: #666666; font-style: italic;">// Close of the DIV and we're done</span><br />
&nbsp; &nbsp; &nbsp;<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;/div&gt;&lt;!-- /.flickr attribute --&gt;'</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; <span style="color: #009900;">&#125;</span> <span style="color: #666666; font-style: italic;">// End of the get_post_meta if statement</span><br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></td></tr></tbody></table></div>
<h3>Bringing it together</h3>
<p>So we have our custom fields in WordPress and we&#8217;ve entered some data into them. We&#8217;ve also created the snippet of easy PHP which&#8217;ll read this data and display it on the page.</p>
<p>But where does it go?</p>
<p>Well, for this snippet I&#8217;ve chosen to put it on the bottom of the <strong>single.php</strong> page in the wp-content folder, as this is the page that displays single posts.</p>
<p>On my page it comes just before the <tags> section, which itself is just before the <strong>comments</strong> bit. But you could put it anywhere you want.</p>
<p>Just boot up your favourite PHP editor (I like Expresso on the Mac and, predictably, Dreamweaver on the PC) and type in the code.</p>
<p>Save your page, upload, and you should have a lovely flickr photo credit.</p>
<h3>What next?</h3>
<p>Don&#8217;t have flickr photos on your page? Well then this could be a bit pointless. But remember, this tutorial should just give you a basic idea of how custom fields work. Sure, you could have put this flickr information in the post itself but as we&#8217;ll see, we can do all kinds of funky things once we have the ability to search custom fields and display data based on their contents.</p>
<p>In the mean time there is some further reading below. Oh, and the further reading is displayed from data in custom fields!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.richardshepherd.com/wordpress-custom-fields-for-beginners/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Simplifying Forms</title>
		<link>http://www.richardshepherd.com/simplifying-forms/</link>
		<comments>http://www.richardshepherd.com/simplifying-forms/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 18:07:52 +0000</pubDate>
		<dc:creator>richardshepherd</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://www.richardshepherd.com/?p=637</guid>
		<description><![CDATA[Sometimes you need to make bold decisions and really shake up conventions to get results. It can be scary, other people might point at you and laugh, but what&#8217;s the point if you&#8217;re not going to try something new?! Here&#8217;s a case in point. This is how the old search forms from one of the [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes you need to make bold decisions and really shake up conventions to get results. It can be scary, other people might point at you and laugh, but what&#8217;s the point if you&#8217;re not going to try something new?!</p>
<p>Here&#8217;s a case in point. This is how the <strong>old search forms </strong>from one of the sites I work on (www.packyourbags.com) used to look:</p>
<p><img class="size-full wp-image-635" title="old-holiday-search" src="http://s85883.gridserver.com/wpblog/wp-content/uploads/2009/08/old-holiday-search1.jpg" alt="old-holiday-search" width="207" height="418" /><img class="size-full wp-image-636" title="Old Search Form" src="http://s85883.gridserver.com/wpblog/wp-content/uploads/2009/08/old-search1.jpg" alt="Old Search Form" width="197" height="395" /></p>
<p><em>(NB. The form on the left has the newer design icons, but the form elements themselves are the same as they were on the old site.)</em></p>
<p>The convention for search forms is to put text above or next to the form field, explaining what the field is for. So we have &#8216;Destination&#8217; before the destination dropdowns and &#8216;Duration&#8217; before the number of nights. It makes complete sense. It&#8217;s logical. It&#8217;s even <em>usable</em>. To an extent&#8230;</p>
<h2>How the competition fares</h2>
<p>But could it be better? I think so. So I went hunting for inspiration and, surprisingly, most other holiday websites follow this convention. In fact, many of the market leaders have awful search forms. Take these examples from Thomas Cook, On The Beach and Direct Line Holidays:</p>
<p><img class="alignnone size-full wp-image-642" title="thomas-cook" src="http://s85883.gridserver.com/wpblog/wp-content/uploads/2009/08/thomas-cook1.jpg" alt="thomas-cook" width="278" height="580" /><img class="alignnone size-full wp-image-641" title="on-the-beach" src="http://s85883.gridserver.com/wpblog/wp-content/uploads/2009/08/on-the-beach1.jpg" alt="on-the-beach" width="324" height="484" /><img class="alignnone size-full wp-image-640" title="direct-line" src="http://s85883.gridserver.com/wpblog/wp-content/uploads/2009/08/direct-line1.jpg" alt="direct-line" width="268" height="451" /></p>
<p>Yuk!</p>
<h2>K.I.S.S.</h2>
<p>How can we simplify this? How can we make it <em>more</em> usable. How can we encourage our users to search. If you look at any of the search forms in this post so far they do the opposite &#8211; they <em>discourage</em> casual browsing because they are, frankly, scary to look at. So many fiddly options. So much text. It&#8217;s worth noting that Direct Line do have a more options/less options toggle &#8211; which is a nice idea. I&#8217;m just not sure they&#8217;ve done it the best way possible.</p>
<p>The fundamental question then is: why do we need all the text?</p>
<p>If we&#8217;re on a holiday website, and a dropdown&#8217;s default value is &#8217;7 nights&#8217;, isn&#8217;t it obvious that the dropdown is for the <em>duration </em>of the stay? If we&#8217;re on a holiday website and the dropdown says &#8216;Spain&#8217; isn&#8217;t it obvious that it&#8217;s a dropdown for <em>destination</em>? And so on, and so on.</p>
<h2>The &#8216;A-ha!&#8217; moment</h2>
<p>And that&#8217;s when it dawned on me. Remove the text. Keep the label tags but hide them with CSS (we still want them there for accessibility). It&#8217;s implied what each form field does. It&#8217;s obvious.  So I removed all the text apart from the adults, infants, and children bit:</p>
<p><img class="aligncenter size-full wp-image-634" title="new-holiday-search" src="http://s85883.gridserver.com/wpblog/wp-content/uploads/2009/08/new-holiday-search1.jpg" alt="new-holiday-search" width="207" height="418" />Each form field is still clear, you can still tell what it does. I changed some of the text in the form fields, so &#8216;+/- 3 days&#8217; became &#8216;give or take 3 days&#8217; for example. It&#8217;s plain English. It&#8217;s simple. It does what it says on the tin. And, I&#8217;d argue, it&#8217;s easier to use and will (we hope!) encourage our users to browse more. We&#8217;ll have to wait a few weeks to get some stats which have any meaning, but the feedback so far as been positive.</p>
<p>Other things I changed included:</p>
<ul>
<li>Adding padding to each element, so the text can breathe inside it&#8217;s little box;</li>
<li>Justified the width of the controls. Although if the date control was the same width as the destination control it would look odd;</li>
<li>Added a light yellow (in-keeping with our brands strong yellow) to &#8216;pop&#8217; the form elements off the page;</li>
<li>Gave the calendar much bigger and bolder icon; and</li>
<li>Introduced plain English in the controls to make them simple and obvious.</li>
</ul>
<p>BTW &#8211; The reason I left in adults, kids and babies is because we want a default setting for adults &#8211; 2 &#8211; and so it needs to say &#8216;adults&#8217; somewhere else. And as soon as we put an &#8216;adults&#8217; label above the control we need to do the same for kids and babies just to maintain some consistency. It&#8217;s not perfect, but it&#8217;s not bad either. I&#8217;d welcome suggestions on how to improve this further!</p>
<h2>A breakable convention</h2>
<p>This is a big step, because it bucks the convention set and adopted by most of the other holiday sites. Conventions often exist for a reason, but I think this one needs to be broken. It may not be rocket science, and there are some much better looking forms out there, but in the context of our market (package h0lidays) we hope this new approach to search forms helps our user find what they want in less time.</p>
<p>Our search form is a work in progress, and there are many other areas on the site which we&#8217;re updating. I&#8217;ll share those with you, and the design process behind them, very soon.</p>
<h2>Compare the old and the new</h2>
<p><img class="alignnone size-full wp-image-635" title="old-holiday-search" src="http://s85883.gridserver.com/wpblog/wp-content/uploads/2009/08/old-holiday-search1.jpg" alt="old-holiday-search" width="207" height="418" /><img class="alignnone size-full wp-image-634" title="new-holiday-search" src="http://s85883.gridserver.com/wpblog/wp-content/uploads/2009/08/new-holiday-search1.jpg" alt="new-holiday-search" width="207" height="418" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.richardshepherd.com/simplifying-forms/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Alternate styling with PHP</title>
		<link>http://www.richardshepherd.com/alternate-styling-with-php/</link>
		<comments>http://www.richardshepherd.com/alternate-styling-with-php/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 13:58:00 +0000</pubDate>
		<dc:creator>richardshepherd</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.richardshepherd.com/?p=624</guid>
		<description><![CDATA[First off, I can&#8217;t take any credit for this. All the credit goes to Paul Denya for the answer, and Elliot Jay Stocks for the question. EJS asked: Does anyone know of a way (with PHP) to add an &#8216;alt&#8217; class to every other &#60;li&#62; in a list? Like how WP does with comments. (He [...]]]></description>
			<content:encoded><![CDATA[<p>First off, I can&#8217;t take any credit for this.</p>
<p>All the credit goes to <a href="http://www.pauldenya.mp/" target="_blank">Paul Denya</a> for the answer, and <a href="http://www.elliotjaystocks.com/" target="_blank">Elliot Jay Stocks</a> for the question.</p>
<p>EJS asked:</p>
<p><img class="alignleft" title="Elliot jay Stocks" src="http://s3.amazonaws.com/twitter_production/profile_images/293523500/twitter_bigger.jpg" alt="" width="73" height="73" /><em>Does anyone know of a way (with PHP) to add an &#8216;alt&#8217; class to every other &lt;li&gt; in a list? Like how WP does with comments.</em></p>
<p>(He did this over at <a href="http://twitter.com/elliotjaystocks/status/2688884863" target="_blank">http://twitter.com/elliotjaystocks/status/2688884863</a>)</p>
<p>http://twitter.com/elliotjaystocks</p>
<p>&nbsp;</p>
<p><img class="alignleft" title="Paul Denya" src="http://gravatar.com/avatar/2db3e81f223c89e4b449734026d62ef8.png?d=http%3A%2F%2Fchi.mp%2Fimages%2Fchimp-thumb.jpg&amp;r=PG&amp;s=180" alt="" width="76" height="76" /></p>
<p>And the answer came back from Paul.</p>
<p><em>&lt;li class=&#8221;&lt;?php foreach((get_the_category()) as $category) { echo $category-&gt;category_nicename . &#8221;; } ?&gt;&#8221;&gt;&lt;/li&gt;</em></p>
<p>&nbsp;</p>
<p>Clever yet simple &#8211; the hallmark of genius!</p>
<p>You can follow them both at @<a href="http://twitter.com/pdenya " target="_blank">pdenya </a>and @<a href="http://twitter.com/elliotjaystocks" target="_blank">elliotjaystocks</a>.</p>
<p>Thanks guys!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.richardshepherd.com/alternate-styling-with-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress, IIS, Permalinks and index.php</title>
		<link>http://www.richardshepherd.com/wordpress-iis-permalinks-and-index-php/</link>
		<comments>http://www.richardshepherd.com/wordpress-iis-permalinks-and-index-php/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 18:12:35 +0000</pubDate>
		<dc:creator>richardshepherd</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[iis]]></category>
		<category><![CDATA[index.php]]></category>
		<category><![CDATA[isapi]]></category>
		<category><![CDATA[permalinks]]></category>

		<guid isPermaLink="false">http://www.richardshepherd.com/?p=592</guid>
		<description><![CDATA[Here&#8217;s the problem: You need to install WordPress on a Windows machine running IIS. I&#8217;d never normally do this, but sometimes you just don&#8217;t have a choice. There are plenty of links out there about how to do this, and the one I referred to most was How To Install WordPress on IIS 6.0. It [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s the problem:</p>
<p>You need to install WordPress on a Windows machine running IIS. I&#8217;d never normally do this, but sometimes you just don&#8217;t have a choice.</p>
<p>There are plenty of links out there about how to do this, and the one I referred to most was <a href="http://www.iisadmin.co.uk/?p=6" target="_blank">How To Install WordPress on IIS 6.0</a>. It is, more or less, straightforward.</p>
<p>However, there&#8217;s an issue with IIS and permalinks.<span id="more-592"></span>The issue is that if you want to take advantage of the WordPress pretty permalinks, you have to suffer a folder in the path called &#8216;index.php&#8217;. So, instead of the rather lovely:</p>
<p><strong>http://www.yourblog.com/yourcategories/the-best-post-in-the-world/</strong></p>
<p>you have to grit your teeth and accept:</p>
<p><strong>http://www.yourblog.com/index.php/yourcategories/the-best-post-in-the-world/</strong></p>
<p>I don&#8217;t know why, I really don&#8217;t. I&#8217;m not that smart. But I did work out how to fix it. It&#8217;s easy enough, but you have to put a couple of rules in the ISAPI ReWrite Engine to deal with the quirks.</p>
<p>First we need to head into our WordPress admin tool, and go to Settings &gt; Permalinks. There, you&#8217;ll see the craft insertion of /index.php/ in the links. We need to create a custom permalink and <em>delete</em> the index.php bit. Just like this&#8230;</p>
<p><img class="alignnone size-full wp-image-598" title="WordPress Permalink Options" src="http://s85883.gridserver.com/wpblog/wp-content/uploads/2009/07/links1.jpg" alt="WordPress Permalink Options" width="504" height="373" /></p>
<p>Now save that off and head over to your .htaccess file &#8211; we need to weave some magic!</p>
<p>At the bottom of this post is the whole file, but the two lines I particularly want to point out are:</p>
<div class="codecolorer-container c default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">RewriteCond <span style="color: #339933;">%</span><span style="color: #009900;">&#123;</span>REQUEST_URI<span style="color: #009900;">&#125;</span> <span style="color: #339933;">!/</span>wp<span style="color: #339933;">-</span>admin<br />
RewriteRule <span style="color: #339933;">^/</span><span style="color: #009900;">&#40;</span>.<span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>$ <span style="color: #339933;">/</span>index\.<span style="color: #202020;">php</span><span style="color: #339933;">/</span>$<span style="color: #0000dd;">1</span> <span style="color: #009900;">&#91;</span>NC<span style="color: #009900;">&#93;</span></div></td></tr></tbody></table></div>
<p>The second line works the juju. It takes the URL from the browser, shoves an /index.php/ into it, and displays the contents. For more on how and why this works, check out <a href="http://www.workingwith.me.uk/articles/scripting/mod_rewrite" target="_blank">http://www.workingwith.me.uk/articles/scripting/mod_rewrite</a> for the basics.</p>
<p>Now the first line is <em>really</em> important, because it tells the server <strong>not</strong> to do this if we&#8217;re in the admin section. If we remove this line, there are all kinds of problems reaching /wp-admin/index.php. Trust me.</p>
<p>I have two other lines in the following code which get rid of index.php from URLS, which stops the google duplicate content issue. They&#8217;re always worth having.</p>
<p>Finally, make sure that wherever your site is hosted, that the correct permissions are set on the wp-admin and wp-content directories and their sub-directories. You must have read/write/modify permissions set for internal user accounts.</p>
<p>If you implement these small tweaks, then your WordPress IIS install should work like a charm.</p>
<p>Good luck!</p>
<p>Here&#8217;s the code:</p>
<div class="codecolorer-container c default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br /></div></td><td><div class="c codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #339933;"># -------------------------------------------------------------------------</span><br />
<span style="color: #339933;"># Kickstart the Rewrite Engine and set initial options</span><br />
<span style="color: #339933;"># -------------------------------------------------------------------------</span><br />
<br />
RewriteEngine On<br />
RewriteCompatibility2 On<br />
RepeatLimit <span style="color: #0000dd;">200</span><br />
RewriteBase<br />
<br />
<span style="color: #339933;"># -------------------------------------------------------------------------</span><br />
<span style="color: #339933;"># WORDPRESS, WINDOWS &amp; ISAPI DOCUMENTATION</span><br />
<span style="color: #339933;"># -------------------------------------------------------------------------</span><br />
<span style="color: #339933;"># These are the WordPress redirects we need in place for a Windows Server</span><br />
<span style="color: #339933;"># running PHP &amp; MySQL</span><br />
<span style="color: #339933;"># We had some issues configuring ISAPI with WordPress and so here are the</span><br />
<span style="color: #339933;"># solutions in case we need them again!!</span><br />
<br />
<span style="color: #339933;"># -------------------------------------------------------------------------</span><br />
<span style="color: #339933;"># PERMISSIONS SETTINGS</span><br />
<span style="color: #339933;"># -------------------------------------------------------------------------</span><br />
<span style="color: #339933;"># The following folders:</span><br />
<span style="color: #339933;"># wp-admin</span><br />
<span style="color: #339933;"># wp-content</span><br />
<span style="color: #339933;"># MUST HAVE read/write/modify permissions set for internal user accounts</span><br />
<br />
<span style="color: #339933;"># -------------------------------------------------------------------------</span><br />
<span style="color: #339933;"># ESSENTIAL WORDPRESS REWRITES</span><br />
<span style="color: #339933;"># -------------------------------------------------------------------------</span><br />
<br />
<span style="color: #339933;"># Redirects 'www.yourblogsite.com/index.php' to 'www.yourblogsite.com/'</span><br />
<br />
RewriteRule <span style="color: #339933;">^/</span>index\.<span style="color: #202020;">php</span>$ <span style="color: #339933;">/</span> <span style="color: #009900;">&#91;</span>NC<span style="color: #339933;">,</span>P<span style="color: #339933;">,</span>R<span style="color: #339933;">=</span><span style="color: #0000dd;">301</span><span style="color: #009900;">&#93;</span><br />
<br />
<span style="color: #339933;"># Rewrite 'www.yourblogsite.com/anything/' to 'www.yourblogsite.com/index.php/anything/'</span><br />
<span style="color: #339933;"># NB. The user does not see this rewrite.</span><br />
<span style="color: #339933;"># Must also go into WordPress &gt; Settings &gt; Permalinks and select 'custom'</span><br />
<span style="color: #339933;"># and then REMOVE 'index.php' from the custom URL it generates</span><br />
<br />
<span style="color: #339933;"># The first line is a condition so it doesn't apply the rule to the wp-admin part of the site</span><br />
<br />
RewriteCond <span style="color: #339933;">%</span><span style="color: #009900;">&#123;</span>REQUEST_URI<span style="color: #009900;">&#125;</span> <span style="color: #339933;">!/</span>wp<span style="color: #339933;">-</span>admin<br />
RewriteRule <span style="color: #339933;">^/</span><span style="color: #009900;">&#40;</span>.<span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>$ <span style="color: #339933;">/</span>index\.<span style="color: #202020;">php</span><span style="color: #339933;">/</span>$<span style="color: #0000dd;">1</span> <span style="color: #009900;">&#91;</span>NC<span style="color: #009900;">&#93;</span><br />
<br />
<span style="color: #339933;"># Finally, redirect 'www.yourblogsite.com/anything/anything/index.php'</span><br />
<span style="color: #339933;"># to 'www.yourblogsite.com/anything/anything/'</span><br />
<br />
RewriteRule <span style="color: #339933;">^/</span><span style="color: #009900;">&#40;</span>.<span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>index\.<span style="color: #202020;">php</span>$ <span style="color: #339933;">/</span>$<span style="color: #0000dd;">1</span><span style="color: #339933;">/</span> <span style="color: #009900;">&#91;</span>NC<span style="color: #339933;">,</span>P<span style="color: #339933;">,</span>R<span style="color: #339933;">=</span><span style="color: #0000dd;">301</span><span style="color: #009900;">&#93;</span><br />
<br />
<span style="color: #339933;"># -------------------------------------------------------------------------</span><br />
<span style="color: #339933;"># END OF ESSENTIAL REWRITES</span><br />
<span style="color: #339933;"># -------------------------------------------------------------------------</span></div></td></tr></tbody></table></div>
<p>Thanks for watching, kids&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.richardshepherd.com/wordpress-iis-permalinks-and-index-php/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Are Twitter followers your friends?</title>
		<link>http://www.richardshepherd.com/are-twitter-followers-your-friends/</link>
		<comments>http://www.richardshepherd.com/are-twitter-followers-your-friends/#comments</comments>
		<pubDate>Sun, 12 Jul 2009 18:33:50 +0000</pubDate>
		<dc:creator>richardshepherd</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.richardshepherd.com/?p=584</guid>
		<description><![CDATA[I was at a concert last weekend at Wembley Stadium which is, if you haven&#8217;t been, H U G E. It was filled to the brim with 80,000 people who had paid good money to see a nameless boyband. I was one of them. :) Not long after the first support act had finished, the [...]]]></description>
			<content:encoded><![CDATA[<p>I was at a concert last weekend at Wembley Stadium which is, if you haven&#8217;t been, H U G E. It was filled to the brim with 80,000 people who had paid good money to see a nameless boyband. I was one of them. :)</p>
<p>Not long after the first support act had finished, the murmurs of a Mexican wave started around the stadium. It was awesome to watch. Each time it went around it grew, until by the third or fourth loop almost everyone was standing up. Watching 80,000 people synchronize themselves, spontaneously, is really quite phenomenal.</p>
<p>How did it start? Why did it start? And why did 80,000 strangers join in &#8211; creating a singularity. A wave.</p>
<p>We are, I think, compelled to join. Ultimately we all want inclusion, not because of any misdiagnosed lack of self confidence (although we all suffer to some degree from that &#8211; except politicians). No. I believe we are compelled to be included, it&#8217;s inherent in our being. We want to join in, to contribute, to be part of something bigger than ourselves.</p>
<p>Isn&#8217;t that what a Mexican wave is? An expression of joy. A chance to be part of something bigger, whilst still retaining our own sense of identity.</p>
<p>It made me think about social media, and it&#8217;s explosion over the last few years. When Michael Jackson dies and the news is broken across Twitter moments after it breaks on TMZ. When CNN, the BBC and others quote Twitter feeds because it&#8217;s the quickest way to get comment and feedback. When we all turn to the internet or our smartphones for confirmation, not from traditional news sources but from trusted bloggers and Twitter accounts, you know it&#8217;s big.</p>
<p>And we all want to be a part of it. We&#8217;re compelled to. Although most people sign up to Twitter, tweet once, and then bugger off, the important part is that they <em>do</em> sign up.</p>
<p>They want to know what Twitter is. They want to be a part of it.</p>
<p>But because social media is so new, because this is such a new way of communicating (if you think that communication began with the grunt of a caveman), most people don&#8217;t quite understand <em>what to do. </em>And so they leave.</p>
<p>Is this a problem with Twitter? Possibly. I think they could redesign their sign up process to single out and hand-hold people who have no idea what it&#8217;s about. Twitter is the medium through which we connect, but like strangers at a party we&#8217;re often dumbstruck when faced with talking to people we don&#8217;t know. Here&#8217;s a question whose answer might make you a millionaire: how can we bridge that gap? How can bridge the gap between the technology that allows us to say hello, and actually saying &#8216;hello&#8217;?</p>
<p>Or look at this another way. Why do we want a bunch of followers we don&#8217;t know to listen to what we&#8217;ve got to say? Is it because it allows us to touch our own version of celebrity? How arrogant are we?!?! I have enough trouble keeping up with the few &#8216;real&#8217; friends I have, let alone telling my Twitter followers what I&#8217;ve been up to. Is Twitter, like Facebook, a substitute for lazy friendship?</p>
<p>Maybe. Twitter, Facebook, email and even texting allows us to engage in one way communication without worrying about what the other person has to say. The great thing about these forms of communication is that we can reply when we want to, and carefully craft what we want to say (and how it&#8217;ll be interpretted). And yet Twitter brings us, <em>almost</em>, full circle. All these forms of communicaiton are in some way instantaneous, but Twitter as a form of communication encourages conversation in real time. It&#8217;s like text messaging on acid, and allows us to join conversations with people that share our interests &#8211; not necessairily close friends.</p>
<p>Many many many years ago, I wrote a paper on how the internet segregates people not by gender, race, religion etc, but by interest, by values. It segregates us by who we really are. In fact, segregates is the wrong word. It does not segregate, it unites.</p>
<p>And perhaps that&#8217;s the point of Twitter. It brings us together, because we are compelled to join in, and it brings us together with those who share our interests and values. They may not be our real friends, but then maybe we can have different types of friends. One type is no better or more valued than the other &#8211; we just need them at different times of the day, week, month, and our life.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.richardshepherd.com/are-twitter-followers-your-friends/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Twitter and Customer Service</title>
		<link>http://www.richardshepherd.com/twitter-customer-service/</link>
		<comments>http://www.richardshepherd.com/twitter-customer-service/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 13:10:10 +0000</pubDate>
		<dc:creator>richardshepherd</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.richardshepherd.com/?p=578</guid>
		<description><![CDATA[I think a lot of people are still trying to work out how to use Twitter for business. We can all let our followers know what we&#8217;re up to, and even forward on useful links to other sites to each other. Some business have been successfully experimenting. Dell, for example, have made over $2m tweeting [...]]]></description>
			<content:encoded><![CDATA[<p><strong>I think a lot of people are still trying to work out how to use Twitter for business.</strong></p>
<p>We can all let our followers know what we&#8217;re up to, and even forward on useful links to other sites to each other. Some business have been successfully experimenting. Dell, for example, have made over $2m tweeting special offers. The company I work for tweets holiday deals, and we can accurately track how many are clicked thanks to <a href="http://bit.ly" target="_blank">bit.ly</a>.</p>
<p>However, I experienced something new last week and it blew me away, despite it being simple and &#8211; dare I say &#8211; basic customer care.</p>
<p>I was having all kinds of problems searching for images on <a title="stock photography" href="http://www.istockphoto.com" target="_blank">iStock</a>. I&#8217;d search all media for a generic term like &#8216;holidays&#8217; and I&#8217;d get no results at all. I thought this was a problem at my end, so I cleared cookies an restarted my browser.</p>
<p>But still nothing. iStock was, as far as I could tell, broken.</p>
<p>I tweeted my frustration, and shortly afterwards a Twitter buddy replied&#8230;</p>
<p><img class="aligncenter" title="Twitter iStock Customer Service 1" src="http://farm4.static.flickr.com/3333/3653219171_19df62e2bd_o.jpg" alt="" width="240" height="126" /></p>
<p>So, it was working for <a href="http://twitter.com/rishil">rishil</a>. Or was it? Moments later rishil added&#8230;</p>
<p style="text-align: center;"><img class="aligncenter" src="http://farm4.static.flickr.com/3402/3654015788_5b78a08390.jpg?v=0" alt="" width="240" height="126" /></p>
<p style="text-align: left;">Wow. So maybe iStock was broken. You&#8217;ll spot the time on that last tweet was 13:49 &#8211; <strong>1:49pm GMT</strong>.</p>
<p style="text-align: left;">Also, notice that rishil is helpfully suggesting another stock photography website (dreamstime.com). This is, of course, bad news for iStock.</p>
<p style="text-align: left;">Less than 30 minutes later, this popped up:</p>
<p style="text-align: left;"><img class="aligncenter" src="http://farm4.static.flickr.com/3087/3654015904_01466e2938.jpg?v=0" alt="" width="240" height="126" /></p>
<p style="text-align: left;">Wow. Technically I guess it&#8217;s not that impressive. Sure, they must monitor every mention of iStock in tweets. But still &#8211; they found the problem (perhaps due to my tweet, perhaps not), fixed it, and then told me about it.</p>
<p style="text-align: left;">That is GREAT customer service. Think about how difficult that would be to replicate in the real world. Or would it? I bet you could do something similar for your customers <em>if</em> they were able to contact you the instant there is a problem.</p>
<p style="text-align: left;">Or, better still, that they <em>knew</em> they should contact you instantly if there is a problem.</p>
<p style="text-align: left;">It gets better. I thank iStock for their speedy response and they get back to me with:</p>
<p style="text-align: left;"><img class="aligncenter" src="http://farm4.static.flickr.com/3581/3653223149_91b1090c5e.jpg?v=0" alt="" width="240" height="126" /></p>
<p style="text-align: left;">A money off coupon may well be self-serving, but it&#8217;s these gestures that help build brand loyalty. Like I&#8217;m ever going to go to dreamstime.com! Or Shutterstock!</p>
<p style="text-align: left;">I sent them another thank you tweet, mentioning their great customer service, and iStock replied with:</p>
<p style="text-align: left;"><img class="aligncenter" src="http://farm4.static.flickr.com/3662/3653219271_478e7ab9ac.jpg?v=0" alt="" width="240" height="126" /></p>
<p style="text-align: left;">I rest my case.</p>
<p style="text-align: left;">There are opportunities for all of us to use Twitter to connect with our customers in an immediate and helpful way. iStock used the system well, and have retained a customer. Not only that, but I&#8217;ve written this post about them!</p>
<p style="text-align: left;">Imagine the good will you could create by reaching out to your customer base and offering them just a little bit more than your competitors.</p>
<p style="text-align: left;">Twitter is not just good fun. It&#8217;s good business too.</p>
<p style="text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://www.richardshepherd.com/twitter-customer-service/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SEO &#8211; Fishing or hunting?</title>
		<link>http://www.richardshepherd.com/seo-fishing-or-hunting/</link>
		<comments>http://www.richardshepherd.com/seo-fishing-or-hunting/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 18:09:44 +0000</pubDate>
		<dc:creator>richardshepherd</dc:creator>
				<category><![CDATA[SEO]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[keywords]]></category>
		<category><![CDATA[search engine optimisation]]></category>

		<guid isPermaLink="false">http://www.richardshepherd.com/?p=558</guid>
		<description><![CDATA[A quick thought: Search Engine Optimisation, in the wrong hands, can turn into fishing. I had a conversation recently about generating a keyword rich page in a highly competitive space. Even if we didn&#8217;t get page one, or two, or three of Google, some people might find the site and then, perhaps, might decide to [...]]]></description>
			<content:encoded><![CDATA[<p>A quick thought:</p>
<p>Search Engine Optimisation, in the wrong hands, can turn into <em><strong>fishing</strong></em>.</p>
<p>I had a conversation recently about generating a keyword rich page in a highly competitive space. Even if we didn&#8217;t get page one, or two, or three of Google, <em>some </em>people might find the site and then, perhaps, might decide to buy some products.</p>
<p>Really? Would they? Sounds like fishing to me. We&#8217;re dropping our bait into an incredibly busy river (there are LOTS of fishermen here!) hoping that a fish might not only see our bait, but also like it. Like it more than all the other bait they&#8217;ve seen already.</p>
<p>The first problem with this approach is that it is almost infinite. You could create &#8216;keyword rich&#8217; (ooh, I hate that phrase) pages for all of your products and services, <em>and</em> their related phrases, and hope that some of them get noticed.</p>
<p>There&#8217;s no denying that this can and does work. It&#8217;s a tried and trusted formula for limited success. My main problem with it, however, is that it is not <em>user centric</em>. We are not asking the question, &#8220;what do our users expect to find when they search for that phrase&#8221;.</p>
<p>For example, if we were a tennis ball manufacturer we could create a page for the phrase &#8220;Wimbledon 2009&#8243;. Granted, some people searching that phrase might want to buy tennis balls &#8211; but the chances are they want information on the tournament. We could even include some wonderful keyword rich paragraphs about Wimbledon but, unless we&#8217;re Slazenger, it&#8217;s unlikely this text will be of value for the user.</p>
<p>Another example might be a car insurance provider optimising for &#8216;Toyota Prius&#8217;, because the person searching either  has a car or is about to buy one. Surely they&#8217;ll need car insurance at some point too? Maybe, but that&#8217;s <em>not</em> what they&#8217;re searching for!</p>
<p>I guess that doesn&#8217;t stop car insurers sponsoring motor shows, but isn&#8217;t a point of the online marketing that we can accurately target people and their interests?</p>
<p>There is also a (please don&#8217;t run away here) moral issue. Google is, in many ways, a victim of it&#8217;s own success. As SEOs try to keep up with the algorithm, and websites vie for a page one ranking, all kinds of SEO&#8217;d content is being created which can be of no use to users. What use is a visitor to you and your site? Vanity? Ego? Would you rather have 1000 visitors who don&#8217;t convert or 10 visitors who do?</p>
<p>How many results on page one of Google are directly targeting your search phrase, and how many have been SEO&#8217;d to appear there?</p>
<p>This, my friends, is fishing. If you have the time, go nuts. But there are far better things to do. Seriously. You need to get out more.</p>
<p>Throw away your rod, get up off the riverbank, and go <em><strong>hunting</strong></em>.</p>
<p>You know who your prey are &#8211; <em>people who want to buy tennis balls</em>. Optimise for phrases like &#8216;tennis balls&#8217; and &#8216;buy tennis balls&#8217; (or whatever your keyword research suggests). It&#8217;ll be much easier to get a good result on Google, and it&#8217;s likely you&#8217;ll enjoy much higher conversion rates.</p>
<p>So sling your shotgun over your arm and spend your SEO time more effectively. Don&#8217;t waste time competing with the BBC&#8217;s coverage of Wimbledon and settling for a page 3 or page 4 result. Go deep and long with your phrases and links, and (last pun coming up) your conversion rates will be an ACE.</p>
<p>That was shocking, I know.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.richardshepherd.com/seo-fishing-or-hunting/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
