<?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>Idealien Studios &#187; Jamie</title>
	<atom:link href="http://idealienstudios.com/author/idealien/feed/" rel="self" type="application/rss+xml" />
	<link>http://idealienstudios.com</link>
	<description>We will turn your dreams into reality together!</description>
	<lastBuildDate>Thu, 27 Oct 2011 01:54:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Introducing: Idealien Rideshares</title>
		<link>http://idealienstudios.com/blog/wordpress/introducing-idealien-rideshares/</link>
		<comments>http://idealienstudios.com/blog/wordpress/introducing-idealien-rideshares/#comments</comments>
		<pubDate>Thu, 27 Oct 2011 01:41:58 +0000</pubDate>
		<dc:creator>Jamie</dc:creator>
				<category><![CDATA[Idealien]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://idealienstudios.com/?p=978</guid>
		<description><![CDATA[The plugin creates a custom post type which enables you and your community to get to where you want to go using less gas &#038; having more fun on road trips. t has been designed towards event rideshares so that drivers &#038; passengers in the same city can co-ordinate their travel to whatever festival, WordCamp, etc they are attending.]]></description>
			<content:encoded><![CDATA[<p><a href="http://idealienstudios.com/wp-content/uploads/ridesharePluginRepo.jpg"><img class="alignright size-medium wp-image-979" title="ridesharePluginRepo" src="http://idealienstudios.com/wp-content/uploads/ridesharePluginRepo-300x141.jpg" alt="" width="300" height="141" /></a>I first had the idea to build a rideshare form / board system around the time of release of WordPress 2.7. That initial iteration of development was a series of theme template files, lots of functions.php code, a category to store the posts and what now feels like duct-tape quality code to solve the <a href="http://idealienstudios.com/blog/wordpress/custom-field-query-quandry/">custom field quandary</a> it all created. WP 3.0&#8242;s custom post types and query_post meta_value parameters made the entire thing far more elegant in concept. So as my spare time has permitted I worked away at re-factoring it to be a stand-alone plugin. Today I&#8217;m happy to launch  <a href="http://rideshare.idealienstudios.com">v0.1 of Idealien Rideshare</a> onto the <a href="http://wordpress.org/extend/plugins/idealien-rideshare/">WordPress.org plugin repository</a>.</p>
<p><a href="http://idealienstudios.com/wp-content/uploads/screenshot-1.jpg"><img class="alignleft size-full wp-image-983" title="screenshot-1" src="http://idealienstudios.com/wp-content/uploads/screenshot-1.jpg" alt="" width="159" height="144" /></a>The plugin creates a custom post type (Rideshares) which enables you and your community to get to where you want to go using less gas and having more fun on road trips. It has been designed towards event-based rideshares in particular so that drivers and passengers in the same city can co-ordinate their travel to whatever festival, concert, workshop, WordCamp, etc they are attending elsewhere. The admin form is easy for adding / editing rideshares for those who have access to your sites’ admin console. To make the process as easy for your extended community, this plugin also provides an exceptional <a href="http://www.gravityforms.com/">Gravity Form</a> to let anyone submit their rideshare request via the front-end of your website.</p>
<p>For more details I&#8217;d point you to either check out the <a href="http://wordpress.org/extend/plugins/idealien-rideshare/">plugin repository</a> with it&#8217;s detailed installation instructions or the <a href="http://rideshare.idealienstudios.com/">rideshare.idealienstudios.com</a> plugin site that I setup to support it.</p>
<p>In case you&#8217;re wondering why v0.1, it&#8217;s because the plugin doesn&#8217;t (yet) have all the features / functionality in it that I think are worthy of a 1.0. At the moment, I&#8217;m expecting to do a big version jump when:</p>
<ul>
<li>The Gravity Form is added to an installation during initial plugin activation.</li>
<li>You can configure the plugin via an options screen to operate in a straight date-based model or the event-based one it has initially been designed for.</li>
<li>Uninstalling the plugin will remove all taxonomy and custom post rideshares.</li>
<li>Registered users gain the able to remove their rideshare request when you have filled it.</li>
<li>Cron job added to remove any rideshares that have expired</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://idealienstudios.com/blog/wordpress/introducing-idealien-rideshares/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Migrating WordPress MultiSite to Media Temple Grid Server</title>
		<link>http://idealienstudios.com/blog/development/migrating-wordpress-grid-server/</link>
		<comments>http://idealienstudios.com/blog/development/migrating-wordpress-grid-server/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 18:41:24 +0000</pubDate>
		<dc:creator>Jamie</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://idealienstudios.com/?p=950</guid>
		<description><![CDATA[If you have ever setup a WordPress Multi-Site aka a WordPress Network, you know that it is not quite the famous 5-minute install that the single site version can be. The few bumps in the road that you encounter are well worth smoothing over as the simplicity of having a single instance of the back-end code to update for multiple domains is worth the effort. ]]></description>
			<content:encoded><![CDATA[<p>If you have ever setup a WordPress Multi-Site aka a WordPress Network, you know that it is not quite the <a href="http://codex.wordpress.org/Installing_WordPress#Famous_5-Minute_Install">famous 5-minute install</a> that the single site version can be. The few bumps in the road that you encounter are well worth smoothing over as the simplicity of having a single instance of the back-end code to update for multiple domains is worth the effort. I originally setup my WordPress Network when 3.0 consolidated the code-base which simplified or eliminated a number of the more complex parts of the process. Recently I have been changed my primary webhosting environment to a Media Temple (MT) Grid Server (GS) environment. The process has gone far smoother than I expected, but wanted to document a few of the issues I encountered and resolutions to them (as much for myself as anyone else).</p>
<h3>Single Site Instructions</h3>
<p>The <a href="http://kb.mediatemple.net/questions/1556/Migrating+your+websites+to+the+%28gs%29+Grid-Service#gs">MT: GS single site migration documentation</a> for is quite excellent. My process was only marginally different than what they describe. A brief outline of the process which took 10 &#8211; 20 minutes per domain depending on file sizes:</p>
<ol>
<li>Add a new domain on MT:GS</li>
<li>Create email user with FTP and SSH access for the domain.</li>
<li>Create new database and user / pass with permissions access to it.</li>
<li>Login to your phpmyadmin to take an export of your entire database.<br />
<em>Optional: </em>Use a <a href="http://wordpress.org/extend/plugins/wp-db-backup/">WordPress database backup plugin</a> if you find it easier.</li>
<li>SSH login to your existing webhosting domain root folder (httpdocs? html? wwwroot?)</li>
<li><strong>tar -zcf yourentiresitebackup.tar.gz *</strong>to create a single archive of your entire site.</li>
<li>SSH login to your MT:GS server and the appropriate domain /html/ folder.</li>
<li><strong>wget http://[insertyourdomainname.com]/yourentiresitebackup.tar.gz </strong>to copy the archive folder.<br />
For large sites or for those who are not on truly high-speed connections, doing this server-to-server copy of a single file is MUCH faster than the alternative download to local PC / upload to new server alternative.</li>
<li><strong>tar -zxf yourentiresitebackup.tar.gz</strong> to uncompress the archive.<br />
Don&#8217;t forget to delete the archive once you&#8217;ve confirmed the site is operational.</li>
<li>Go into the MT:GS database admin page and import your mySQL archive from step 3.</li>
<li>Setup your new local FTP connection in your development IDE of choice.</li>
<li>Your database connection strings will have changed. Modify the wp-config.php files on the new server.<br />
The tutorial linked above outlines this information very well. The change of <strong>localhost </strong>to <strong>$ENV{&#8216;DATABASE_SERVER&#8217;}</strong> was the only unexpected item to me for this.</li>
<li>Replacing 000000 with your account details, you can now preview the domain either at http:/s00000.gridserver.com if it is the primary domain on your MT:GS site or http://sub.alt-example.com.s00000.gridserver.com if it is an additional domain.</li>
<li>Update the DNS entries and wait for the magic to happen.</li>
</ol>
<p>Their tutorial did cover updating site paths &amp; previews within the SQL database before updating the DNS, but once you&#8217;ve ensured your landing page is accessible, the rest of the site will show properly when the DNS have propogated so I found it as a step worth skipping. You may have to re-generate your .htaccess file via the WordPress admin console once that has been done. If you&#8217;re DNS are taking longer than you care to wait you can <a href="http://www.mediacollege.com/computer/network/dns.html">temporarily map DNS/IP addresses</a> to the new server.</p>
<p>Another quirk I discovered is regarding the mail server configuration. Despite the fact that, &#8220;When a domain is added to a (gs)Grid-Service, the mail service is automatically created&#8221; it is not <a href="http://kb.mediatemple.net/questions/519/How+to+enable+or+disable+local+mail+for+your+server%3F#gs">enabled by default</a>. You have to enable it via the account center in Media Temple.</p>
<h3>MultiSite Migration</h3>
<p>Wash, rise, repeat? Almost. In the case where I was migrating existing domains as a part of a MultiSite installation things were essentially the same for steps 1 to 13 as above for the primary domain.  In the case of the sub-sites there is no need for database or file transfer since the primary one stores everything. One merely had to create a <a href="http://www.rogerstringer.com/2011/01/03/wordpress-using-multisite-domain-mapping-on-a-mediatemple-grid-server/">symlink</a> between your subsite and primary network site via ssh on your MT:GS environment. This was actually a lot easier to resolve than my previous hosting environment which had a mix of cPanel + Plesk and required an intricate series of steps.</p>
<p>To bring other domains over to the new WordPress Network on MT:GS environment this <a href="http://codex.wordpress.org/Migrating_Multiple_Blogs_into_WordPress_3.0_Multisite">migration guide</a> was a useful place to start. A couple of other pieces of info I discovered along the way that may prove helpful to others:</p>
<ul>
<li>The <a href="http://codex.wordpress.org/Tools_Export_Screen"><strong>WordPress Import screen</strong></a> for WXR data will not be available on sub-sites until you <a href="http://wordpress.org/support/topic/import-plugin-does-not-install-in-mu-setup">enable it on the primary</a> domain of your Network.</li>
<li>With the Super Admin / Network Admin changeover, as of 3.2.1 you may find the excellent <a href="http://wordpress.org/extend/plugins/wordpress-mu-domain-mapping/">domain mapping plugin</a> menu has <a href="http://wordpress.org/support/topic/lost-domain-mapping-after-wp-321-upgrade">changed locations</a>.</li>
<li>When dealing with a site that was already domain mapped in the new installation (but had not yet had the DNS updates) I was struggling to find a way to preview the site similar to step #13 above for a single site. The subsite URL would re-point to the full domain, and the subsite.s000000.gridserver.com would be treated as if it were a new registration request. The easiest solution is actually to NOT have a domain mapping in the primary site until you are ready for the switch, that way subdomain.primarydomain.com will display everything as you need to test plugins, theme, etc.</li>
<li>The WXR import / export will bring all your posts, pages and related content and then offer you the option to bring across all attachments which could be a lengthy conversion depending on size of your files &#8211; which are essentially moving from /wp-content/uploads/ on your single-site to /wp-content/blogs.dir/##/ on the new server where ## represents the ID of your subsite.</li>
<li>Don&#8217;t forget to confirm whether the plugins / theme features from your single install work on the multi-site environment.</li>
</ul>
<p>Good luck! If you find any other tips / tricks that can help others on this path, feel free to post a comment to share.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://idealienstudios.com/blog/development/migrating-wordpress-grid-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Who needs a resume?</title>
		<link>http://idealienstudios.com/blog/idealien/who-needs-a-resume/</link>
		<comments>http://idealienstudios.com/blog/idealien/who-needs-a-resume/#comments</comments>
		<pubDate>Tue, 12 Oct 2010 02:37:32 +0000</pubDate>
		<dc:creator>Jamie</dc:creator>
				<category><![CDATA[Idealien]]></category>

		<guid isPermaLink="false">http://idealienstudios.com/?p=914</guid>
		<description><![CDATA[I consistently put the priorities of my clients - and other personal projects - ahead of a polished portfolio. BUT NO MORE! The new Idealien portfolio, built with a fantastic WordPress 3.0 custom post type, allows interested individuals to...]]></description>
			<content:encoded><![CDATA[<div id="attachment_915" class="wp-caption alignright" style="width: 310px"><a href="http://idealienstudios.com/wp-content/uploads/blog_portfolio.jpg"><img class="size-medium wp-image-915" title="Fully filterable Portfolio" src="http://idealienstudios.com/wp-content/uploads/blog_portfolio-300x253.jpg" alt="Fully filterable Portfolio" width="300" height="253" /></a><p class="wp-caption-text">Fully filterable</p></div>
<p>I will fully admit that the portfolio page of this site sat dormant for far too long with a &#8216;mea culpa&#8217; message suggesting that &#8220;I am currently updating my portfolio to reflect the work I have done for  various clients during my 10+ years in the web design / development  industry.&#8221; &#8220;. The truth is I consistently put the priorities of my clients &#8211; and other personal projects &#8211; ahead of a polished portfolio. <strong>BUT NO MORE!</strong></p>
<p>The new version is built with a fantastic WordPress 3.0 custom post type that allows interested individuals to:<br />
<div id="attachment_916" class="wp-caption alignright" style="width: 184px"><a href="http://idealienstudios.com/wp-content/uploads/blog_portfolio_detail.jpg"><img class="size-medium wp-image-916" title="Detailed documentation per piece" src="http://idealienstudios.com/wp-content/uploads/blog_portfolio_detail-174x300.jpg" alt="Detailed documentation per piece" width="174" height="300" /></a><p class="wp-caption-text">Full of details + pictures</p></div>
<ul>
<li>Sort / filter my past projects with a single-click based on their area of interest (skills used, project type, date, client demographic, etc). I had been wanting to use the jQuery plugin <a href="http://razorjack.net/quicksand/index.html">Quicksand </a>for quite some time and this was the perfect situation. The integration of custom taxonomies was not easy, but you can look forward to tutorial /  sample and a portfolio plugin to come to this blog + <a href="http://idealienstudios.com/projects/">Idealien Projects</a> before the year is out.</li>
<li>Read a summary of the project highlights.</li>
<li>A <a href="http://leandrovieira.com/projects/jquery/lightbox/">jQuery lightbox</a> allows those who want to dig deeper to see full-sized images of the key parts of the project as well as learn more about what went into making each of those happen.</li>
</ul>
<p>The 3 pieces in the portfolio are either my most recent works or my most favourite past project. You&#8217;ll have to browse through them to find out. What are you waiting for?</p>
]]></content:encoded>
			<wfw:commentRss>http://idealienstudios.com/blog/idealien/who-needs-a-resume/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What’s new at Idealien Studios?</title>
		<link>http://idealienstudios.com/blog/whats-new-2010/</link>
		<comments>http://idealienstudios.com/blog/whats-new-2010/#comments</comments>
		<pubDate>Thu, 07 Oct 2010 00:39:29 +0000</pubDate>
		<dc:creator>Jamie</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://idealienstudios.com/?p=840</guid>
		<description><![CDATA[The last 12 months have been incredibly busy and exciting times for Idealien Studios, both personally and professionally.]]></description>
			<content:encoded><![CDATA[<p>While little of it has (yet) manifested itself into this blog the last 12 months have been incredibly busy and exciting times for Idealien Studios, both personally and professionally. In July &#8217;09 my fiancee and I sold our house in Ottawa and bought what is as near to the <a href="http://www.coalescentfarms.com">farm of our dreams</a> as one could imagine. 45 acres of wide open vistas, light forest trails, fields of hay and horse pastures are backdrop to a stunning 1830&#8242;s stone house, big old beautiful barn and a few other small outbuildings. The transition from city-to-farm life has been a welcome change that has improved my fitness through general work around the farm and decreased my stress level quite noticeably. Even the aspect of the transition which I feared the most, a 50 &#8211; 60 minute commute in to Ottawa, has turned into an opportunity.</p>
<ul>
<li>Less stop and go traffic than my existing commute which could often approach 45-minutes in-city.</li>
<li>Ample time to listen to <a href="http://wp-community.org/">great podcasts</a> on my iPhone via FM Transmitter to keep me up-to-date on the latest details of the web design and WordPress industry(ies).</li>
<li>Opportunities to think about particular coding challenges outside of pressing deadlines. The results of which are highly scalable and re-usable code that will benefit many current and future Idealien Studios clients. Not to mention others in the WordPress community as the results will make their way out as <a href="http://idealienstudios.com/projects/">plugins or projects</a> of an open-source variety very soon.</li>
</ul>
<p><img src="http://idealienstudios.com/wp-content/uploads/40227_10150247156755529_610805528_14057804_6452947_n-300x200.jpg" alt="" title="" width="300" height="200" class="alignright size-medium wp-image-842" />It has been a magical summer to say the least. At the beginning of August we also decided the time (and place) was right to get married on our farm. Mother nature showered us with beautiful blue skies as many friends and family came together to witness the Oastler empire expand by 2 <img src='http://idealienstudios.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p>After a few well-deserved weeks off to celebrate said nuptuals, many wonderful things are coming together in a timely manner on the professional side of my life as summer too quickly changes to fall. The release of <a href="http://wordpress.org/news/2010/06/thelonious/">WordPress 3.0 in June </a> brought with it a significant number of <a href="http://idealienstudios.com/blog/refactor-or-retire-ice/">new features</a> which further my <a href="http://idealienstudios.com/projects/presentations/wordpress-beyond-a-blog/">long-held belief</a> that <a href="http://idealienstudios.com/blog/wordpress-not-yet-enterprise-level-cms/">WordPress = CMS</a>. Deploying this release worthy of the milestone version mark and the Multi-Site capability in particular will enable faster support deployments to all Idealien Studios small-business clients. The use of custom post types built as plugins will also make content management for clients far easier for those not comfortable with html and even faster for those who are. Specific fields capture your data through radio buttons, checkboxes, etc (known in WordPress lingo as meta boxes or custom fields) and short codes handle the data display on the presentation layer that your customers see exactly what you want them to.</p>
<p>As we enter the last quarter of 2010 I am quite excited about the future for so many reasons. I look forward to more opportunities to share knowledge and success together.</p>
]]></content:encoded>
			<wfw:commentRss>http://idealienstudios.com/blog/whats-new-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress Themes and the GPL – again?</title>
		<link>http://idealienstudios.com/blog/gpl-again/</link>
		<comments>http://idealienstudios.com/blog/gpl-again/#comments</comments>
		<pubDate>Mon, 19 Jul 2010 05:58:30 +0000</pubDate>
		<dc:creator>Jamie</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://idealienstudios.com/?p=756</guid>
		<description><![CDATA[This issue of theme theft, re-selling  (or conflicting business models and the GPL) comes up every couple months. This obviously sucks, but based on the current WordPress code structure and theme distribution model, there isn't a lot which can be done - it is the nature of the beneficial beast that is working with open source licensing models. It caused me to think outside the box and ponder a different approach to resolve the problem at hand.

In the 2 years since I originally wrote that article, the premium theme industry developed around a number of thriving businesses. Today, most of the theme developers who sell their wares do so entirely under the GPL. The symptoms causing the questions to be raised may have changed, but the important ones still remain:

   1. Can (or will) developers distribute their work under multiple licenses which would respect the source code base license?
   2. What do you do if someone does not respect the license that your product is distributed under?
   3. How will this on-going conversation affect the open-source community surrounding WordPress?
]]></description>
			<content:encoded><![CDATA[<p><img class="alignright size-medium wp-image-757" title="Secure WordPress Theme" src="http://idealienstudios.com/wp-content/uploads/my002_080222_securetheme-300x224.jpg" alt="" width="300" height="224" /><strong>NOTE:</strong> <em>I originally wrote the bulk of this post circa February 2008 (In fact, I had to go re-load a 2.1 version of WordPress to find it &#8211; how very LiveJournal the admin console was back then) &#8221; The discussion then was whether premium themes exist within the community / ecosystem of WordPress and what to do about theme theft / re-distribution.  Similar question(s) have come up again with the recent <a title="WordPress Themes and the GPL" href="http://markjaquith.wordpress.com/2010/07/17/why-wordpress-themes-are-derivative-of-wordpress/">Thesis / GPL</a> debate and the alternatives I suggest are no less timely now.</em></p>
<p>The <a href="http://www.gnu.org/licenses/gpl-faq.html#GPLAndPlugins">GPL website FAQ</a> does mostly addresses this concept, &#8220;If the program dynamically links plug-ins, and they make function calls to each other and share data structures, we believe they form a single program, which must be treated as an extension of both the main program and the plug-ins.&#8221;</p>
<p>Bryan at <a href="http://onemansgoal.com/310/premium-themes-and-digital-copyright-leeching/">One Man’s Goal</a> pondered the issues surrounding digital copyright leeching and the following quotes summarize the (then) prevaling opinions on this situation:</p>
<blockquote>
<div>By designing on a GPL platform…when you release it to the public you are releasing it licensed to everyone not just those who pay for it. Companies like Redhat linux make their money not by charging for the linux o/s which is open source, but by charing for support and tweaking packages that are added to it. That’s why CentOS can directly clone what Redhat Enterprise is and not be touched.</div>
</blockquote>
<blockquote>
<div>The part of themes or plugins which makes them subject to the terms of the GPL is that they use WordPress code hooks to extract data from the WordPress database. While theme designers can SAY that their theme is licensed under some non-GPL model, they have no legal basis to do so. Someone profiting from reselling the work of another is ethically rotten, but in the current legal landscape is technically fair.</div>
</blockquote>
<p>This issue of <a href="http://bloggingexperiment.com/archives/is-blogging-experiment-breaking-the-law.php">theme theft</a>, <a href="http://www.adii.co.za/2008/02/17/pirated-wordpress-themes-get-a-100-theme-for-only-6/">re-selling</a> (or conflicting business models and the GPL) comes up every couple months. This obviously sucks, but based on the current WordPress code structure and theme distribution model, there isn&#8217;t a lot which can be done &#8211; it is the nature of the beneficial beast that is working with open source licensing models. It caused me to think outside the box and ponder a different approach to resolve the problem at hand.</p>
<h2>Distribute separate theme packages with split license</h2>
<ol>
<li><strong>GPL-licensed files which include all references to WordPress logic</strong><br />
This .zip archive would only contain the .php files which make up the theme &#8211; sidebar, header, index, comments, etc. These files would only have integration to css through the id / class names applied to div containers. A blog owner that deploys this package alone will have their content displayed in a reasonable approximation of the theme structure without any styles applied.</li>
<li><strong>Images, javascript and css files licensed under whatever terms the designer wishes</strong><br />
This second .zip file would contain all the elements required to convert that basic structure into the beautiful presentation shown in the theme screenshot / demo. After purchasing this set of files, the user would have to upload these into the theme directory – a process which has been proven simple enough for most blog owners to execute without issue.</li>
</ol>
<h2>What are the benefits?</h2>
<ul>
<li><strong>Separate downloads equals separate licenses</strong><br />
This concept would be viable because of the difference the GPL affords non-dynamically linked plugins. As the visual elements could be used with any system they would not be subject to the terms of the GPL.</li>
<li><strong>Separating form from function</strong><br />
Decoupling the business logic and presentation layer is a best practice which simplifies future development efforts. Developers already recognize the benefit of separating substance and style &#8211; html and css anyone? Automattic made a sound decision to separate blog operations (wp-admin) from custom functionality (plugins) and presentation (themes).</li>
<li><strong>Consistent with standard design processes</strong><br />
Designers usually cut a photoshop file up into images and use a static .html template file to perfect the css with them. The non-gpl .zip file would represent this stage of design. The PHP code which uses WordPress hooks to dynamicize this template would become the GPL-licensed .zip file in effect.</li>
<li><strong>Developing architecture agnostic solutions</strong><br />
With the graphics and css separated from WordPress specific code, your theme is now portable to other open source architectures: Joomla, Drupal or Expression Engine. Whether the premium designer does the work themselves or partners with someone else, they have diversified their potential markets. Including the static .html file(s) you built during the design phase and it could be sold as a generic css template as well.</li>
<li><strong>Multiple premium themes from one template</strong><br />
If the css elements are well-designed it would be easy to create multiple themes from the same template. A fishing blog and could buy incremental series of graphics for ice fishing, fly fishing or bass fishing, or a seasonal treatment to a single outdoor painted scene.</li>
</ul>
<p>I would suggest that the designers be nice, and implement a basic styles.css with the GPL code. Give the user a rough guideline based on sizes of the placeholders for where the graphics would go. Include a link in the comments at the top – which show up in the WordPress theme page – where they can / should download the graphics if they want the full effect of the premium design.</p>
<h2>What are the problems?</h2>
<ul>
<li><strong>A challenge for premium theme galleries?</strong><br />
The dozens of free WordPress theme galleries would not require any change, but any <a href="http://hackwordpress.com/best-premium-wordpress-themes-gallery/">premium theme galleries</a> would. One might argue that since they already have a different download process with credit card collection &#8211; it&#8217;s not like there is a high degree of learned behaviour to overcome so this isn&#8217;t that much of a problem.</li>
<li><strong>Asking users to do more in order to implement a design</strong><br />
The majority of blog owners seem comfortable with the process of downloading to PC, unzipping into the wp-content/themes/ directory, uploading to server and activating, so adding a second download/unzip/upload is another non-issue of sorts I suspect. If this idea takes hold and all premium theme developers begin to adopt this process, eventually users learn that is the expected set of actions required to install a premium theme.</li>
<li><strong>A thief is a thief is a thief!</strong><br />
Not much you can do about someone who has no moral issue with theft. Yet this con becomes a pro by the fact that you now have a legal recourse to sue Mr. Thiefy McStealerton as your original artistic works are not subject to the GPL but to the license you chose to make them available for purchase under.</li>
</ul>
<p>I could only come up with one other option, which was to suggest that designers host the css / graphic files on their own servers and restrict who has access to them. Obviously this puts an external dependancy on blog performance which many would not like, but would give a more significant level of control as the styles.css file and images would be on your server. Perhaps this concept would work for WordPress.com users and the marketplace concept which Automattic has been hinted is coming in the near future.</p>
<p>In the 2 years since I originally wrote that article, the premium theme <em>industry</em> developed around a number of thriving businesses. Today, most of the theme developers who sell their wares do so entirely under the GPL. The symptoms causing the questions to be raised may have changed, but the important ones still remain:</p>
<ol>
<li>Can (or will) developers distribute their work under multiple licenses which would respect the source code base license?</li>
<li>What do you do if someone does not respect the license that your product  is distributed under?</li>
<li>How will this on-going conversation affect the open-source community surrounding WordPress?</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://idealienstudios.com/blog/gpl-again/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Refactor or Retire? ICE and WordPress 3.0</title>
		<link>http://idealienstudios.com/blog/refactor-or-retire-ice/</link>
		<comments>http://idealienstudios.com/blog/refactor-or-retire-ice/#comments</comments>
		<pubDate>Wed, 05 May 2010 03:04:48 +0000</pubDate>
		<dc:creator>Jamie</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[ICE]]></category>

		<guid isPermaLink="false">http://idealienstudios.com/?p=735</guid>
		<description><![CDATA[There are many exciting things afoot in the world of WordPress these days. If you&#8217;ve been living under a rock then  custom post types (A really bad name choice BTW &#8211; it&#8217;s a data type of which post, page, attachment are default setup at launch), menu management, Multi-Site all in core of the next release [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://idealienstudios.com/wp-content/uploads/blog_wp30test_customPostType.jpg"><img class="alignleft" title="Custom Post Types in 3.0" src="/wp-content/uploads/blog_wp30test_customPostType-300x211.jpg" alt="" width="300" height="211" /></a>There are many exciting things afoot in the world of WordPress these days. If you&#8217;ve been living under a rock then  <a href="http://codex.wordpress.org/Function_Reference/register_post_type">custom post types</a> (A <strong>really</strong> bad name choice BTW &#8211; it&#8217;s a data type of which post,  page, attachment are default setup at launch), <a href="http://codex.wordpress.org/Function_Reference/wp_nav_menu">menu management</a>, <a href="http://wpengineer.com/wordpress-3-multisite-settings/">Multi-Site</a> all in core of the next release will be news to you. If not, you&#8217;ve already got a beta installation running and loving the new UI elements and functionality.</p>
<p>Here are some of the links that I have found most useful in the last few days of my first cut at custom post type implementation and re-factoring with new features supported in 3.0:</p>
<ul>
<li><a href="# http://wpengineer.com/example-how-to-add-meta-boxes-to-edit-area/">http://wpengineer.com/example-how-to-add-meta-boxes-to-edit-area/</a></li>
<li><a href="http://www.deluxeblogtips.com/2010/04/how-to-create-meta-box-wordpress-post.html">http://www.deluxeblogtips.com/2010/04/how-to-create-meta-box-wordpress-post.html</a></li>
<li><a href="http://www.catswhocode.com/blog/8-useful-code-snippets-to-get-started-with-wordpress-3-0">http://www.catswhocode.com/blog/8-useful-code-snippets-to-get-started-with-wordpress-3-0</a></li>
<li><a href="http://www.catswhocode.com/blog/8-useful-code-snippets-to-get-started-with-wordpress-3-0">http://justintadlock.com/archives/2010/04/29/custom-post-types-in-wordpress</a></li>
<li><a href="http://justintadlock.com/archives/2009/05/06/custom-taxonomies-in-wordpress-28">http://justintadlock.com/archives/2009/05/06/custom-taxonomies-in-wordpress-28</a></li>
<li><a href="http://www.webmaster-source.com/2010/01/08/using-the-wordpress-uploader-in-your-plugin-or-theme/">http://www.webmaster-source.com/2010/01/08/using-the-wordpress-uploader-in-your-plugin-or-theme/</a></li>
<li><a href="http://wpengineer.com/use-more-flexibility-in-wordpress-templates/">http://wpengineer.com/use-more-flexibility-in-wordpress-templates/</a></li>
<li><a href="http://wpstorm.net/2010/04/editor-styles-custom-post-types-wordpress-3-0/">http://wpstorm.net/2010/04/editor-styles-custom-post-types-wordpress-3-0/</a></li>
</ul>
<p>While the big features coming with 3.0 are getting a lot of the words / press, there are quite a few little things that have been improved that are worth mentioning.</p>
<h3>New Installation Screen Updates</h3>
<p><a href="http://idealienstudios.com/wp-content/uploads/blog_wp30test_installation1.jpg"><img class="alignright" title="WordPress 3.0 Installation" src="/wp-content/uploads/blog_wp30test_installation1-300x204.jpg" alt="" width="300" height="204" /></a>Without fail the first thing I would do on installation of any WordPress 2.9 or earlier setup would be:</p>
<ul>
<li>Create a new admin account (not named &#8216;admin&#8217;) with a secure password</li>
<li>Re-login as that user and delete the existing &#8216;admin&#8217; user</li>
</ul>
<p>Having the option to provide this as a part of the initial installation is great. It could also reduce the amount of potential site hacks others encounter who never did this in the first place by giving them the username option at install time.</p>
<h3>Header Image Management</h3>
<p><a href="http://idealienstudios.com/wp-content/uploads/blog_wp30test_headerImage1.jpg"><img class="alignright size-medium wp-image-742" title="WordPress Header Image" src="http://idealienstudios.com/wp-content/uploads/blog_wp30test_headerImage1-300x169.jpg" alt="" width="300" height="169" /></a>The new default theme, 2010, looks quite a bit better than Kubrik which was showing its age. While <a title="Wordcast" href="http://wordcast.bitwiremedia.com/2010/05/04/wordcast-conversations-13-wordpress-3-0/">some question the value</a> of theme configuration pages in the admin console, users who want an easy way to tweak the look of their site without touching code will love the header and background image upload capability. I have explored a little of how it has been done (hint: function add_custom_image_header and /wp-admin/custom-background.php) that I can see being useful:</p>
<ul>
<li>Uploading of .pdfs or other attachments into a custom post type where you don&#8217;t want to have the URL defined in the content editor field.</li>
<li>Bringing the featured image into a meta box along with other content type data (instead of a stand-alone meta box)</li>
</ul>
<h3>Idealien Category Enhancements: Refactor or Retire?</h3>
<p><a href="http://wordpress.org/extend/plugins/idealien-category-enhancements/">Idealien  Category Enhancements</a> (ICE) was the first plugin I wrote for WordPress, circa WP 2.5. When I was trying to find a workable solution before committing to writing it, I felt like the ability to connect template files through the admin console should be something that was part of the core of WordPress. The significant updates to 3.0 have raised some interesting questions in my mind:</p>
<ul>
<li>The inclusion of custom post types  has all but eliminated the use cases  where I do make use of ICE in 2.9-. A category-driven approach feels so &#8220;duct tape / McGyver&#8221; when compared to the full-scope solution of custom post types.</li>
<li>The ability to define single-{posttype}.php in a theme based on category was the feature most people who left feedback about the plugin indicated was why they were using it. Replace category with custom post type and you don&#8217;t need a plugin to achieve the same purpose.</li>
<li>Pages with short-codes or Page Templates that use the query_var parameter tied to register_post_type can give an easy way to integrate post types into menus and navigation. You can even control the slug so that a page which acts as container for a post type &#8220;category&#8221; is identical to what the individual post types will use. This was always a challenge with ICE, although some writings on the permalink performance associated with /%postname%/ does make one wonder can vs should questions.</li>
</ul>
<p>There will be a not insignificant amount of re-factoring work to enable any site to take advantage of the new features coming with WordPress 3.0. As I said at the outset, template management should be something that is part of the core of WordPress so I&#8217;m not entirely unsatisfied that this has come to pass. I&#8217;d like to think that my plugin helped influence that decision in the positive direction it has gone. I&#8217;m leaning towards retiring Idealien Category Enhancements as a result,  but would appreciate any comments from those who currently use it and  are looking at their options for 3.0 upgrade process.</p>
]]></content:encoded>
			<wfw:commentRss>http://idealienstudios.com/blog/refactor-or-retire-ice/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress is not YET an enterprise-level CMS</title>
		<link>http://idealienstudios.com/blog/wordpress-not-yet-enterprise-level-cms/</link>
		<comments>http://idealienstudios.com/blog/wordpress-not-yet-enterprise-level-cms/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 19:55:26 +0000</pubDate>
		<dc:creator>Jamie</dc:creator>
				<category><![CDATA[Blog]]></category>

		<guid isPermaLink="false">http://idealienstudios.com/?p=700</guid>
		<description><![CDATA[The question whether "WordPress is a content management system?" has been answered affirmatively in my mind for quite some time. It is a testament to the versatility of WordPress that it could just as easily convert into an eCommerce site, a forum or social network. I explore whether it being an enterprise-level CMS is really that much more of a stretch?]]></description>
			<content:encoded><![CDATA[<p>The question whether &#8220;WordPress is a content management system?&#8221; has been answered affirmatively in my mind for quite some time. If you still have doubts, or want a recent sample of the chatter on the concept, check out <a title="Is WordPress a CMS?" href="http://www.mbjwork.com/2010/04/is-wordpress-a-cms-or-a-blogging-platform-yes/">Is WordPress a CMS or blogging platform on mbjwork.com</a>. One comment from <a href="http://www.scratch99.com/">Stephen Cronin</a> on it inspired me to write a response  to further the conversation down a positive path. He suggests the distinction that, &#8220;WordPress is NOT an enterprise level CMS&#8221;,</p>
<blockquote><p>I would use WordPress to run one of my personal sites. I would not use it to run the websites at work (I lead a government web  team). I generally find that people saying it IS a CMS are people who deal  mainly with small to medium websites, which WordPress is perfect for,  and those saying it’s NOT are dealing with much larger and complex  sites.</p></blockquote>
<p>While this position is debate-able, it is mostly dependant on your definition of the term enterprise and what specific client requirements are involved in a given site. I will cede the point by saying that WordPress is not YET an  enterprise-level CMS that can compete on a feature-by-feature comparison with such high cost platforms as Red Dot, Vignette, Interwoven LiveCycle, etc. These systems often require just as much configuration / customization to implement client-specific elements as a small business site built on WordPress &#8211; only the consultants for these platforms generally charge a higher premium for their specialized &#8220;niche&#8221; knowledge.</p>
<h3>Don&#8217;t look a crazy horse in the mouth</h3>
<p><a href="http://idealienstudios.com/wp-content/uploads/blog_wpcms_mathProof.jpg"><img class="alignright size-medium wp-image-721" title="Mathematical Proof that WP = CMS" src="http://idealienstudios.com/wp-content/uploads/blog_wpcms_mathProof-300x190.jpg" alt="" width="300" height="190" /></a>It wasn&#8217;t that long ago that the answer of whether WordPress was a CMS was a harder position to defend. I gave a presentation in 2008 at Wordcamp Toronto &#8211; <a href="http://wordpress.tv/2009/01/14/wordcamp-toronto-2008-jamie-oastler-on-pushing-wordpress-beyond-blogging/">WordPress: Beyond a Blog</a> &#8211; and mathematically proved that WordPress = CMS. The definitive deliniation came after the <a href="http://wordpress.org/development/2008/10/usability-testing-report-25-and-crazyhorse/">crazyhorse  fiasco</a> and, in my mind, co-incided with  the <a href="http://wordpress.org/about/roadmap/">2.7 release</a> (Dec 10, 2008) for a few reasons:</p>
<ol>
<li>The major UI improvements to the admin  console gave it a more professional (read generic) colour  palette.</li>
<li>Usability improvements enabled access any content area /  type or configuration element via a single click.</li>
<li>Steady improvements on the well-defined plugin / theme / filters / hooks architecture and the 1-click update.</li>
</ol>
<p>Overall these improvements have made the process to create, customize or update  a WP-powered site into a task-scale work effort compared to a project-level one. This is an important distinction given the frequency of releases for WordPress (both a pro and con).  I am quite  excited about the upcoming <a href="http://www.scottberkun.com/blog/2010/the-end-of-the-killer-feature/">killer features</a> of WordPress 3.0 (menu management, custom <span style="text-decoration: line-through;">post</span> data types) that will further make  any questions of its CMS capabilities that much harder, ney  impossible, to refute.</p>
<p><em>To summarize:</em> In a less than 18 months, WordPress has gone from being debateable as  a  CMS in general to being debateable as an enterprise-level CMS. Not bad  for a open source project that has blogging as its core focus <img src='http://idealienstudios.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Especially when compared with  other open  source projects that often struggle to make in-roads into  non-core areas (see Linux desktops in corporate environment). WordPress has grown into a viable COTS (customized off the shelf)  product &#8211; it just happens to sit on a shelf with a price of $0 which is a big  selling point when most other enterprise-level CMS platforms have quite a few  more 0&#8242;s in their sticker price!</p>
<h3>How could WordPress be considered an enterprise-level CMS?</h3>
<p>This is the real question I wanted to address with this post. There are a number of features  / areas of concern I see with the current state of WordPress that prevent it from being seriously pitched or deployed as a corporate business platform. In some cases there are plugins which fill the gaps reasonably well. In others there may be limitations that the blog-centric principles it was founded upon prevent it from solving. In all cases, I want to encourage discussion of these areas to see which are areas worth researching by those who have a passion for the platform or have plugin programming powers in need of a  niche. If you think of functionality I have missed, or plugins which provide the gaps I have identified, please add a comment.</p>
<ul>
<li><strong>Custom Data Types</strong><br />
<span style="text-decoration: line-through;">Plugin of Choice: <a title="More Fields" href="http://wordpress.org/extend/plugins/more-fields/">More Fields</a>, <a title="PODS" href="http://wordpress.org/extend/plugins/pods/">PODS</a></span>, <a title="Custom Data Types" href="http://wpengineer.com/impressions-of-custom-post-type/">WordPress 3.0!<br />
</a>Yes it is possible to train users  to select a strangely titled custom field and populate it, but it is not an elegant solution compared to data entry directly into named fields. Soon,easily configurable custom data capture / presentation will be possible <em>out-of-box</em> with WordPress. This is probably the feature concept I have been most wishing WordPress would add since I started working with it as a CMS.</li>
<li><strong>Backup</strong><br />
<em>Plugin of Choice: <a title="wp-db-backup" href="http://wordpress.org/extend/plugins/wp-db-backup/">WP-DB-Backup</a></em><br />
It is critical to have a reliable, regularly scheduled backup process that is easily re-deployable. The newest line of business added to Automattic, <a title="VaultPress" href="http://vaultpress.com/">VaultPress</a>, offers such a service for those who aren&#8217;t comfortable with web server / database backups. It covers &#8220;your plugins, dashboard, themes, comments, and even your post revisions  are all safeguarded and ready to be restored.&#8221; Perhaps someone could re-use the plugin code  to create a version that enterprises could deploy within their own architecture to leverage their existing hardware spend.</li>
<li><strong>Bilingualisation</strong><br />
<em>Plugin of Choice: </em><a title="qTranslate" href="wordpress.org/extend/plugins/qtranslate/"><cite>qTranslate</cite></a><br />
While the default language of the Internet is english, there are <a href="http://www.internetworldstats.com/stats7.htm">far more people</a> who prefer non-english languages. The support for multiple languages of <a title="WordPress in your language" href="http://codex.wordpress.org/WordPress_in_Your_Language">the admin console</a> is excellent, but content capture and display of multi-language support is still suspect. qTranslate handles the core fields (title, content, excerpt) well, but not custom fields, meta boxes, etc. Hopefully with a robust 3.0 focused upgrade of qTranslate, we might come close to &#8220;fully multi-lingual support&#8221; across all data types.</li>
<li><strong>User / Role Management and Content Control</strong><br />
<em>Plugin of Choice: </em>Justin Tadlock&#8217;s <a title="Members" href="wordpress.org/extend/plugins/members">Members Plugin</a><br />
The default approval concept from contributor / author through editor / administrator fits reasonably well when you have &#8216;anyone can write anything&#8217; environments and editors who have latitude across the entire site. But a corporate environment might have people who only handle specific types of content. 3.0 will greatly simplify the process of isolating such content areas and improve the associated &#8220;data entry screens&#8221;. Further capabilities to define roles, which users have access to them, what they can access becomes more important as the variety of workers who interact with the CMS scales up.</li>
<li><strong>Workflow Management<br />
</strong>Closely related to the roles which users have is how the content approval process happens. Some content only requires single-level approval, others must be blessed by people very far up the corporate ladder before publishing. The addition of this feature should be configurable though off by default to avoid confusifying the &#8220;I write my own blog&#8221; default use case for WordPress. I haven&#8217;t tried or heard of any plugins that have tackled this concept yet, have you?</li>
<li><strong>Content Release Environments</strong><br />
<em>Closest Conceptual Plugin: <a title="WP Hive" href="http://wordpress.org/extend/plugins/wp-hive">WP Hive</a></em><br />
Workflows work when you are dealing with individual content updates, but how do you handle an entire new section, or re-writing a sizeable portion of an existing site? Incremental draft / publish just won&#8217;t cut it. Creating a new instance of a site on an internal server is easy enough (see backups), but merging the changes that occured between the time the copy of  production environment was taken and the new section going live is not.</p>
<p>It would be interesting to see WordPress converted to a <em>repository-driven approach</em> where content gets &#8220;checked-in&#8221; to a central instance and staff can &#8220;cut releases&#8221; to different environments for testing. The low overhead of WP (php / mysql) deployment would make creating new environments a breeze compared to some of the large-scale CMS that have hefty hardware requirements to host.</li>
<li><strong>Lead Generation / Forms</strong><em><br />
Plugin of Choice: <a title="Gravity Forms" href="http://www.gravityforms.com/">Gravity Forms</a></em><br />
The simplicity with which you can use Gravity Forms UI interface to create forms is amazing. They are steadily adding features which, in the hands of great developers, convert WordPress into a complete swiss-army-knife of lead generation or crowd-sourcing content creation. As far as WordPress plugins go, their $199 price tag is steep, but it is well worth it compared to the value it provides. Multi-Step forms with configurable step-logic would be high on my feature request checklist to round out its already impressive functionality.</li>
<li><strong>3rd Party Platform Integration</strong><br />
<em>Closest Conceptual Plugin: <a title="Xavisys" href="http://xavisys.com/xavisys-wordpress-plugin-framework/">Xavisys WordPress Plugin Framework</a></em> or <a title="BackPress" href="http://backpress.org/">BackPress</a><br />
How do you access and display pricing data from a legacy product database? Or information from a 3rd party supplier API? Can you syncronize customer info from an existing LDAP or Salesforce with WordPress? Each enterprise would have a unique set of requirements to consider the complexity of integrating during the concept initiation phase. Having shared knowledge resources that demonstrate best practices would be invaluable to know what is / is not possible. Or if you have something larger in scope to work with, you might consider BackPress which is starting to sound like a robust way to develop with the principles of WordPress as a framework to start from.</li>
</ul>
<h3>Where to draw the line?</h3>
<p>I thought about including functionality most enterprise sites would leverage &#8211; event calendars, payment engines, product shopping carts, etc &#8211; but stopped as that was starting to blur the line  between CMS and web application. It is a testament to the versatility of WordPress that it could just as easily convert into or add-on functionality of an <a title="ShopPlugin" href="http://shopplugin.net/">eCommerce system</a>, a <a title="bbPress" href="http://bbpress.org/">forum</a> or <a title="BuddyPress" href="http://buddypress.org/">social  network</a>. With that in mind I ask you, Is enterprise-level CMS really that much more of an  ambitious stretch?</p>
]]></content:encoded>
			<wfw:commentRss>http://idealienstudios.com/blog/wordpress-not-yet-enterprise-level-cms/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Solving a custom field query quandry</title>
		<link>http://idealienstudios.com/blog/wordpress/custom-field-query-quandry/</link>
		<comments>http://idealienstudios.com/blog/wordpress/custom-field-query-quandry/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 01:30:14 +0000</pubDate>
		<dc:creator>Jamie</dc:creator>
				<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://idealienstudios.com/?p=678</guid>
		<description><![CDATA[I found a solution to a complex display challenge: How to display a set of posts based on multiple custom field values? This post demonstrates get_post_meta_multiple, a function you could include in your theme to allow you to filter based on an infinite number of custom field key / value pairs.]]></description>
			<content:encoded><![CDATA[<h3>How to filter for multiple custom field key / values</h3>
<p><div id="attachment_665" class="wp-caption alignright" style="width: 194px"><img class="size-medium wp-image-665" title="Custom Fields w/ More Fields" src="http://idealienstudios.com/wp-content/uploads/blog_09july_rideshare-184x300.jpg" alt="Rideshare Custom Fields captured via More Fields" width="184" height="300" /><p class="wp-caption-text">Rideshare Custom Fields captured via More Fields</p></div>
<p>As I mentioned at the end of my last post on the Power of Custom Fields, I recently started working on a prototype site that required rideshare board functionality. Storing the details lends itself well to custom fields, especially when <a href="http://wordpress.org/extend/plugins/more-fields/">More Fields</a> is used for data capture as you can see from the inset image. However, I struggled to find a solution within WordPress to solve a display challenge: How to display a set of posts based on multiple custom field values? In my case, how to loop through rideshares base on event and ride-givers or ride-wanters.</p>
<p>I explored looping through each post in my rideshare category to match the rideshare event to an array value and then using get_post_meta within to see if results belonged to the ride-giver or ride-wanter. While this might have worked, it certainly wouldn&#8217;t be an elegant &#8211; or Idealien solution. Dan Butcher did provide a functional solution in the <a href="http://wordpress.org/support/topic/161154">WordPress Support Forums</a> for a similar challenge, but it is not a solution a novice / intermediate WordPress developer would be comfortable customizing, nor would it scale well. Barry @ <a href="http://clearskys.net/">clearskys.net</a> informed me that,</p>
<blockquote><p>Whilst the JOINS work, and will work quite well with a few meta-data criteria passed in, I&#8217;ve had problems (particularly on shared hosting) in the past when creating an SQL query to search based on a series of tags which used a similar method.</p></blockquote>
<h3>Introducing get_post_meta_multiple</h3>
<p>This function I created, with sql optomization support from Barry @ <a href="http://clearskys.net/">clearskys.net</a>:</p>
<ul>
<li>accepts a variable length array of custom field key/value pairs</li>
<li>returns a list of post IDs which you can loop through</li>
<li>Could be implemented into your site in one of 3 ways: Added to a functions.php file as a part of your theme, included in a plugin related to enhanced custom field functionality or <a href="http://codex.wordpress.org/Submitting_Bugs">report a (feature request) bug</a> for a more evolved version of it be included in a future release of the core of WordPress.</li>
</ul>
<p>The demonstration code below has been prepared for the most common scenario as part of a functions.php file in a theme.</p>
<h3>The Demonstration</h3>
<p><img src="http://idealienstudios.com/wp-content/uploads/blog_09july_rideshare2.jpg" alt="Custom Field Table" title="Custom Field Table" width="500" height="138" class="alignnone size-full wp-image-687" /><br />
A series of tables with columns for number of seats available, departure / return dates plus contact / additional info. I have kept the code below intentionally short so the example doesn&#8217;t overwhelm. I have posted a <a href="http://pastebin.com/m4fafcb59">more complete version</a> on pastebin that has the markup to match the image above.</p>
<h3>The function</h3>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> get_post_meta_multiple<span style="color: #009900;">&#40;</span><span style="color: #000088;">$metaDataList</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000088;">$querystr</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;SELECT p.* FROM <span style="color: #006699; font-weight: bold;">$wpdb-&gt;posts</span> AS p WHERE p.ID IN ( &quot;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000088;">$querystr</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;SELECT post_id FROM <span style="color: #006699; font-weight: bold;">$wpdb-&gt;postmeta</span> WHERE &quot;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$innerqry</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$metaDataList</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$innerqry</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">prepare</span><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;(meta_key = <span style="color: #009933; font-weight: bold;">%s</span> AND meta_value = <span style="color: #009933; font-weight: bold;">%s</span>)&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$key</span><span style="color: #339933;">,</span> <span style="color: #000088;">$value</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000088;">$querystr</span> <span style="color: #339933;">.=</span> <span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot; OR &quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$innerqry</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000088;">$querystr</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot; GROUP BY post_id &quot;</span><span style="color: #339933;">;</span>
	<span style="color: #000088;">$querystr</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;HAVING count(*) = &quot;</span> <span style="color: #339933;">.</span> <span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$metaDataList</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000088;">$querystr</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">&quot;) AND p.post_status = 'publish' &quot;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000088;">$metaResults</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$wpdb</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_results</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$querystr</span><span style="color: #339933;">,</span> OBJECT<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>					
	<span style="color: #b1b100;">return</span> <span style="color: #000088;">$metaResults</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>Example Usage</h3>
<p>Place this inside your category.php or whatever template file you are using to display the results from.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #666666; font-style: italic;">//Create your array of custom field key / values to filter to</span>
	<span style="color: #000088;">$metaDataList</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
	<span style="color: #0000ff;">'rideshare_event'</span>	<span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Ottawa Blues Fest'</span><span style="color: #339933;">,</span>
	<span style="color: #0000ff;">'rideshare_type'</span>	<span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Driver'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
&nbsp;
	<span style="color: #000088;">$resultList</span> <span style="color: #339933;">=</span> get_post_meta_multiple<span style="color: #009900;">&#40;</span><span style="color: #000088;">$metaDataList</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$resultList</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span>
	<span style="color: #666666; font-style: italic;">//Loop through each result post to display appropriate contents</span>
	<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$resultList</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$post</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span>
		setup_postdata<span style="color: #009900;">&#40;</span><span style="color: #000088;">$post</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Define your custom field key</span>
		<span style="color: #000088;">$key</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;rideshare_spaces&quot;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #666666; font-style: italic;">// Display value of custom field		</span>
		<span style="color: #b1b100;">echo</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: #000088;">$key</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>
&nbsp;
   	<span style="color: #b1b100;">endforeach</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">else</span> <span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
		&lt;p&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> _e<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'No rides are currently available for this event.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/p&gt;
	<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endif</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<h3>The future of the function?</h3>
<p>Once I have finished the prototype site that started this concept, I will attempt to package up the pieces in a more manageable method to share for wider use. In the interim, feel free to use and share in whatever ways are most convenience for you. Much like WordPress as a whole, I think this idea can continue to evolve in some great ways that will make it easier for designers, developers and clients to build / use sites based on it. Please link back to this post as you do so that I can keep tabs on how this idea evolves.</p>
]]></content:encoded>
			<wfw:commentRss>http://idealienstudios.com/blog/wordpress/custom-field-query-quandry/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>The Power of Custom Fields</title>
		<link>http://idealienstudios.com/blog/wordpress/power-of-custom-fields/</link>
		<comments>http://idealienstudios.com/blog/wordpress/power-of-custom-fields/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 01:29:34 +0000</pubDate>
		<dc:creator>Jamie</dc:creator>
				<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://idealienstudios.com/?p=652</guid>
		<description><![CDATA[Custom Fields are the way of enabling authors to store meta-data against an individual post / page in Wordpress. If you are doing more than just basic data storage / display with custom fields in Wordpress, the list of links in this post will be of great interest to you.]]></description>
			<content:encoded><![CDATA[<p>Custom Fields are the way of enabling authors to store meta-data against an individual post / page in WordPress. The Codex describes some <a href="http://codex.wordpress.org/Using_Custom_Fields">basic uses for this meta data</a> such as displaying your current mood, weather, or listening habits, etc. Compared to other parts of the posting process, custom fields have received very little active development. I&#8217;ve been using them since WP 2.3 and can&#8217;t recall much aside from UI improvements that kept it consistent with the rest of the updates in 2.5 / 2.7. However, many people have begun to explore significant ways to enhance the CMS capabilities of WordPress through the functionality that custom fields do offer.</p>
<h3>Learn to love get_post_meta</h3>
<p>The <a href="http://codex.wordpress.org/Function_Reference/get_post_meta">get_post_meta</a> function is a function you will come to know and love when working with custom fields in WordPress. It is used within the loop to present the value based on the name of the custom field.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #000088;">$key</span><span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;rideshare_name&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</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: #000088;">$key</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>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<h3>Beyond the basics</h3>
<p>If you are doing more than just basic data storage / display with custom fields, the following links / examples will be of interest to you:</p>
<ul>
<li><a href="http://webdesignernotebook.com/wordpress/wordpress-how-to-display-multiple-values-of-a-custom-field-key/">Web Designer Notebook</a> covers how to display multiple values for the same custom field name. This might be useful to display a list of ingredients for a recipe site or the parts needed for a set of DIY instructions.</li>
<li><a href="http://www.tutorial9.net/web-tutorials/add-thumbnails-to-wordpress-with-custom-fields/">Tutorial9</a> has a great tutorial on the many different ways to use custom fields for storing images to represent a post. After uploading the photo, you store the filename of a full-size or thumbnail photo in a custom field and use get_post_meta to extract / display in the appropriate theme file locations.</li>
<li><a href="http://www.cagintranet.com/archive/wordpress-tip-3-awesome-custom-field-tricks/">Cagintranet</a> has 3 custom field tricks that operate per post: custom read more tags, thumbnails of related posts and post-specific css overrides.</li>
<li><a href="http://www.livexp.net/wordpress/get-wordpress-custom-fields-outside-the-loop.html">LiveXP</a> shows how to get custom fields outside the loop. If creating a theme options page is beyond your skill, you can create a private page and store / retrieve the meta values from custom fields attached to that page wherever you need to.</li>
<li>Two Words: <a href="http://wordpress.org/extend/plugins/more-fields/">More Fields</a>. This plugin enables you to create custom write panels with custom field data types (radio buttons, drop-down, textbox, wysiwyg, etc). My most recent screencast gives a good overview of using More Fields to design a <a href="http://idealienstudios.com/blog/wordpress/template-retail-locations/">store location list</a> using the plugin.</li>
<li><em>Sidetrack Suggestion</em>: I can easily see (and hope that) the type of functionality More Fields has explored gets built into the core as a part of the post-types being considered for 3.0. With the drag-drop interface of the widgets management area applied to the design of write panels, this would be a fantastic feature of a future version of WordPress.</li>
<li><a href="http://justintadlock.com/tags/custom-fields">Justin Tadlock</a> has written immensely on the power of custom fields. If you want a crash course in custom fields, his site is a great place to start.</li>
<li><a href="http://www.smashingmagazine.com/2009/06/10/10-useful-wordpress-loop-hacks/">Smashing Magazine</a> shows how to get posts with a specific custom field and specific value as one of their 10 useful WordPress Loop hacks. This is invaluable when capturing data that you want to filter for in query loops.</li>
</ul>
<p>What actually inspired me to write this post was my recent efforts to build an elegant solution to a query quandry I was having related to custom fields &#8211; <a href="http://idealienstudios.com/blog/wordpress/custom-field-query-quandry/">How to filter / query for multiple custom field key / values</a>? The solution is one that could be of interest to theme / framework designers, plugin developers or possibly even the base concept for implementation into the core of advanced custom field functions WordPress.</p>
<p>If you have any other great custom field tutorials, please share them in the comments of this post.</p>
]]></content:encoded>
			<wfw:commentRss>http://idealienstudios.com/blog/wordpress/power-of-custom-fields/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Template &#8211; Retail Locations</title>
		<link>http://idealienstudios.com/blog/wordpress/template-retail-locations/</link>
		<comments>http://idealienstudios.com/blog/wordpress/template-retail-locations/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 13:36:06 +0000</pubDate>
		<dc:creator>Jamie</dc:creator>
				<category><![CDATA[ICE]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://idealienstudios.com/?p=647</guid>
		<description><![CDATA[Learn how to capture and display custom fields in a template using <a title="More Fields" href="http://wordpress.org/extend/plugins/more-fields/">More Fields</a>, a plugin that "enables you to define post types, which are custom Write/Edit pages that contains a pre-defined set of boxes"]]></description>
			<content:encoded><![CDATA[<div id="attachment_648" class="wp-caption alignright" style="width: 310px"><img class="size-medium wp-image-648" title="Retail Locations" src="http://idealienstudios.com/wp-content/uploads/projects_ice_09july9_retail-300x200.jpg" alt="Capture and display custom data types" width="300" height="200" /><p class="wp-caption-text">Capture and display custom data types using ICE and More Fields</p></div>
<p>Building on the concept of category templates which I started with the <a title="FAQ template tutorial" href="http://idealienstudios.com/projects/ice/template-demo-faq/">FAQ template tutorial</a> last week, this tutorial will cover how to capture and display custom fields in a template. What&#8217;s more, I&#8217;ll go through the step-by-step process of how to implement this using <a title="More Fields" href="http://wordpress.org/extend/plugins/more-fields/">More Fields</a> which is a plugin that &#8220;enables you to define post types, which are custom Write/Edit pages that contains a pre-defined set of boxes&#8221; that store their data behind the scenes in custom fields. The concepts from this tutorial will be of interest for anyone who:</p>
<ul>
<li>Has multiple categories of blog content with unique data to capture / present. Thumbnail per post, photo of the day or other customized items.</li>
<li>Uses WordPress as a CMS for unique page data types (event calendar, classified ads, business partners, etc)</li>
<li>Finds the selection of custom fields from a drop-down to not be the best user interface experience for capturing structured data.</li>
</ul>
<p><object width="590" height="346"><param name="movie" value="http://content.screencast.com/users/Idealien/folders/ICE/media/98b832dc-fc7e-4d98-8ac7-d60e39ccfb18/flvplayer.swf"></param><param name="quality" value="high"></param><param name="bgcolor" value="#FFFFFF"></param><param name="flashVars" value="thumb=http://content.screencast.com/users/Idealien/folders/ICE/media/98b832dc-fc7e-4d98-8ac7-d60e39ccfb18/FirstFrame.jpg&#038;containerwidth=590&#038;containerheight=346&#038;content=http://content.screencast.com/users/Idealien/folders/ICE/media/98b832dc-fc7e-4d98-8ac7-d60e39ccfb18/ICEMoreFields.mp4"></param><param name="allowFullScreen" value="true"></param><param name="scale" value="showall"></param><param name="allowScriptAccess" value="always"></param><param name="base" value="http://content.screencast.com/users/Idealien/folders/ICE/media/98b832dc-fc7e-4d98-8ac7-d60e39ccfb18/"></param>  <embed src="http://content.screencast.com/users/Idealien/folders/ICE/media/98b832dc-fc7e-4d98-8ac7-d60e39ccfb18/flvplayer.swf" quality="high" bgcolor="#FFFFFF" width="590" height="346" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/Idealien/folders/ICE/media/98b832dc-fc7e-4d98-8ac7-d60e39ccfb18/FirstFrame.jpg&#038;containerwidth=590&#038;containerheight=346&#038;content=http://content.screencast.com/users/Idealien/folders/ICE/media/98b832dc-fc7e-4d98-8ac7-d60e39ccfb18/ICEMoreFields.mp4" allowFullScreen="true" base="http://content.screencast.com/users/Idealien/folders/ICE/media/98b832dc-fc7e-4d98-8ac7-d60e39ccfb18/" scale="showall"></embed></object></p>
<p>Direct Video Link:<a href="http://www.screencast.com/t/2dcpYsSlk">http://www.screencast.com/t/2dcpYsSlk</a></p>
<h2>Example Code</h2>
<p>The only real code in this template that is unique is the retrieval of data from a <a href="http://codex.wordpress.org/Using_Custom_Fields">custom field</a> using the <a href="http://codex.wordpress.org/Function_Reference/get_post_meta">get_post_meta</a> function.</p>
<p><strong>A single custom field retrieval</strong><br />
Place this example within the loop of an existing category / post template.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #000088;">$locationPhone</span> <span style="color: #339933;">=</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;">'locationPhone'</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>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$locationPhone</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
	&lt;div class=&quot;locationInfo&quot;&gt;
		&lt;h4&gt;Phone Number&lt;/h4&gt;
		<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span>  <span style="color: #000088;">$locationPhone</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
	&lt;/div&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p><strong>Full retail location fields</strong><br />
This example is the full loop for use within a category.php file to display the contents of custom fields named: location</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>have_posts<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
	<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>have_posts<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> the_post<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
&nbsp;
	&lt;h2&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> the_title<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span><span style="color: #0000ff;">''</span><span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/h2&gt;
	<span style="color: #000000; font-weight: bold;">&lt;?php</span> the_content<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
	&lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
&nbsp;
	<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #000088;">$locationAddress</span> <span style="color: #339933;">=</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;">'locationAddress'</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>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$locationAddress</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
		&lt;div class=&quot;locationInfo&quot;&gt;
			&lt;h4&gt;Address&lt;/h4&gt;
			<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #000088;">$locationMapURL</span> <span style="color: #339933;">=</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;">'locationMapURL'</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> <span style="color: #000000; font-weight: bold;">?&gt;</span>
&nbsp;
			<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$locationMapURL</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #b1b100;">echo</span>  <span style="color: #0000ff;">&quot;&lt;a href='&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$locationMapURL</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;'&gt;&quot;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
			<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
&nbsp;
			<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span>  <span style="color: #000088;">$locationAddress</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
&nbsp;
			<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$locationMapURL</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;/a&gt;&quot;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
		&lt;/div&gt;
	<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
&nbsp;
&nbsp;
	<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #000088;">$locationPhone</span> <span style="color: #339933;">=</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;">'locationPhone'</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>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$locationPhone</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
		&lt;div class=&quot;locationInfo&quot;&gt;
			&lt;h4&gt;Phone Number&lt;/h4&gt;
			<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span>  <span style="color: #000088;">$locationPhone</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
		&lt;/div&gt;
	<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
&nbsp;
	&lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
&nbsp;
	<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #000088;">$locationHours</span> <span style="color: #339933;">=</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;">'locationHours'</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>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$locationHours</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
		&lt;div class=&quot;locationInfo&quot;&gt;
			&lt;h4&gt;Business Hours&lt;/h4&gt;
			<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span>  <span style="color: #000088;">$locationHours</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
		&lt;/div&gt;
	<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #000088;">$locationWebsite</span> <span style="color: #339933;">=</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;">'locationWebsite'</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>
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$locationWebsite</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
		&lt;div class=&quot;locationInfo&quot;&gt;
			&lt;h4&gt;Website&lt;/h4&gt;
			<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span>  <span style="color: #0000ff;">&quot;&lt;a href='&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$locationWebsite</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;'&gt;&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$locationWebsite</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;&lt;/a&gt;&quot;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
		&lt;/div&gt;
	<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
&nbsp;
	&lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
&nbsp;
	<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endwhile</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">else</span> <span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
&nbsp;
	&lt;p&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> _e<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Sorry, no posts matched your criteria.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/p&gt;
&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endif</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://idealienstudios.com/blog/wordpress/template-retail-locations/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

