<?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>Ryan Spilhaus dot com</title>
	<atom:link href="http://ryanspilhaus.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ryanspilhaus.com</link>
	<description>Building the Internet One Pixel at a Time</description>
	<lastBuildDate>Wed, 23 Jan 2013 17:29:01 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>This is a test</title>
		<link>http://ryanspilhaus.com/2013/01/this-is-a-test/</link>
		<comments>http://ryanspilhaus.com/2013/01/this-is-a-test/#comments</comments>
		<pubDate>Wed, 23 Jan 2013 17:29:01 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://ryanspilhaus.com/?p=1766</guid>
		<description><![CDATA[No, I haven&#8217;t started blogging again. Merely just testing the Mailchimp RSS to Email functionality. Here&#8217;s a link to something awesome.]]></description>
				<content:encoded><![CDATA[<p>No, I haven&#8217;t started blogging again. Merely just testing the Mailchimp RSS to Email functionality.</p>
<p>Here&#8217;s a <a href="http://www.youtube.com/watch?v=rGKfrgqWcv0&#038;list=PLKLvY5HlozhJEaR_sSOrYCcmNBDAB83uZ&#038;index=3" target="_blank">link to something awesome</a>. </p>
]]></content:encoded>
			<wfw:commentRss>http://ryanspilhaus.com/2013/01/this-is-a-test/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Best Pizza in DC</title>
		<link>http://ryanspilhaus.com/2012/02/best-pizza-in-dc/</link>
		<comments>http://ryanspilhaus.com/2012/02/best-pizza-in-dc/#comments</comments>
		<pubDate>Thu, 01 Mar 2012 02:25:24 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://ryanspilhaus.com/?p=1701</guid>
		<description><![CDATA[Do you like pizza? Not just any pizza, but good pizza? Then you&#8217;re in luck, because DC has some of the best pizza around! My Fiance and I have been to quite a few of the better pizza places around and I&#8217;ve come up with a little chart to rank them all. Note &#8211; I [...]]]></description>
				<content:encoded><![CDATA[<p>Do you like pizza? Not just any pizza, but <em>good</em> pizza? Then you&#8217;re in luck, because DC has some of the best pizza around!</p>
<p>My Fiance and I have been to quite a few of the better pizza places around and I&#8217;ve come up with a little chart to rank them all.</p>
<p>Note &#8211; I like the classic Neapolitan pizza &#8211; like you get in Italy. I am not as big of a fan of the deep dish ones that come out of Chicago &#8211; though they aren&#8217;t bad. But keep this in mind when reading the rankings.</p>
<p><strong>The Champion</strong></p>
<p>1. <a href="http://www.ilcanaledc.com/">Il Canale</a> &#8211; This pizza is absolutely sublime. And they&#8217;re pretty big too! This little place in Georgetown is absolutely fantastic. They recently earned the official certification of the Associazione Verace Pizza Napoletana, an organization dedicated to preserving authentic Neapolitan pizza-making traditions, as being genuine Neapolitan Pizza.</p>
<p><em>UPDATE</em> 1A. Pupatella &#8211; Every bit as good as il Canale and 2Amys, but with a much more casual atmosphere. Plus, they&#8217;ve got killer Gelato!</p>
<p><strong>Fantastic</strong></p>
<p>2. <a href="http://www.2amyspizza.com/">2Amys</a> &#8211; The previous champ, and one of the only other places in DC with the official certification of the Associazione Verace Pizza Napoletana, they only reason they lose out to Il Canale is because the atmosphere can be a bit of a zoo sometimes. But make no mistake, this is fantastic pizza.</p>
<p>3. <a href="http://www.firebrickpizza.com/">Red Rocks</a> &#8211; This is the closest thing to the three above it. The thing that really separates the best pizza places from the rest is the way they do Margherita pizza. Go for the buffalo mozzarella. It&#8217;s worth it.</p>
<p><strong>Solid Dinner</strong></p>
<p>4. Pizzeria Paradiso* &#8211; Great pizzas &#8211; big enough to share. Very close to making it to the top level.<br />
5. Rustico* &#8211; Also extremely good. A bit pricier than some of the others here, but delicious.<br />
6. Matchbox &#8211; Cool atmosphere and good pizzas.<br />
7. Fireworks* &#8211; Good pizzas. Not the Italian style I prefer, but still solid.<br />
8. Pete&#8217;s New Haven Style Apizza &#8211; Huge pizzas with very nice ingredients. The New Haven Style is a bit different than the others on the list, but still good.<br />
9. Lost Dog Cafe* &#8211; About 100 different pizzas (seriously) and sandwiches. Pretty darn good.</p>
<p><strong>Don&#8217;t bother</strong><br />
10. Joe&#8217;s Place Pizza &amp; Pasta<br />
11. Dominoes<br />
12. Papa Johns<br />
13. Pizza Hut</p>
<p>*I don&#8217;t drink, but I have been told that these ones have <em>superb</em> beer menus.</p>
<p>Anyhow, enjoy your pizza! There&#8217;s a few that I still want to try, so don&#8217;t hate if I don&#8217;t have your favorite on here.</p>
]]></content:encoded>
			<wfw:commentRss>http://ryanspilhaus.com/2012/02/best-pizza-in-dc/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Best Music of 2011</title>
		<link>http://ryanspilhaus.com/2011/12/best-music-of-2011/</link>
		<comments>http://ryanspilhaus.com/2011/12/best-music-of-2011/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 18:26:10 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Music]]></category>

		<guid isPermaLink="false">http://ryanspilhaus.com/?p=1598</guid>
		<description><![CDATA[Here&#8217;s a list of my five favorite albums that have come out in 2011. In no particular order: Bon Iver &#8211; Bon Iver The Civil Wars &#8211; Barton Hollow James Vincent McMorrow &#8211; Early in the Morning John Mark McMillan &#8211; Economy Josh Garrels &#8211; Love &#038; War &#038; The Sea In Between Honorable Mentions [...]]]></description>
				<content:encoded><![CDATA[<p>Here&#8217;s a list of my five favorite albums that have come out in 2011. In no particular order:</p>
<p><strong>Bon Iver &#8211; <em>Bon Iver</em></strong> </p>
<p><iframe src="http://player.vimeo.com/video/27307766?byline=0&amp;portrait=0&amp;color=c2c2c2" width="400" height="225" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<p><strong>The Civil Wars &#8211; <em>Barton Hollow</em></strong></p>
<p><iframe src="http://player.vimeo.com/video/31557063?byline=0&amp;portrait=0" width="400" height="225" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe> </p>
<p><strong>James Vincent McMorrow &#8211; <em>Early in the Morning</em></strong></p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/Dv7WllrZOcI?rel=0" frameborder="0" allowfullscreen></iframe> </p>
<p><strong>John Mark McMillan &#8211; <em>Economy</em></strong></p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/cGWyRegxMWU?rel=0" frameborder="0" allowfullscreen></iframe></p>
<p><strong>Josh Garrels &#8211; <em>Love &#038; War &#038; The Sea In Between</em></strong></p>
<p><iframe src="http://player.vimeo.com/video/18269473?byline=0&amp;portrait=0" width="400" height="225" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<p><strong>Honorable Mentions</strong><br />
Andy Zipf &#8211; <em>Jealous Hands</em><br />
Florence &#038; The Machine &#8211; <em>Ceremonials</em><br />
Foster the People &#8211; <em>Torches</em><br />
Katie Herzig &#8211; <em>The Waking Sleep</em><br />
Matt Kearney &#8211; <em>Young Love</em></p>
]]></content:encoded>
			<wfw:commentRss>http://ryanspilhaus.com/2011/12/best-music-of-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Website!</title>
		<link>http://ryanspilhaus.com/2011/12/new-website/</link>
		<comments>http://ryanspilhaus.com/2011/12/new-website/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 03:56:07 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://ryanspilhaus.com/?p=1588</guid>
		<description><![CDATA[Just launched the newest version of this website! I&#8217;m excited about it for a few reasons: It&#8217;s responsive &#8211; adjust your browser window&#8217;s size to see what I mean. This also means that if you view it on an iPhone/iPad or other mobile device it will automatically adjust itself to be optimized for that device. [...]]]></description>
				<content:encoded><![CDATA[<p>Just launched the newest version of this website! I&#8217;m excited about it for a few reasons:</p>
<ol>
<li>It&#8217;s responsive &#8211; adjust your browser window&#8217;s size to see what I mean. This also means that if you view it on an iPhone/iPad or other mobile device it will automatically adjust itself to be optimized for that device.</li>
<li>It&#8217;s focused less on the blog (which I updated too rarely) and greatly improves the Portfolio (Work) section</li>
<li>It&#8217;s pretty cool looking &#8211; I did all the graphics myself.</li>
</ol>
<p>If you check out the portfolio page, you&#8217;ll notice it bears a similarity to Pinterest. I thought that was a pretty cool effect that I was able to do via an awesome jQuery plugin by <a href="http://www.desandro.com/">David Desandro</a> called <a href="http://masonry.desandro.com/">Masonry</a>.</p>
<p>Let me know what you think! </p>
]]></content:encoded>
			<wfw:commentRss>http://ryanspilhaus.com/2011/12/new-website/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Portfolio Updated</title>
		<link>http://ryanspilhaus.com/2011/07/portfolio-updated/</link>
		<comments>http://ryanspilhaus.com/2011/07/portfolio-updated/#comments</comments>
		<pubDate>Wed, 20 Jul 2011 20:26:40 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://ryanspilhaus.com/?p=1494</guid>
		<description><![CDATA[I realized recently that I&#8217;ve built a lot of websites without updating my portfolio. I went ahead and added some of my better stuff &#8211; so check it out!]]></description>
				<content:encoded><![CDATA[<p>I realized recently that I&#8217;ve built a lot of websites without updating my <a href="http://ryanspilhaus.com/portfolio/">portfolio</a>. </p>
<p>I went ahead and added some of my better stuff &#8211; so check it out! </p>
]]></content:encoded>
			<wfw:commentRss>http://ryanspilhaus.com/2011/07/portfolio-updated/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Website: Chrissy and David</title>
		<link>http://ryanspilhaus.com/2011/07/new-website-chrissy-and-david/</link>
		<comments>http://ryanspilhaus.com/2011/07/new-website-chrissy-and-david/#comments</comments>
		<pubDate>Thu, 07 Jul 2011 16:41:57 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://ryanspilhaus.com/?p=1448</guid>
		<description><![CDATA[So every once in a while you get a project where you can really have fun. Chrissy and David, two of our friends, are getting married in September and I thought it would be nice to create a unique and fun website to match their wedding and their personalities. Along with the wonderful centerpiece at [...]]]></description>
				<content:encoded><![CDATA[<p>So every once in a while you get a project where you can really have fun. Chrissy and David, two of our friends, are getting married in September and I thought it would be nice to create a unique and fun website to match their wedding and their personalities. </p>
<p>Along with the wonderful centerpiece at the top by the tremendously talented <a href="http://www.lettherebeblog.com/" target="_blank">Michael Sanders</a>, I created a fun vertically-scrolling website (as you click the navigation it will &#8220;jump&#8221; to the next page) for them that integrated Michael&#8217;s save the date graphics. I also came up with some of my own, so that was fun <img src='http://ryanspilhaus.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p>Anyhow, I used a couple of semi-advanced features in building it. I took advantage of the new CSS3 text-shadow property. You can see that in the headings and when you hover over the names of the wedding party <img src='http://ryanspilhaus.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  I also integrated some Google Web Fonts into it, so that was fun. </p>
<p>Check it out! <a href="http://www.chrissyanddavid.com" target="_blank">www.chrissyanddavid.com</a></p>
<p><img src="http://ryanspilhaus.com/wp-content/uploads/2011/07/chrissy+david.jpg" alt="" title="chrissy+david" width="500" height="2314" class="alignnone size-full wp-image-1449" /></p>
]]></content:encoded>
			<wfw:commentRss>http://ryanspilhaus.com/2011/07/new-website-chrissy-and-david/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Create A Featured Image Section in WordPress without a Plugin</title>
		<link>http://ryanspilhaus.com/2011/06/create-featured-image-in-wordpress-without-a-plugin/</link>
		<comments>http://ryanspilhaus.com/2011/06/create-featured-image-in-wordpress-without-a-plugin/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 18:49:16 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://ryanspilhaus.com/?p=1435</guid>
		<description><![CDATA[One of the things that you will see on just about every single church website is a featured image secion. Seriously though, it&#8217;s on almost all of them. Generally for these you have two options if you&#8217;re building your site in WordPress: Use a plugin like Featured Content Gallery or Dynamic Content Gallery. Use a [...]]]></description>
				<content:encoded><![CDATA[<p>One of the things that you will see on just about every single church website is a featured image secion. Seriously though, it&#8217;s on almost all of them.</p>
<p>Generally for these you have two options if you&#8217;re building your site in WordPress:</p>
<ol>
<li>Use a plugin like <a href="http://www.featuredcontentgallery.com/" target="_blank">Featured Content Gallery</a> or <a href="http://www.studiograsshopper.ch/dynamic-content-gallery/" target="_blank">Dynamic Content Gallery</a>. </li>
<li>Use a hard-coded jQuery slider that you have to go into the theme templates to change. </li>
</ol>
<p>We always used Featured Content Gallery on our sites since it was the most elegant and easiest way for people who don&#8217;t know how to code to create a featured content gallery. However, using a plugin has several shortcomings:</p>
<ol>
<li>Slows down your site &#8211; the more plugins you use the slower it gets </li>
<li>Can be confusing &#8211; Featured Content Gallery requires multiple steps and involves things that novices &#038; people unfamiliar with obscure WordPress functions would have difficulty learning</li>
<li>Inflexible &#8211; You don&#8217;t have much room to customize the plugin beyond what&#8217;s already built in, and it can be harder to make it do specific things. For example, we couldn&#8217;t link to an external website.</li>
</ol>
<p>Anyhow, there&#8217;s plenty of reasons you&#8217;d want to do this without a plugin. So let&#8217;s find out how!</p>
<p>I&#8217;m going to assume a few things:</p>
<ul>
<li>That you have a fairly decent grasp of CSS</li>
<li>That you&#8217;re comfortable editing WordPress&#8217; template files</li>
</ul>
<blockquote><p><em>Note: Essentially this tutorial is a manual for combining two other excellent tutorials &#8211; <a href="http://www.sohtanaka.com/web-design/automatic-image-slider-w-css-jquery/" target="_blank">Soh Tanaka&#8217;s excellent Automatic Image Slider</a> and <a href="http://forthelose.org/how-to-create-a-theme-options-page-for-your-wordpress-theme" target="_blank">Ralph&#8217;s Theme Options Tutorial over at ForTheLose.org</a></em></p></blockquote>
<p>Steps:</p>
<ol>
<li>Add jQuery Slider</li>
<li>Add Theme Options to control it from the admin console</li>
<li>Integrate Theme Options to slider so that it works!</li>
</ol>
<h3>Step 1 &#8211; Add jQuery Slider</h3>
<p>Instead of re-inventing the wheel here, I&#8217;m going to have you go over to <a href="http://www.sohtanaka.com/web-design/automatic-image-slider-w-css-jquery/" target="_blank">Soh Tanaka&#8217;s Automatic Image Slider</a> tutorial and add it to your site. </p>
<p>You&#8217;ll have to do a <em>few</em> things differently since you&#8217;re in WordPress (and a few things he doesn&#8217;t cover that you might not know):</p>
<p><strong>Call jQuery from header.php</strong></p>
<p>WordPress actually bundles jQuery by default, so it&#8217;s really easy to grab it. Paste the following above wp_head in your header.php</p>
<pre class="brush: php; html-script: true; title: ; notranslate">
		&lt;?php wp_enqueue_script( 'jquery' ); ?&gt;
</pre>
<p>And there you go! If you view the source code you should see jQuery loaded up. There&#8217;s a few other/better ways to do this, and if you&#8217;re curious you can Google it, but this is the quickest way for our purposes. </p>
<p>Next you&#8217;ll want to put the jQuery code he gives you and put it in its own file and call it. </p>
<p>Create a folder in your theme files called js and create a file called script.js and place it in there. </p>
<p>In that file, paste the following code:</p>
<pre class="brush: jscript; title: ; notranslate">
jQuery(document).ready(function(){

// Code Goes Below this Line

	//Show the paging and activate its first link
			jQuery(&quot;.paging&quot;).show();
			jQuery(&quot;.paging a:first&quot;).addClass(&quot;active&quot;);

	//Get size of the image, how many images there are, then determin the size of the image reel.
			var imageWidth = jQuery(&quot;.window&quot;).width();
			var imageSum = jQuery(&quot;.image_reel img&quot;).size();
			var imageReelWidth = imageWidth * imageSum;

	//Adjust the image reel to its new size
			jQuery(&quot;.image_reel&quot;).css({'width' : imageReelWidth});
			
//Paging  and Slider Function
	rotate = function(){
    var triggerID = jQueryactive.attr(&quot;rel&quot;) - 1; //Get number of times to slide
    var image_reelPosition = triggerID * imageWidth; //Determines the distance the image reel needs to slide

    jQuery(&quot;.paging a&quot;).removeClass('active'); //Remove all active class
    jQueryactive.addClass('active'); //Add active class (the jQueryactive is declared in the rotateSwitch function)

    //Slider Animation
    jQuery(&quot;.image_reel&quot;).animate({
        left: -image_reelPosition
    }, 500 );

}; 

//Rotation  and Timing Event
	rotateSwitch = function(){
    play = setInterval(function(){ //Set timer - this will repeat itself every 7 seconds
        jQueryactive = jQuery('.paging a.active').next(); //Move to the next paging
        if ( jQueryactive.length === 0) { //If paging reaches the end...
            jQueryactive = jQuery('.paging a:first'); //go back to first
        }
        rotate(); //Trigger the paging and slider function
    }, 7000); //Timer speed in milliseconds (7 seconds)
};

	rotateSwitch(); //Run function on launch		
	
//On Hover
jQuery(&quot;.image_reel a&quot;).hover(function() {
    clearInterval(play); //Stop the rotation
}, function() {
    rotateSwitch(); //Resume rotation timer
});	

//On Click
jQuery(&quot;.paging a&quot;).click(function() {
    jQueryactive = jQuery(this); //Activate the clicked paging
    //Reset Timer
    clearInterval(play); //Stop the rotation
    rotate(); //Trigger rotation immediately
    rotateSwitch(); // Resume rotation timer
    return false; //Prevent browser jump to link anchor
});	

// Code Goes Above this Line	
	
});
</pre>
<p>The reason we&#8217;re doing it slightly differently is because WordPress doesn&#8217;t play very nicely with the $ that jQuery uses, so we&#8217;ll replace it with the original &#8220;jQuery&#8221; in our code. Other than that it&#8217;s the same.  </p>
<p>Ok &#8211; now you want to call that from your header, so we&#8217;ll go ahead and add it right <strong>below</strong> wp_head this time:</p>
<pre class="brush: php; html-script: true; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php bloginfo(&quot;template_url&quot;); ?&gt;/js/script.js&quot;&gt;&lt;/script&gt;
</pre>
<p>This calls your script.js. Hooray!</p>
<p>Ok, so you should be all set with the image slider. We&#8217;re not going to be touching the CSS, but if you need to adjust the size of the slider (or the little page ribbon) you can change it there. I prefer to have the page numbers lower to the bottom of the slider myself, but it&#8217;s up to you. </p>
<p>Your HTML should look like this:</p>
<pre class="brush: php; html-script: true; title: ; notranslate">
&lt;div class=&quot;main_view&quot;&gt;
    &lt;div class=&quot;window&quot;&gt;
        &lt;div class=&quot;image_reel&quot;&gt;
            &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;reel_1.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
            &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;reel_2.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
            &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;reel_3.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
            &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;reel_4.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class=&quot;paging&quot;&gt;
        &lt;a href=&quot;#&quot; rel=&quot;1&quot;&gt;1&lt;/a&gt;
        &lt;a href=&quot;#&quot; rel=&quot;2&quot;&gt;2&lt;/a&gt;
        &lt;a href=&quot;#&quot; rel=&quot;3&quot;&gt;3&lt;/a&gt;
        &lt;a href=&quot;#&quot; rel=&quot;4&quot;&gt;4&lt;/a&gt;
    &lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Pretty soon we&#8217;re going to hack that all up, so bear with me <img src='http://ryanspilhaus.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<h3>Step 2 &#8211; Create a Theme Options Page</h3>
<p>Ok &#8211; so we have our slider. Great. Now how do we get it so that the church administrator, who doesn&#8217;t know a div from a selector, can change the images and links easily? </p>
<p>That&#8217;s where Theme Options Pages come in handy. You&#8217;ve probably seen them &#8211; where you can change things about a theme such as the logo or colors or any number of things. I&#8217;m about to give you a lot of code that you will place in functions.php (note! Make a backup first&#8230;messing up your functions.php can REALLY mess up your site). </p>
<p>If your theme already has a functions.php, just copy everything from &#8220;start of theme options&#8221; to &#8220;end of theme options&#8221; and paste it in-between the &lt;?php at the beginning and the ? &gt; at the end</p>
<pre class="brush: php; html-script: true; title: ; notranslate">
&lt;?php
//code goes below this line
// Start of Theme Options
 
$themename = &quot;Theme Long Name&quot;;
$shortname = &quot;shortname&quot;;
$options = array (
 
array( &quot;name&quot; =&gt; &quot;Feature #1&quot;,
	&quot;type&quot; =&gt; &quot;title&quot;),
 
array( &quot;type&quot; =&gt; &quot;open&quot;),
 
array( &quot;name&quot; =&gt; &quot;Feature #1 Image&quot;,
	&quot;desc&quot; =&gt; &quot;Place the file url of the image you wish to use for Feature #1.&quot;,
	&quot;id&quot; =&gt; $shortname.&quot;_feature_1_img&quot;,
	&quot;type&quot; =&gt; &quot;text&quot;,
	&quot;std&quot; =&gt; &quot;&quot;),
	
array( &quot;name&quot; =&gt; &quot;Feature #1 Link&quot;,
	&quot;desc&quot; =&gt; &quot;Place the url of the page you want Feature #1 to link to.&quot;,
	&quot;id&quot; =&gt; $shortname.&quot;_feature_1_link&quot;,
	&quot;type&quot; =&gt; &quot;text&quot;,
	&quot;std&quot; =&gt; &quot;&quot;),	
	
array( &quot;name&quot; =&gt; &quot;Feature #2&quot;,
	&quot;type&quot; =&gt; &quot;title&quot;),
array( &quot;type&quot; =&gt; &quot;open&quot;),

array ( &quot;name&quot; =&gt; &quot;Feature #2 Checkbox&quot;,
	&quot;desc&quot; =&gt; &quot;Check this box to show Feature #2&quot;,
	&quot;id&quot; =&gt; $shortname.&quot;_feature_2_enable&quot;,
	&quot;type&quot; =&gt; &quot;checkbox&quot;,
	&quot;std&quot; =&gt; &quot;false&quot;),
	
array( &quot;name&quot; =&gt; &quot;Feature #2 Image&quot;,
	&quot;desc&quot; =&gt; &quot;Place the file url of the image you wish to use for Feature #2.&quot;,
	&quot;id&quot; =&gt; $shortname.&quot;_feature_2_img&quot;,
	&quot;type&quot; =&gt; &quot;text&quot;,
	&quot;std&quot; =&gt; &quot;&quot;),
	
array( &quot;name&quot; =&gt; &quot;Feature #2 Link&quot;,
	&quot;desc&quot; =&gt; &quot;Place the url of the page you want Feature #2 to link to.&quot;,
	&quot;id&quot; =&gt; $shortname.&quot;_feature_2_link&quot;,
	&quot;type&quot; =&gt; &quot;text&quot;,
	&quot;std&quot; =&gt; &quot;&quot;),		
	
array( &quot;name&quot; =&gt; &quot;Feature #3&quot;,
	&quot;type&quot; =&gt; &quot;title&quot;),
array( &quot;type&quot; =&gt; &quot;open&quot;),

array ( &quot;name&quot; =&gt; &quot;Feature #3 Checkbox&quot;,
	&quot;desc&quot; =&gt; &quot;Check this box to show Feature #3&quot;,
	&quot;id&quot; =&gt; $shortname.&quot;_feature_3_enable&quot;,
	&quot;type&quot; =&gt; &quot;checkbox&quot;,
	&quot;std&quot; =&gt; &quot;false&quot;),
	
array( &quot;name&quot; =&gt; &quot;Feature #3 Image&quot;,
	&quot;desc&quot; =&gt; &quot;Place the file url of the image you wish to use for Feature #3.&quot;,
	&quot;id&quot; =&gt; $shortname.&quot;_feature_3_img&quot;,
	&quot;type&quot; =&gt; &quot;text&quot;,
	&quot;std&quot; =&gt; &quot;&quot;),
	
array( &quot;name&quot; =&gt; &quot;Feature #3 Link&quot;,
	&quot;desc&quot; =&gt; &quot;Place the url of the page you want Feature #3 to link to.&quot;,
	&quot;id&quot; =&gt; $shortname.&quot;_feature_3_link&quot;,
	&quot;type&quot; =&gt; &quot;text&quot;,
	&quot;std&quot; =&gt; &quot;&quot;),		

array( &quot;name&quot; =&gt; &quot;Feature #4&quot;,
	&quot;type&quot; =&gt; &quot;title&quot;),
array( &quot;type&quot; =&gt; &quot;open&quot;),	
 
array ( &quot;name&quot; =&gt; &quot;Feature #4 Checkbox&quot;,
	&quot;desc&quot; =&gt; &quot;Check this box to show Feature #4&quot;,
	&quot;id&quot; =&gt; $shortname.&quot;_feature_4_enable&quot;,
	&quot;type&quot; =&gt; &quot;checkbox&quot;,
	&quot;std&quot; =&gt; &quot;false&quot;),
	
array( &quot;name&quot; =&gt; &quot;Feature #4 Image&quot;,
	&quot;desc&quot; =&gt; &quot;Place the file url of the image you wish to use for Feature #4.&quot;,
	&quot;id&quot; =&gt; $shortname.&quot;_feature_4_img&quot;,
	&quot;type&quot; =&gt; &quot;text&quot;,
	&quot;std&quot; =&gt; &quot;&quot;),
	
array( &quot;name&quot; =&gt; &quot;Feature #4 Link&quot;,
	&quot;desc&quot; =&gt; &quot;Place the url of the page you want Feature #4 to link to.&quot;,
	&quot;id&quot; =&gt; $shortname.&quot;_feature_4_link&quot;,
	&quot;type&quot; =&gt; &quot;text&quot;,
	&quot;std&quot; =&gt; &quot;&quot;),	 

array( &quot;name&quot; =&gt; &quot;Feature #5&quot;,
	&quot;type&quot; =&gt; &quot;title&quot;),
array( &quot;type&quot; =&gt; &quot;open&quot;), 
 
array ( &quot;name&quot; =&gt; &quot;Feature #5 Checkbox&quot;,
	&quot;desc&quot; =&gt; &quot;Check this box to show Feature #5&quot;,
	&quot;id&quot; =&gt; $shortname.&quot;_feature_5_enable&quot;,
	&quot;type&quot; =&gt; &quot;checkbox&quot;,
	&quot;std&quot; =&gt; &quot;false&quot;),
	
array( &quot;name&quot; =&gt; &quot;Feature #5 Image&quot;,
	&quot;desc&quot; =&gt; &quot;Place the file url of the image you wish to use for Feature #5.&quot;,
	&quot;id&quot; =&gt; $shortname.&quot;_feature_5_img&quot;,
	&quot;type&quot; =&gt; &quot;text&quot;,
	&quot;std&quot; =&gt; &quot;&quot;),
	
array( &quot;name&quot; =&gt; &quot;Feature #5 Link&quot;,
	&quot;desc&quot; =&gt; &quot;Place the url of the page you want Feature #5 to link to.&quot;,
	&quot;id&quot; =&gt; $shortname.&quot;_feature_5_link&quot;,
	&quot;type&quot; =&gt; &quot;text&quot;,
	&quot;std&quot; =&gt; &quot;&quot;),
	
array( &quot;name&quot; =&gt; &quot;Feature #6&quot;,
	&quot;type&quot; =&gt; &quot;title&quot;),
array( &quot;type&quot; =&gt; &quot;open&quot;),	
	
array ( &quot;name&quot; =&gt; &quot;Feature #6 Checkbox&quot;,
	&quot;desc&quot; =&gt; &quot;Check this box to show Feature #6&quot;,
	&quot;id&quot; =&gt; $shortname.&quot;_feature_6_enable&quot;,
	&quot;type&quot; =&gt; &quot;checkbox&quot;,
	&quot;std&quot; =&gt; &quot;false&quot;),
	
array( &quot;name&quot; =&gt; &quot;Feature #6 Image&quot;,
	&quot;desc&quot; =&gt; &quot;Place the file url of the image you wish to use for Feature #6.&quot;,
	&quot;id&quot; =&gt; $shortname.&quot;_feature_6_img&quot;,
	&quot;type&quot; =&gt; &quot;text&quot;,
	&quot;std&quot; =&gt; &quot;&quot;),
	
array( &quot;name&quot; =&gt; &quot;Feature #6 Link&quot;,
	&quot;desc&quot; =&gt; &quot;Place the url of the page you want Feature #6 to link to.&quot;,
	&quot;id&quot; =&gt; $shortname.&quot;_feature_6_link&quot;,
	&quot;type&quot; =&gt; &quot;text&quot;,
	&quot;std&quot; =&gt; &quot;&quot;),	
	
array( &quot;name&quot; =&gt; &quot;Feature #7&quot;,
	&quot;type&quot; =&gt; &quot;title&quot;),
array( &quot;type&quot; =&gt; &quot;open&quot;),	
	
array ( &quot;name&quot; =&gt; &quot;Feature #7 Checkbox&quot;,
	&quot;desc&quot; =&gt; &quot;Check this box to show Feature #7&quot;,
	&quot;id&quot; =&gt; $shortname.&quot;_feature_7_enable&quot;,
	&quot;type&quot; =&gt; &quot;checkbox&quot;,
	&quot;std&quot; =&gt; &quot;false&quot;),
	
array( &quot;name&quot; =&gt; &quot;Feature #7 Image&quot;,
	&quot;desc&quot; =&gt; &quot;Place the file url of the image you wish to use for Feature #7.&quot;,
	&quot;id&quot; =&gt; $shortname.&quot;_feature_7_img&quot;,
	&quot;type&quot; =&gt; &quot;text&quot;,
	&quot;std&quot; =&gt; &quot;&quot;),
	
array( &quot;name&quot; =&gt; &quot;Feature #7 Link&quot;,
	&quot;desc&quot; =&gt; &quot;Place the url of the page you want Feature #7 to link to.&quot;,
	&quot;id&quot; =&gt; $shortname.&quot;_feature_7_link&quot;,
	&quot;type&quot; =&gt; &quot;text&quot;,
	&quot;std&quot; =&gt; &quot;&quot;),		
 
array( &quot;type&quot; =&gt; &quot;close&quot;)
 
);

function mytheme_add_admin() {
 
global $themename, $shortname, $options;
 
if ( $_GET['page'] == basename(__FILE__) ) {
 
if ( 'save' == $_REQUEST['action'] ) {
 
foreach ($options as $value) {
update_option( $value['id'], $_REQUEST[ $value['id'] ] ); }
 
foreach ($options as $value) {
if( isset( $_REQUEST[ $value['id'] ] ) ) { update_option( $value['id'], $_REQUEST[ $value['id'] ]  ); } else { delete_option( $value['id'] ); } }
 
header(&quot;Location: themes.php?page=functions.php&amp;saved=true&quot;);
die;
 
} else if( 'reset' == $_REQUEST['action'] ) {
 
foreach ($options as $value) {
delete_option( $value['id'] ); }
 
header(&quot;Location: themes.php?page=functions.php&amp;reset=true&quot;);
die;
 
}
}
 
add_theme_page($themename.&quot; Options&quot;, &quot;&quot;.$themename.&quot; Options&quot;, 'edit_themes', basename(__FILE__), 'mytheme_admin');
 
}
 
function mytheme_admin() {
 
global $themename, $shortname, $options;
 
if ( $_REQUEST['saved'] ) echo '&lt;div id=&quot;message&quot; class=&quot;updated fade&quot;&gt;&lt;p&gt;&lt;strong&gt;'.$themename.' settings saved.&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;';
if ( $_REQUEST['reset'] ) echo '&lt;div id=&quot;message&quot; class=&quot;updated fade&quot;&gt;&lt;p&gt;&lt;strong&gt;'.$themename.' settings reset.&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;';
 
?&gt;
&lt;div class=&quot;wrap&quot;&gt;
&lt;h2&gt;&lt;?php echo $themename; ?&gt; Settings&lt;/h2&gt;
 
&lt;form method=&quot;post&quot;&gt;
 
&lt;?php foreach ($options as $value) {
switch ( $value['type'] ) {
 
case &quot;open&quot;:
?&gt;
&lt;table width=&quot;800&quot; border=&quot;0&quot; style=&quot;padding:10px; margin-bottom: 20px;&quot;&gt;
 
&lt;?php break;
 
case &quot;close&quot;:
?&gt;
 
&lt;/table&gt;&lt;br /&gt;
 
&lt;?php break;
 
case &quot;title&quot;:
?&gt;
&lt;table width=&quot;810px&quot; border=&quot;0&quot; style=&quot;background:#fff; padding:0px 10px;margin: 0 0 0 -10px;height:60px;&quot;&gt;&lt;tr&gt;
&lt;td colspan=&quot;2&quot;&gt;&lt;h3 style=&quot;font-family:Arial,Helvetica,georgia,sans-serif;color:#333;&quot;&gt;&lt;?php echo $value['name']; ?&gt;&lt;/h3&gt;&lt;/td&gt;
&lt;/tr&gt;
 
&lt;?php break;
 
case 'text':
?&gt;
 
&lt;tr&gt;
&lt;td width=&quot;100px&quot; rowspan=&quot;2&quot; valign=&quot;middle&quot;&gt;&lt;strong&gt;&lt;?php echo $value['name']; ?&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td width=&quot;500px&quot;&gt;&lt;input style=&quot;width:400px;&quot; name=&quot;&lt;?php echo $value['id']; ?&gt;&quot; id=&quot;&lt;?php echo $value['id']; ?&gt;&quot; type=&quot;&lt;?php echo $value['type']; ?&gt;&quot; value=&quot;&lt;?php if ( get_settings( $value['id'] ) != &quot;&quot;) { echo get_settings( $value['id'] ); } else { echo $value['std']; } ?&gt;&quot; /&gt;&lt;/td&gt;
&lt;/tr&gt;
 
&lt;tr&gt;
&lt;td&gt;&lt;small&gt;&lt;?php echo $value['desc']; ?&gt;&lt;/small&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;margin-bottom:5px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
 
&lt;?php
break;
 
case 'textarea':
?&gt;
 
&lt;tr&gt;
&lt;td width=&quot;20%&quot; rowspan=&quot;2&quot; valign=&quot;middle&quot;&gt;&lt;strong&gt;&lt;?php echo $value['name']; ?&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td width=&quot;80%&quot;&gt;&lt;textarea name=&quot;&lt;?php echo $value['id']; ?&gt;&quot; style=&quot;width:400px; height:200px;&quot; type=&quot;&lt;?php echo $value['type']; ?&gt;&quot; cols=&quot;&quot; rows=&quot;&quot;&gt;&lt;?php if ( get_settings( $value['id'] ) != &quot;&quot;) { echo get_settings( $value['id'] ); } else { echo $value['std']; } ?&gt;&lt;/textarea&gt;&lt;/td&gt;
 
&lt;/tr&gt;
 
&lt;tr&gt;
&lt;td&gt;&lt;small&gt;&lt;?php echo $value['desc']; ?&gt;&lt;/small&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;margin-bottom:5px;border-bottom:1px dotted #000000;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
 
&lt;?php
break;
 
case 'select':
?&gt;
&lt;tr&gt;
&lt;td width=&quot;20%&quot; rowspan=&quot;2&quot; valign=&quot;middle&quot;&gt;&lt;strong&gt;&lt;?php echo $value['name']; ?&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td width=&quot;80%&quot;&gt;&lt;select style=&quot;width:240px;&quot; name=&quot;&lt;?php echo $value['id']; ?&gt;&quot; id=&quot;&lt;?php echo $value['id']; ?&gt;&quot;&gt;&lt;?php foreach ($value['options'] as $option) { ?&gt;&lt;option&lt;?php if ( get_settings( $value['id'] ) == $option) { echo ' selected=&quot;selected&quot;'; } elseif ($option == $value['std']) { echo ' selected=&quot;selected&quot;'; } ?&gt;&gt;&lt;?php echo $option; ?&gt;&lt;/option&gt;&lt;?php } ?&gt;&lt;/select&gt;&lt;/td&gt;
&lt;/tr&gt;
 
&lt;tr&gt;
&lt;td&gt;&lt;small&gt;&lt;?php echo $value['desc']; ?&gt;&lt;/small&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;margin-bottom:5px;border-bottom:1px dotted #000000;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
 
&lt;?php
break;
 
case &quot;checkbox&quot;:
?&gt;
&lt;tr&gt;
&lt;td width=&quot;100px&quot; rowspan=&quot;2&quot; valign=&quot;middle&quot;&gt;&lt;strong&gt;&lt;?php echo $value['name']; ?&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td width=&quot;500px&quot;&gt;&lt;?php if(get_option($value['id'])){ $checked = &quot;checked=\&quot;checked\&quot;&quot;; }else{ $checked = &quot;&quot;;} ?&gt;
&lt;input type=&quot;checkbox&quot; name=&quot;&lt;?php echo $value['id']; ?&gt;&quot; id=&quot;&lt;?php echo $value['id']; ?&gt;&quot; value=&quot;true&quot; &lt;?php echo $checked; ?&gt; /&gt;
&lt;/td&gt;
&lt;/tr&gt;
 
&lt;tr&gt;
&lt;td&gt;&lt;small&gt;&lt;?php echo $value['desc']; ?&gt;&lt;/small&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;margin-bottom:5px;&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
 
&lt;?php break;
 
}
}
?&gt;
 
&lt;p class=&quot;submit&quot;&gt;
&lt;input name=&quot;save&quot; type=&quot;submit&quot; value=&quot;Save changes&quot; /&gt;
&lt;input type=&quot;hidden&quot; name=&quot;action&quot; value=&quot;save&quot; /&gt;
&lt;/p&gt;
&lt;/form&gt;
&lt;form method=&quot;post&quot;&gt;
&lt;p class=&quot;submit&quot;&gt;
&lt;input name=&quot;reset&quot; type=&quot;submit&quot; value=&quot;Reset&quot; /&gt;
&lt;input type=&quot;hidden&quot; name=&quot;action&quot; value=&quot;reset&quot; /&gt;
&lt;/p&gt;
&lt;/form&gt;


 
&lt;?php
}

add_action('admin_menu', 'mytheme_add_admin');
// End of Theme Options

?&gt;
</pre>
<p>That&#8217;s a lot! I won&#8217;t go into too much detail, but basically we&#8217;re creating 7 featured image slots, with 2-7 having a checkbox to activate (1 should always be active&#8230;can&#8217;t have a blank featured image slider&#8230;). </p>
<p>You will want to change Theme Long Name to your theme&#8217;s name/church&#8217;s name (this is what shows up in the admin console, so maybe even do &#8220;Church Name&#8217;s Featured Image&#8221; since it adds &#8220;options&#8221; automatically after it). Then change shortname to a shortname for your theme that you&#8217;ll use later. So if you theme&#8217;s name is Grace Point Church you could do gpchurch as the shortname. </p>
<p>Note: This was adapted from <a href="http://forthelose.org/how-to-create-a-theme-options-page-for-your-wordpress-theme" target="_blank">Ralph&#8217;s Theme Options Tutorial over at ForTheLose.org</a>. There&#8217;s a few other tutorials out there, but this is the easiest I&#8217;ve found.</p>
<p>You should have something that looks like the below now:</p>
<p><img src="http://ryanspilhaus.com/wp-content/uploads/2011/06/featuredimagesettings.png" alt="" title="featuredimagesettings" width="500" height="314" class="alignnone size-full wp-image-1441" /></p>
<p>and you should have a navigation item like this under &#8220;Appearance&#8221;:<br />
<img src="http://ryanspilhaus.com/wp-content/uploads/2011/06/themeoptions.png" alt="" title="themeoptions" width="162" height="165" class="alignnone size-full wp-image-1442" /></p>
<p>Now, we&#8217;re going to need to call the theme options on our page. Create a file called get-theme-options.php and place the following in it:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
// this is crucial for the theme options to work, so don't mess with it. <img src='http://ryanspilhaus.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  
    global $options;
    foreach ($options as $value) {
        if (get_settings( $value['id'] ) === FALSE) { 
            $$value['id'] = $value['std']; 
        } else { 
            $$value['id'] = get_settings( $value['id'] ); 
        }
    }
?&gt;
</pre>
<p>Next &#8211; on the page that you&#8217;re going to be using the featured image slider on, paste the following <strong>below</strong> get_header()</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php include (TEMPLATEPATH.'/get-theme-options.php'); ?&gt;
</pre>
<p>That calls our theme options for us! </p>
<h3>Step 3 &#8211; Integrate</h3>
<p>Ok, so we&#8217;ve got our Slider in place and our Options in the admin console. Now, let&#8217;s add the code to connect the two!</p>
<p>Replace the following:</p>
<pre class="brush: php; html-script: true; title: ; notranslate">
&lt;div class=&quot;main_view&quot;&gt;
    &lt;div class=&quot;window&quot;&gt;
        &lt;div class=&quot;image_reel&quot;&gt;
            &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;reel_1.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
            &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;reel_2.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
            &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;reel_3.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
            &lt;a href=&quot;#&quot;&gt;&lt;img src=&quot;reel_4.jpg&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class=&quot;paging&quot;&gt;
        &lt;a href=&quot;#&quot; rel=&quot;1&quot;&gt;1&lt;/a&gt;
        &lt;a href=&quot;#&quot; rel=&quot;2&quot;&gt;2&lt;/a&gt;
        &lt;a href=&quot;#&quot; rel=&quot;3&quot;&gt;3&lt;/a&gt;
        &lt;a href=&quot;#&quot; rel=&quot;4&quot;&gt;4&lt;/a&gt;
    &lt;/div&gt;
&lt;/div&gt;
</pre>
<p>with this:</p>
<pre class="brush: php; html-script: true; title: ; notranslate">
&lt;div class=&quot;main_view&quot;&gt;
   				 &lt;div class=&quot;window&quot;&gt;
     				   &lt;div class=&quot;image_reel&quot;&gt;
     				   		&lt;!--Start Feature 1--&gt;
     				      	 	&lt;a href=&quot;&lt;?php echo $shortname_feature_1_link; ?&gt;&quot;&gt;&lt;img src=&quot;&lt;?php echo $shortname_feature_1_img; ?&gt;&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
							&lt;!--End Feature 1--&gt;	     				      	 	
							 	&lt;!--Feature #1 must always be enabled--&gt;
							 
       					 	&lt;!--Start Feature 2--&gt;
       					 		&lt;?if ($shortname_feature_2_enable == &quot;false&quot;) { ?&gt;
									&lt;!--DO NOTHING--&gt;
									&lt;? } else { ?&gt;
									&lt;a href=&quot;&lt;?php echo $shortname_feature_2_link; ?&gt;&quot;&gt;&lt;img src=&quot;&lt;?php echo $shortname_feature_2_img; ?&gt;&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
									&lt;? } ?&gt;
       					 	&lt;!--End Feature 2--&gt;	
       					 	
       					 	&lt;!--Start Feature 3--&gt;
       					 		&lt;?if ($shortname_feature_3_enable == &quot;false&quot;) { ?&gt;
									&lt;!--DO NOTHING--&gt;
									&lt;? } else { ?&gt;
									&lt;a href=&quot;&lt;?php echo $shortname_feature_3_link; ?&gt;&quot;&gt;&lt;img src=&quot;&lt;?php echo $shortname_feature_3_img; ?&gt;&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
									&lt;? } ?&gt;
       					 	&lt;!--End Feature 3--&gt;	
       					 	
       					 	&lt;!--Start Feature 4--&gt;
       					 		&lt;?if ($shortname_feature_4_enable == &quot;false&quot;) { ?&gt;
									&lt;!--DO NOTHING--&gt;
									&lt;? } else { ?&gt;
									&lt;a href=&quot;&lt;?php echo $shortname_feature_4_link; ?&gt;&quot;&gt;&lt;img src=&quot;&lt;?php echo $shortname_feature_4_img; ?&gt;&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
									&lt;? } ?&gt;
       					 	&lt;!--End Feature 4--&gt;
       					 	
       					 	&lt;!--Start Feature 5--&gt;
       					 		&lt;?if ($shortname_feature_5_enable == &quot;false&quot;) { ?&gt;
									&lt;!--DO NOTHING--&gt;
									&lt;? } else { ?&gt;
									&lt;a href=&quot;&lt;?php echo $shortname_feature_5_link; ?&gt;&quot;&gt;&lt;img src=&quot;&lt;?php echo $shortname_feature_5_img; ?&gt;&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
									&lt;? } ?&gt;
       					 	&lt;!--End Feature 5--&gt;
       					 	
       					 	&lt;!--Start Feature 6--&gt;
       					 		&lt;?if ($shortname_feature_6_enable == &quot;false&quot;) { ?&gt;
									&lt;!--DO NOTHING--&gt;
									&lt;? } else { ?&gt;
									&lt;a href=&quot;&lt;?php echo $shortname_feature_6_link; ?&gt;&quot;&gt;&lt;img src=&quot;&lt;?php echo $shortname_feature_6_img; ?&gt;&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
									&lt;? } ?&gt;
       					 	&lt;!--End Feature 6--&gt;
       					 	
       					 	&lt;!--Start Feature 7--&gt;
       					 		&lt;?if ($shortname_feature_7_enable == &quot;false&quot;) { ?&gt;
									&lt;!--DO NOTHING--&gt;
									&lt;? } else { ?&gt;
									&lt;a href=&quot;&lt;?php echo $shortname_feature_7_link; ?&gt;&quot;&gt;&lt;img src=&quot;&lt;?php echo $shortname_feature_7_img; ?&gt;&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;
									&lt;? } ?&gt;
       					 	&lt;!--End Feature 7--&gt;
       					 	
        			  &lt;/div&gt;
   				 &lt;/div&gt;
   				 &lt;div class=&quot;paging&quot;&gt;
            				&lt;a href=&quot;#&quot; rel=&quot;1&quot;&gt;1&lt;/a&gt; &lt;!--Feature #1 must always be enabled--&gt;
   				        	&lt;!--Start Feature 2--&gt;
       					 		&lt;?if ($shortname_feature_2_enable == &quot;false&quot;) { ?&gt;
										&lt;!--DO NOTHING--&gt;
									&lt;? } else { ?&gt;
										&lt;a href=&quot;#&quot; rel=&quot;2&quot;&gt;2&lt;/a&gt;
									&lt;? } ?&gt;
       					 	&lt;!--End Feature 2--&gt;
       					 	
   				        	&lt;!--Start Feature 3--&gt;
       					 		&lt;?if ($shortname_feature_3_enable == &quot;false&quot;) { ?&gt;
										&lt;!--DO NOTHING--&gt;
									&lt;? } else { ?&gt;
										&lt;a href=&quot;#&quot; rel=&quot;3&quot;&gt;3&lt;/a&gt;
									&lt;? } ?&gt;
       					 	&lt;!--End Feature 3--&gt;

   				        	&lt;!--Start Feature 4--&gt;
       					 		&lt;?if ($shortname_feature_4_enable == &quot;false&quot;) { ?&gt;
										&lt;!--DO NOTHING--&gt;
									&lt;? } else { ?&gt;
										&lt;a href=&quot;#&quot; rel=&quot;4&quot;&gt;4&lt;/a&gt;
									&lt;? } ?&gt;
       					 	&lt;!--End Feature 4--&gt;

   				        	&lt;!--Start Feature 5--&gt;
       					 		&lt;?if ($shortname_feature_5_enable == &quot;false&quot;) { ?&gt;
										&lt;!--DO NOTHING--&gt;
									&lt;? } else { ?&gt;
										&lt;a href=&quot;#&quot; rel=&quot;5&quot;&gt;5&lt;/a&gt;
									&lt;? } ?&gt;
       					 	&lt;!--End Feature 5--&gt;
   				        	&lt;!--Start Feature 6--&gt;
       					 		&lt;?if ($shortname_feature_6_enable == &quot;false&quot;) { ?&gt;
										&lt;!--DO NOTHING--&gt;
									&lt;? } else { ?&gt;
										&lt;a href=&quot;#&quot; rel=&quot;6&quot;&gt;6&lt;/a&gt;
									&lt;? } ?&gt;
       					 	&lt;!--End Feature 6--&gt;   
   				        	&lt;!--Start Feature 7--&gt;
       					 		&lt;?if ($shortname_feature_7_enable == &quot;false&quot;) { ?&gt;
										&lt;!--DO NOTHING--&gt;
									&lt;? } else { ?&gt;
										&lt;a href=&quot;#&quot; rel=&quot;7&quot;&gt;7&lt;/a&gt;
									&lt;? } ?&gt;
       					 	&lt;!--End Feature 7--&gt;         					 	
    			&lt;/div&gt;
			&lt;/div&gt;
</pre>
<p>Again, that&#8217;s a lot, but basically all we&#8217;re doing is instead of simply displaying the images, we&#8217;re checking to see if the checkbox is checked for each one. If it isn&#8217;t, nothing shows up, but if it is, it checks for the image url and the link url and places them in there.</p>
<p>Then, below in the paging navigation, it does something similar. Where if the checkbox is checked it will add a number, and if not, nothing. </p>
<p>Again, the first feature is always active (so make sure you have an image and url in there!). </p>
<p><strong>IMPORTANT!</strong>: Remember to change &#8220;shortname&#8221; to whatever you made your shortname. It&#8217;s in every one of those, so make sure you get them all! <img src='http://ryanspilhaus.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  </p>
<p>You can duplicate this process if you want to add more features, but I find that 7 is probably too many anyhow! </p>
<p>You can see a live version of this at <a href="http://www.daybreakkids.org" target="_blank">www.daybreakkids.org</a>. </p>
<p>You should be all set! Below is the code for all the files we mentioned. </p>
<ul>
<li><a href="http://ryanspilhaus.com/wp-content/themes/ryan/tutorial_files/slider.php">The code for the slider</a></li>
<li><a href="http://ryanspilhaus.com/wp-content/themes/ryan/tutorial_files/script.js">Script.js</a></li>
<li><a href="http://ryanspilhaus.com/wp-content/themes/ryan/tutorial_files/get-theme-options.php">get-theme-options.php</a></li>
<li><a href="http://ryanspilhaus.com/wp-content/themes/ryan/tutorial_files/functions.php">functions.php</a></li>
</ul>
<p>Again &#8211; credit goes to <a href="http://www.sohtanaka.com/web-design/automatic-image-slider-w-css-jquery/" target="_blank">Soh Tanaka&#8217;s </a> and <a href="http://forthelose.org/how-to-create-a-theme-options-page-for-your-wordpress-theme" target="_blank">Ralph&#8217;s over at ForTheLose.org</a> for their excellent tutorials which served as a basis for this. </p>
<p>Let me know if you end up using it! </p>
]]></content:encoded>
			<wfw:commentRss>http://ryanspilhaus.com/2011/06/create-featured-image-in-wordpress-without-a-plugin/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>New Site: DayBreak Ministry</title>
		<link>http://ryanspilhaus.com/2011/06/new-site-daybreak-ministry/</link>
		<comments>http://ryanspilhaus.com/2011/06/new-site-daybreak-ministry/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 18:19:35 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://ryanspilhaus.com/?p=1427</guid>
		<description><![CDATA[A week ago we launched the new &#038; improved DayBreak website! Check it out at www.daybreakkids.org. I had designed the previous version about a year and a half ago (when I was not a very good designer&#8230;) and I was really excited about re-doing it to make it look a lot better and take advantage [...]]]></description>
				<content:encoded><![CDATA[<p>A week ago we launched the new &#038; improved DayBreak website! Check it out at <a href="http://www.daybreakkids.org">www.daybreakkids.org</a>.<br />
<img src="http://ryanspilhaus.com/wp-content/uploads/2011/06/front.jpg" alt="Front Page" /><br />
I had designed the previous version about a year and a half ago (when I was <em>not</em> a very good designer&#8230;) and I was really excited about re-doing it to make it look a lot better and take advantage of some cool functionality that I&#8217;ve been working on.</p>
<p>Anyhow &#8211; I&#8217;m super proud of the design &#8211; the illustrious <a href="http://lettherebeblog.com" target="_blank">Michael Sanders</a> did the logo/feature images/footer image but all the other design elements were mine. </p>
<p>Bonus points if you can spot the CSS3 elements I used throughout the site <img src='http://ryanspilhaus.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<p>Check it out! Below are some screenshots of some of the cooler pages! </p>
<p><strong>Staff</strong><br />
<img src="http://ryanspilhaus.com/wp-content/uploads/2011/06/staff.jpg" alt="Staff" /><br />
<strong>Blog</strong><br />
<img src="http://ryanspilhaus.com/wp-content/uploads/2011/06/blog.jpg" alt="Blog" /><br />
<strong>Donate</strong><br />
<img src="http://ryanspilhaus.com/wp-content/uploads/2011/06/donate.jpg" alt="Donate" /></p>
<p>A big thanks to Lauren Allgood for letting me work on this! Love what her and her staff are doing down in Lincoln Heights. </p>
]]></content:encoded>
			<wfw:commentRss>http://ryanspilhaus.com/2011/06/new-site-daybreak-ministry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Generous Justice</title>
		<link>http://ryanspilhaus.com/2011/05/generous-justice/</link>
		<comments>http://ryanspilhaus.com/2011/05/generous-justice/#comments</comments>
		<pubDate>Thu, 19 May 2011 01:29:58 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Thoughts on Ministry]]></category>

		<guid isPermaLink="false">http://ryanspilhaus.com/?p=1422</guid>
		<description><![CDATA[Reading Generous Justice by Tim Keller &#8211; it&#8217;s phenomenal. Came across this passage and it was too good not to share. It&#8217;s from one of Robert Murray M&#8217;Cheyne&#8217;s sermons: “Now, dear Christians, some of you pray night and day to the branches of the true Vine; you pray to be made all over in the [...]]]></description>
				<content:encoded><![CDATA[<p>Reading <a href="http://www.amazon.com/Generous-Justice-Gods-Grace-Makes/dp/0525951903">Generous Justice</a> by Tim Keller &#8211; it&#8217;s phenomenal. Came across this passage and it was too good not to share. It&#8217;s from one of <a href="http://en.wikipedia.org/wiki/Robert_Murray_M%27Cheyne">Robert Murray M&#8217;Cheyne&#8217;s</a> sermons:</p>
<blockquote><p>“Now, dear Christians, some of you pray night and day to the branches of the true Vine; you pray to be made all over in the image of Christ. If so, you must be like him in giving … “Though he was rich, yet for our sakes became poor” … <strong>Objection 1.</strong> “My money is my own.” <strong>Answer: </strong>Christ might have said “My blood is my own, my life is my own” … then where should we have been? <strong>Objection 2</strong>. ”The poor are undeserving.” <strong>Answer:</strong> Christ might have said, “They are wicked rebels … shall I lay down my life for these? I will give to the good angels.” But no, he left the ninety-nine, and came after the lost. He gave his blood for the undeserving.<strong> Objection 3.</strong> “The poor may abuse it.” Answer: Christ might have said the same; yea, with far greater truth. Christ knew that thousands would trample his blood under their feet; that most would despise it; that many would make it an excuse for sinning more; yet he gave his own blood. Oh, my dear Christians! If you would be like Christ, give much, give often, give freely, to the vile and poor, the thankless and the undeserving. Christ is glorious and happy and so will you be. It is not your money I want, but your happiness. Remember his own word, “It is more blessed to give than to receive.”</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://ryanspilhaus.com/2011/05/generous-justice/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Create a WordPress Sermon Archives with Custom Posts &amp; Taxonomies</title>
		<link>http://ryanspilhaus.com/2011/04/wordpress-sermon-archives-custom-posts-taxonomies/</link>
		<comments>http://ryanspilhaus.com/2011/04/wordpress-sermon-archives-custom-posts-taxonomies/#comments</comments>
		<pubDate>Sat, 16 Apr 2011 20:27:55 +0000</pubDate>
		<dc:creator>Ryan</dc:creator>
				<category><![CDATA[Church Communications]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[Work]]></category>

		<guid isPermaLink="false">http://ryanspilhaus.com/?p=1404</guid>
		<description><![CDATA[Ok &#8211; We&#8217;re going to be creating a sermon archives page for WordPress without the use of a plugin (well, almost…we&#8217;ll be using one to add the audio). Why? Because I hate using plugins! This is an update of an earlier post I wrote. That one used categories and custom fields, and while it still [...]]]></description>
				<content:encoded><![CDATA[<p>Ok &#8211; We&#8217;re going to be creating a sermon archives page for WordPress without the use of a plugin (well, almost…we&#8217;ll be using one to add the audio). Why? Because I hate using plugins! <img src='http://ryanspilhaus.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>This is an update of an <a href="http://ryanspilhaus.com/2011/02/wordpress-sermon-archives/">earlier post I wrote</a>. That one used categories and custom fields, and while it still works, this one&#8217;s both more user friendly and it takes advantage of a few more fun things. You can see a live example of this at <a href="http://gatheringonline.org/sermons">http://gatheringonline.org/sermons</a>.</p>
<p>We&#8217;ll be using Custom Post Types along with Custom Taxonomies and metaboxes. Also &#8211; we&#8217;re going to be messing around with functions.php a lot, so please please please make a backup copy of your theme files (especially functions.php) because it&#8217;s pretty easy to overwrite something important &#8211; if you do that, just replace it with your backup copy.</p>
<p>First, let&#8217;s create the Sermon Post Type.</p>
<p>Go ahead and open up your functions.php file and add the following code somewhere between the opening <?php and the closing ?> (if your functions.php doesn&#8217;t have those or you don&#8217;t have one, add them at the beginning and end.</p>
<pre class="brush: php; title: ; notranslate">

// Create Sermon Custom Post Type
add_action( 'init', 'create_my_post_types' );

function create_my_post_types() {
	register_post_type( 'sermon_post',
		array(
			'labels' =&gt; array(
				'name' =&gt; __( 'Sermons' ),
				'singular_name' =&gt; __( 'Sermon' ),
				'new_item' =&gt; __( 'New Sermon' ),
				'add_new_item' =&gt; __( 'Add New Sermon' )
			),
			'public' =&gt; true,
			'hierarchical' =&gt; true,
			'supports' =&gt; array( 'title', 'editor', 'excerpt', 'custom-fields', 'page-attributes' ),
			'register_meta_box_cb' =&gt; 'add_sermon_metaboxes' // This registers the metabox that we'll add later.
		)
	);
}

</pre>
<p>What this does is it creates a Custom Post Type called &#8220;Sermons&#8221;. In your dashboard it looks like the picture below:</p>
<p><img class="alignnone size-full wp-image-1411" title="1" src="http://ryanspilhaus.com/wp-content/uploads/2011/04/1.png" alt="" width="164" height="186" /></p>
<p>Now that that&#8217;s set up, let&#8217;s create a custom taxonomy (category) for the Speaker. This will allow us to sort by speaker and easily select the speaker from a list, much like Categories in WordPress.</p>
<p>enter the following into your functions.php:</p>
<pre class="brush: php; title: ; notranslate">
//Custom Taxonomies

add_action( 'init', 'create_speakers' );
function create_speakers() {
 $labels = array(
    'name' =&gt; _x( 'Speakers', 'taxonomy general name' ),
    'singular_name' =&gt; _x( 'Speaker', 'taxonomy singular name' ),
    'search_items' =&gt;  __( 'Search Speakers' ),
    'all_items' =&gt; __( 'All Speakers' ),
    'parent_item' =&gt; __( 'Parent Speaker' ),
    'parent_item_colon' =&gt; __( 'Parent Speaker:' ),
    'edit_item' =&gt; __( 'Edit Speaker' ),
    'update_item' =&gt; __( 'Update Speaker' ),
    'add_new_item' =&gt; __( 'Add New Speaker' ),
    'new_item_name' =&gt; __( 'New Speaker' ),
  );

  register_taxonomy('speaker','sermon_post',array(
    'hierarchical' =&gt; true,
    'labels' =&gt; $labels,
    &quot;public&quot; =&gt; &quot;true&quot;
  ));
}
</pre>
<p>This attaches the custom taxonomy of &#8220;Speaker&#8221; to the Sermon Custom post type. You should see a &#8220;speaker&#8221; link in the &#8220;sermons&#8221; custom post menu on the left. You can manage this the exact same way you do normal categories.</p>
<p>One last thing to do in functions.php. We&#8217;re going to create a metabox with some information that we might want to display with our sermons. What a custom metabox will do is essentially simplify the &#8220;custom fields&#8221; area, making it much more user friendly.</p>
<p>Enter the following in functions.php:</p>
<pre class="brush: php; title: ; notranslate">
// Create Meta boxes

function add_sermon_metaboxes() {
    add_meta_box('sermon_info', 'Sermon Information', 'sermon_info', 'sermon_post', 'normal', 'high');
}

// Sermon Meta Box

function sermon_info() {
    global $post;

    // Noncename needed to verify where the data originated
    echo '&lt;input id=&quot;sermonmeta_noncename&quot; name=&quot;sermonmeta_noncename&quot; type=&quot;hidden&quot; value=&quot;' .     wp_create_nonce( plugin_basename(__FILE__) ) . '&quot; /&gt;';

    // Get the data if its already been entered
    $date = get_post_meta($post-&gt;ID, '_date', true);
    $seriesimg = get_post_meta($post-&gt;ID, '_seriesimg', true);
    $thumbnail = get_post_meta($post-&gt;ID, '_thumbnail', true);
    $description = get_post_meta($post-&gt;ID, '_description', true);

    // Echo out the field
  	echo '&lt;strong&gt;Date&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;Enter the Date the sermon was preached.&lt;/em&gt;';
       echo '&lt;input class=&quot;widefat&quot; name=&quot;_date&quot; type=&quot;text&quot; value=&quot;' . $date  . '&quot; /&gt;';
      echo '&lt;strong&gt;Series Image&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;Add a series image. Images can be uploaded using the &quot;Add an Image&quot; box above the editing window. &lt;strong&gt;Images should be 200x112 pixels&lt;/strong&gt;&lt;/em&gt;';
    echo '&lt;input class=&quot;widefat&quot; name=&quot;_seriesimg&quot; type=&quot;text&quot; value=&quot;' . $seriesimg  . '&quot; /&gt;';
    echo '&lt;strong&gt;Thumbnail&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;Enter the thumbnail image you\'d like to display on the media archives list. Images can be uploaded using the &quot;Add an Image&quot; box above the editing window.&lt;strong&gt;Images should be 100x56 pixels&lt;/strong&gt;&lt;/em&gt;';
    echo '&lt;input class=&quot;widefat&quot; name=&quot;_thumbnail&quot; type=&quot;text&quot; value=&quot;' . $thumbnail  . '&quot; /&gt;';
    echo '&lt;strong&gt;Description&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;Enter the text you\'d like to display as a description on the media archives list.&lt;/em&gt;';
    echo '&lt;input class=&quot;widefat&quot; name=&quot;_description&quot; type=&quot;text&quot; value=&quot;' . $description  . '&quot; /&gt;';

}

// Save the Meta box Data

function save_sermon_meta($post_id, $post) {

    // verify this came from the our screen and with proper authorization,
    // because save_post can be triggered at other times
    if ( !wp_verify_nonce( $_POST['sermonmeta_noncename'], plugin_basename(__FILE__) )) {
    return $post-&gt;ID;
    }

    // Is the user allowed to edit the post or page?
    if ( !current_user_can( 'edit_post', $post-&gt;ID ))
        return $post-&gt;ID;

    // OK, we're authenticated: we need to find and save the data
    // We'll put it into an array to make it easier to loop though.

	$sermon_meta['_date'] = $_POST['_date'];
	$sermon_meta['_thumbnail'] = $_POST['_thumbnail'];
 	$sermon_meta['_seriesimg'] = $_POST['_seriesimg'];
	$sermon_meta['_description'] = $_POST['_description'];

    // Add values of $sermon_meta as custom fields

    foreach ($sermon_meta as $key =&gt; $value) { // Cycle through the $sermon_meta array!
        if( $post-&gt;post_type == 'revision' ) return; // Don't store custom data twice
        $value = implode(',', (array)$value); // If $value is an array, make it a CSV (unlikely)
        if(get_post_meta($post-&gt;ID, $key, FALSE)) { // If the custom field already has a value
            update_post_meta($post-&gt;ID, $key, $value);
        } else { // If the custom field doesn't have a value
            add_post_meta($post-&gt;ID, $key, $value);
        }
        if(!$value) delete_post_meta($post-&gt;ID, $key); // Delete if blank
    }

}
add_action('save_post', 'save_sermon_meta', 1, 2); // save the custom fields
</pre>
<p>Ok &#8211; that&#8217;s a lot. basically what it&#8217;s doing is creating the following box in our Sermon Post:</p>
<p><img class="alignnone size-large wp-image-1412" title="2" src="http://ryanspilhaus.com/wp-content/uploads/2011/04/2-710x284.png" alt="" width="710" height="284" /></p>
<p>If you don&#8217;t want to use thumbnails or series images, you can get rid of:</p>
<pre class="brush: php; title: ; notranslate">
  $seriesimg = get_post_meta($post-&gt;ID, '_seriesimg', true);
    $thumbnail = get_post_meta($post-&gt;ID, '_thumbnail', true);

   echo '&lt;strong&gt;Series Image&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;Add a series image. Images can be uploaded using the &quot;Add an Image&quot; box above the editing window. &lt;strong&gt;Images should be 200x112 pixels&lt;/strong&gt;&lt;/em&gt;';
    echo '&lt;input class=&quot;widefat&quot; name=&quot;_seriesimg&quot; type=&quot;text&quot; value=&quot;' . $seriesimg  . '&quot; /&gt;';
    echo '&lt;strong&gt;Thumbnail&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;Enter the thumbnail image you\'d like to display on the media archives list. Images can be uploaded using the &quot;Add an Image&quot; box above the editing window.&lt;strong&gt;Images should be 100x56 pixels&lt;/strong&gt;&lt;/em&gt;';
    echo '&lt;input class=&quot;widefat&quot; name=&quot;_thumbnail&quot; type=&quot;text&quot; value=&quot;' . $thumbnail  . '&quot; /&gt;';

	$sermon_meta['_thumbnail'] = $_POST['_thumbnail'];
 	$sermon_meta['_seriesimg'] = $_POST['_seriesimg'];
</pre>
<p>Ok &#8211; we&#8217;re done with functions.php. You should be able to open up your dashboard and click &#8220;add new&#8221; under &#8220;sermons&#8221; and see the following:</p>
<p><img class="alignnone size-large wp-image-1413" title="3" src="http://ryanspilhaus.com/wp-content/uploads/2011/04/3-710x373.png" alt="" width="568" height="298" /></p>
<p>Ok, let&#8217;s get to work creating the actual post. Create a new file called single-sermon_post.php. If you&#8217;re comfortable with PHP/CSS you can change this to match your theme perfectly, but for right now I&#8217;m just going to create a super basic one.</p>
<p>Place this code into the single-sermon_post.php:</p>
<pre class="brush: php; html-script: true; title: ; notranslate">
&lt;?php get_header(); ?&gt;
&lt;div id=&quot;container&quot;&gt;
		&lt;?php if(have_posts()) : ?&gt;&lt;?php while(have_posts()) : the_post(); ?&gt;
&lt;div class=&quot;blogpostsermon&quot;&gt;
&lt;div class=&quot;sermondate&quot;&gt;Date: &lt;?php echo get_post_meta($post-&gt;ID, '_date', true); ?&gt;&lt;/div&gt;
&lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;/h2&gt;
&lt;div class=&quot;blogentrysermon&quot;&gt;
					&lt;?php $thereisseriesimg = get_post_meta($post-&gt;ID, &quot;_seriesimg&quot;, true);
					if($thereisseriesimg){ ?&gt;
&lt;div class=&quot;seriesimg&quot;&gt;&lt;img src=&quot;&lt;?php echo get_post_meta($post-&gt;ID, '_seriesimg', true); ?&gt;&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;
					&lt;?php }else{ ?&gt;
					&lt;?php } ?&gt;
&lt;div class=&quot;sermon&quot;&gt;
&lt;div class=&quot;speakerbox&quot;&gt;&lt;?php echo get_the_term_list($post-&gt;ID, 'speaker', 'Speaker: '); ?&gt;&lt;/div&gt;
					&lt;?php the_content(); ?&gt;&lt;/div&gt;
&lt;!--sermoncontent--&gt;&lt;/div&gt;
&lt;!--blogentrysermon--&gt;&lt;/div&gt;
&lt;!--blogpostsermon--&gt;

		&lt;?php endwhile; ?&gt;

			&lt;?php else : ?&gt;
&lt;div class=&quot;post&quot;&gt;
&lt;h2&gt;&lt;?php_e('Not Found'); ?&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;!--post--&gt;

		&lt;?php endif; ?&gt;&lt;/div&gt;
&lt;!--container--&gt;

	&lt;?php get_footer(); ?&gt;
</pre>
<p>Ok &#8211; let&#8217;s dissect this just a bit:</p>
<pre class="brush: php; html-script: true; title: ; notranslate">
&lt;?php if(have_posts()) : ?&gt;&lt;?php while(have_posts()) : the_post(); ?&gt;

&lt;?php endwhile; ?&gt;

			&lt;?php else : ?&gt;
&lt;div class=&quot;post&quot;&gt;
&lt;h2&gt;&lt;?php_e('Not Found'); ?&gt;&lt;/h2&gt;
&lt;/div&gt;
&lt;!--post--&gt;

		&lt;?php endif; ?&gt;

</pre>
<p>This (spread throughout the file) is the loop. It&#8217;s basically pulling the content into the page, or if there&#8217;s nothing, it displays Not Found. This is pretty critical to a lot of WordPress stuff, so if you&#8217;re editing things, don&#8217;t get rid of it <img src='http://ryanspilhaus.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush: php; html-script: true; title: ; notranslate">
&lt;div class=&quot;sermondate&quot;&gt;Date: &lt;?php echo get_post_meta($post-&gt;ID, '_date', true); ?&gt;&lt;/div&gt;
</pre>
<p>Remember that metabox we created? This is where the Date gets pulled from. This is useful because the date posted doesn&#8217;t always match the date spoken.</p>
<pre class="brush: php; html-script: true; title: ; notranslate">
&lt;?php $thereisseriesimg = get_post_meta($post-&gt;ID, &quot;_seriesimg&quot;, true);
					if($thereisseriesimg){ ?&gt;
&lt;div class=&quot;seriesimg&quot;&gt;&lt;img src=&quot;&lt;?php echo get_post_meta($post-&gt;ID,'_seriesimg', true); ?&gt;&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;
					&lt;?php }else{ ?&gt;
					&lt;?php } ?&gt;
</pre>
<p>Here&#8217;s where we&#8217;re pulling your series image. If you aren&#8217;t using them, take this out and add 215px to the width of .sermon in the style you&#8217;ll be adding in a sec.</p>
<pre class="brush: php; html-script: true; title: ; notranslate">
&lt;div class=&quot;speakerbox&quot;&gt;&lt;?php echo get_the_term_list($post-&gt;ID, 'speaker', 'Speaker: '); ?&gt;&lt;/div&gt;
</pre>
<p>This is where it&#8217;s pulling and displaying the Speaker taxonomy we created.</p>
<p>Ok. There&#8217;s the structure of the Sermon post type. Right now it doesn&#8217;t really look like much, so add this to your style.css:</p>
<pre class="brush: css; title: ; notranslate">
#container {
	float: left;
	width: 960px;
	margin: 40px 0 0 0;
}
.blogpostsermon {
	margin: 10px 0 5px 0;
	padding: 0 0 10px 0;
	background: #000;
	float: left;
	width: 960px;
}

.blogpostsermon h2 {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 18px;
	text-transform: uppercase;
	text-align: left;
	color: #FFF;
	padding: 10px 0 5px 15px;
	letter-spacing: -1px;
	}

.blogentrysermon {
	line-height: 18px;
	background: #767676;
	margin: 0 5px 0 5px;
	padding: 5px 15px 15px 15px;
	float: left;
	width: 920px;
}

.sermon {
float: left;
width: 705px;
}

.speakerbox {
	font-weight: bold;
	margin: 0 0 10px 0;
}

.sermondate {
	float: right;
	padding: 10px 10px 5px 5px;
	font-size: 14px;
	color: #FFF;
}

.seriesimg {
width: 200px;
float: left;
height: 112px;
margin: 0 15px 0 0;
}

</pre>
<p>Honestly this is the part where it&#8217;s going to be a little hard for me to help you out. You&#8217;re probably going to have to adjust this a lot to fit what you&#8217;re looking to do with your site.</p>
<p>Let&#8217;s work on creating the actual Sermon archives page. Create a new file and name it sermon-list.php and copy the following code into it.</p>
<pre class="brush: php; html-script: true; title: ; notranslate">
&lt;?php /* Template Name: Sermon Archives */ ?&gt;

&lt;?php get_header(); ?&gt;
&lt;div id=&quot;container&quot;&gt;
&lt;div class=&quot;pagepost&quot;&gt;
&lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;/h2&gt;
&lt;div class=&quot;pageentry&quot;&gt;
&lt;?php query_posts(array('post_type'=&gt;'sermon_post', 'paged' =&gt; get_query_var( 'paged' ) ) ); ?&gt;
&lt;?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?&gt;
&lt;div class=&quot;sermonlist&quot;&gt;
					&lt;?php $thereisthumb = get_post_meta($post-&gt;ID, &quot;_thumbnail&quot;, true);
						if($thereisthumb){ ?&gt;
&lt;div class=&quot;sermonthumb&quot;&gt;&lt;img src=&quot;&lt;?php echo get_post_meta($post-&gt;ID,'_seriesimg', true); ?&gt;&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;
						&lt;?php }else{ ?&gt;
						&lt;?php } ?&gt;
&lt;div class=&quot;sermonspeaker&quot;&gt;
					&lt;?php echo get_the_term_list( get_the_ID(), 'speaker' ) ?&gt;
						&lt;/div&gt;
&lt;!--.sermonspeaker--&gt;
&lt;div class=&quot;sermonlistdate&quot;&gt;
						&lt;?php echo get_post_meta($post-&gt;ID, '_date', true); ?&gt;&lt;/div&gt;
&lt;!--.sermonlistdate--&gt;
&lt;div class=&quot;sermontitle&quot;&gt;
						&lt;a title=&quot;&lt;?php the_title(); ?&gt;&quot; href=&quot;&lt;?php the_permalink(); ?&gt;&quot;&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/div&gt;
&lt;!--.sermontitle--&gt;
&lt;div class=&quot;sermonexcerpt&quot;&gt;
						&lt;?php $thereisdescription = get_post_meta($post-&gt;ID, &quot;_description&quot;, true);
						if($thereisdescription){ ?&gt;
							&lt;?php echo get_post_meta($post-&gt;ID, &quot;_description&quot;, true); ?&gt;
						&lt;?php }else{ ?&gt;
						&lt;?php } ?&gt;&lt;/div&gt;
&lt;!--.sermonexcerpt--&gt;&lt;/div&gt;
&lt;!--.sermonlist--&gt;

		&lt;?php endwhile; ?&gt;
		&lt;?php endif;?&gt;
&lt;div class=&quot;navigation&quot;&gt;
				&lt;?php if (function_exists(&quot;pagination&quot;)) {     					pagination($additional_loop-&gt;max_num_pages);
						} ?&gt;&lt;/div&gt;
&lt;!--.navigation--&gt;&lt;/div&gt;
&lt;!--.pageentry--&gt;&lt;/div&gt;
&lt;!--.pagepost--&gt;&lt;/div&gt;
&lt;!--#container--&gt;

&lt;?php get_footer(); ?&gt;

</pre>
<p>Ok &#8211; there&#8217;s a lot here too. Let&#8217;s run down the important stuff.</p>
<pre class="brush: php; html-script: true; title: ; notranslate">

&lt;?php query_posts(array('post_type'=&gt;'sermon_post', 'paged' =&gt; get_query_var( 'paged' ))); ?&gt;
&lt;?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?&gt;

</pre>
<p>This is the Loop and the command that tells the loop to only retrieve the sermon post type. Very important.</p>
<pre class="brush: php; html-script: true; title: ; notranslate">
&lt;div class=&quot;sermonlist&quot;&gt;
					&lt;?php $thereisthumb = get_post_meta($post-&gt;ID, &quot;_thumbnail&quot;, true);
						if($thereisthumb){ ?&gt;
&lt;div class=&quot;sermonthumb&quot;&gt;&lt;img src=&quot;&lt;?php echo get_post_meta($post-&gt;ID,'_seriesimg', true); ?&gt;&quot; alt=&quot;&quot; /&gt;&lt;/div&gt;
						&lt;?php }else{ ?&gt;
						&lt;?php } ?&gt;
&lt;div class=&quot;sermonspeaker&quot;&gt;
					&lt;?php echo get_the_term_list( get_the_ID(), 'speaker' ) ?&gt;
						&lt;/div&gt;
&lt;!--.sermonspeaker--&gt;
&lt;div class=&quot;sermonlistdate&quot;&gt;
						&lt;?php echo get_post_meta($post-&gt;ID, '_date', true); ?&gt;&lt;/div&gt;
&lt;!--.sermonlistdate--&gt;
&lt;div class=&quot;sermontitle&quot;&gt;
						&lt;a title=&quot;&lt;?php the_title(); ?&gt;&quot; href=&quot;&lt;?php the_permalink(); ?&gt;&quot;&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/div&gt;
&lt;!--.sermontitle--&gt;
&lt;div class=&quot;sermonexcerpt&quot;&gt;
						&lt;?php $thereisdescription = get_post_meta($post-&gt;ID, &quot;_description&quot;, true);
						if($thereisdescription){ ?&gt;
							&lt;?php echo get_post_meta($post-&gt;ID, &quot;_description&quot;, true); ?&gt;
						&lt;?php }else{ ?&gt;
						&lt;?php } ?&gt;&lt;/div&gt;
&lt;!--.sermonexcerpt--&gt;&lt;/div&gt;
&lt;!--.sermonlist--&gt;
</pre>
<p>This is the real important stuff. Here&#8217;s our actual list. You can see the thumbnail up top (and if no thumb is entered it nicely aligns to the left again. Honestly, the thumbnail &amp; series images were added as a bit of an afterthought for this tutorial, so I&#8217;m sure you could style them better if you took the time)</p>
<p>After that, you see it pulling our speaker taxonomy (the sermonspeaker div), date (the sermonlistdate div), the actual title and link (the sermontitle div), and the excerpt which we entered in our &#8220;description field&#8221; (the sermonexcerpt div).</p>
<pre class="brush: php; html-script: true; title: ; notranslate">
&lt;div class=&quot;navigation&quot;&gt;
				&lt;?php if (function_exists(&quot;pagination&quot;)) {     					pagination($additional_loop-&gt;max_num_pages);
						} ?&gt;&lt;/div&gt;
&lt;!--.navigation--&gt;
</pre>
<p>You don&#8217;t want your sermon list to go on forever, right? The max number of sermons shown is controlled through the &#8220;reading&#8221; settings menu in the dashboard. I use the excellent pagination function found at http://design.sparklette.net/teaches/how-to-add-wordpress-pagination-without-a-plugin/. It&#8217;s absolutely fantastic and I won&#8217;t go into it much here. You can get the details over at their site. Or you can replace everything within the div with wordpress&#8217; default navigation:</p>
<pre class="brush: php; html-script: true; title: ; notranslate">
&lt;?php posts_nav_link(); ?&gt;

</pre>
<p>but I really recommend checking out the code over there.</p>
<p>Anyhow:</p>
<p>Let&#8217;s add some style to this…add the following to your style.css.</p>
<pre class="brush: css; title: ; notranslate">
.pagepost {
	padding: 10px 0 5px 0;
}

.pagepost h2 {
	font-size: 26px;
	text-align: right;
	font-family: arial, helvetica, sans-serif;
	font-weight: bold;
	color: #FFF;
	text-transform: uppercase;
	margin: 0 10px 5px 0;
	letter-spacing: 3px;
}

.pageentry {
	line-height: 18px;
	background: #FFF;
	margin: 0 5px 0 5px;
	padding: 5px 15px 15px 15px;
	min-height: 300px;
	font-size: 13px;
}
.sermonlist {
	padding: 5px;
	margin: 0;
	border-bottom: 1px dotted #000;
}

.sermontitle {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 16px;
	text-transform: uppercase;
	text-align: left;
	color: #1d1d1d;
	margin: 0 0 -5px 0;
	padding: 0;
}

.sermontitle a, .sermontitle a:visited {
	color: #1d1d1d;
	text-decoration: none;
	border-bottom: none;
	margin: 0;
	padding: 0;
}

.sermontitle a:hover {
	color: #8d001a;
	text-decoration: none;
	border-bottom: 1px dotted #8d001a;
	margin: 0;
	padding: 0;
}

.sermonexcerpt {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 12px;
	text-transform: none;
	text-align: left;
	color: #1d1d1d;
	font-weight: normal;
	margin: 5px 0 10px 0;
	padding: 0 0 0 10px;
}

.sermonlistdate {
	font-weight: bold;
	font-size: 12px;
}

.sermonspeaker {
	float: right;
	font-weight: bold;
	font-size: 12px;
}

</pre>
<p>Again &#8211; style that to fit your needs.</p>
<p>Ok &#8211; so we&#8217;ve made the Sermon Post Type and the Sermon Archives. We&#8217;ve got one more thing to do &#8211; create the speaker archives.</p>
<p>This is really easy. Copy everything in your sermon-list.php file into a new file and save it as taxonomy-speaker.php.</p>
<p>Then, right under &lt;?php get_header(); ?&gt;, put:</p>
<pre class="brush: php; html-script: true; title: ; notranslate">
&lt;?php $term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); ?&gt;
</pre>
<p>Then, replace</p>
<pre class="brush: php; html-script: true; title: ; notranslate">
&lt;?php query_posts(array('post_type'=&gt;'sermon_post')); ?&gt;
</pre>
<p>with:</p>
<pre class="brush: php; html-script: true; title: ; notranslate">
&lt;?php query_posts(array( 'post_type'=&gt;'sermon_post', 'speaker'=&gt;$term-&gt;slug, 'paged' =&gt; get_query_var( 'paged' ))); ?&gt;
</pre>
<p>Now &#8211; if you&#8217;re looking at it right now, you may be getting 404 error. That&#8217;s ok &#8211; you just need to &#8220;flush&#8221; your permalinks. To do that, all you have to do is simply visit the permalinks settings in your dashboard. That&#8217;s it. If you feel like doing more, feel free to just save them <img src='http://ryanspilhaus.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Now, when you click on the speaker name (it should be a link) it should take you to a list of sermons by that speaker.</p>
<p>Ok, now let’s actually figure out how to add the sermon audio. Here&#8217;s the only part we use a plugin for. This is flexible, so if you have a different plugin you like or a way to do it without, feel free <img src='http://ryanspilhaus.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>For this the best I could find was a plugin called “PowerPress” by Blubrry. Go ahead and install this and play around with the settings. Some important ones include:</p>
<p>Media Presentation – this is where you determine where your player will appear <br />
Download Link – Makes your audio downloadable<br />
I’d also adjust your audio player. I like using the 1 pixel out audio player, with Play Animation set to “no” so that it’s always full length.</p>
<p>Now, to add the sermons follow these steps:</p>
<ol>
<li>Remember to record the audio in “Joint Stereo” for maximum compatibility (as opposed to mono).</li>
<li>Upload the audio via FTP into the “Audio” folder in your directory. You could name it whatever you want, but I think Audio makes sense…</li>
<li>Copy the URL of the media. It will be http://yourwebsite.org/audio/filename.mp3 if you did step 2 correctly.</li>
<li>Create a new sermon post (from the sermon custom post type)</li>
<li>At the very bottom, add to the “Podcast Episode” box in the “Media URL” Field. (this was added when you installed PowerPress).</li>
<li>Add your date to the &#8220;date field&#8221;, along with images you may have. Then, add any text you wish to display below it to the content box. Also, add anything you want to display on the sermon archive page to the “description&#8221; field.</li>
<li>Select the speaker from your taxonomy list.</li>
<li>Publish Post.</li>
</ol>
<p>And that should be about it. Feel free to ask any questions in the comments and I&#8217;ll do my best to answer them (or if you find a better way of doing something!). Have fun with this and let me know if you end up using it!</p>
<p>Humongous credit for various help/tutorials/code goes to:</p>
<p>Custom Post Types &#8211; <a href="http://justintadlock.com/archives/2010/04/29/custom-post-types-in-wordpress">http://justintadlock.com/archives/2010/04/29/custom-post-types-in-wordpress</a><br />
Custom Metaboxes &#8211; <a href="http://wptheming.com/2010/08/custom-metabox-for-post-type/">http://wptheming.com/2010/08/custom-metabox-for-post-type/</a><br />
Custom Post Types &#8211; <a href="http://sixrevisions.com/wordpress/wordpress-custom-post-types-guide/">http://sixrevisions.com/wordpress/wordpress-custom-post-types-guide/</a><br />
Custom Taxonomies &#8211; <a href="http://sixrevisions.com/wordpress/taxonomy/">http://sixrevisions.com/wordpress/taxonomy/</a><br />
Pagination &#8211; <a href="http://design.sparklette.net/teaches/how-to-add-wordpress-pagination-without-a-plugin/">http://design.sparklette.net/teaches/how-to-add-wordpress-pagination-without-a-plugin/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://ryanspilhaus.com/2011/04/wordpress-sermon-archives-custom-posts-taxonomies/feed/</wfw:commentRss>
		<slash:comments>103</slash:comments>
<enclosure url="http://yourwebsite.org/audio/filename.mp3" length="0" type="audio/mpeg" />
		</item>
	</channel>
</rss>
