Join Chris Coyier for an in-depth discussion in this video Introducing template file structure, part of WordPress 3: Creating and Editing Custom Themes.
We have installed and activated the blank theme for WordPress. So that's what we are looking at here is the blank theme activated on our WordPress site. But we didn't take too close of a look at what makes a WordPress theme tick. I didn't show you all the files in that WordPress theme folder. So I wanted to take the opportunity here to give you guys the grand tour of a WordPress theme. What all those files in a WordPress theme folder do. So I am in the htdocs folder. This is our root where WordPress install in the wp-content folder, in the themes folder, and there is our WidgetCorpTheme-1, which is the blank theme that we installed.
I am going to drag that folder onto the TextMate icon in our dock, and this is all the files of a WordPress theme. You can see in our project sidebar in TextMate all the files that make up a WordPress theme. The first one we will open up is index.php. It's the one we would probably gravitate towards on any site really. The file that powers the root of any directory is the index.php file, and indeed this file that we are looking at in Safari, the root of our website, is powered by the index.php file right now.
So what's in this file? It starts with this command. This little PHP function, get_header, and it ends with a couple of PHP functions, get_sidebar, get_footer. What do these things do? Really, really simple. WordPress works in this modular kind of way. Get_header means go get the file header.php and put that code that you find there right here. So header.php file. What's in that? Well, it's the top of the page. It's the DOCTYPE. It's the head section. It's inside the head section where the title of our page is generated.
It has the opening body tag, and it has some kind of opening tags here. So all this code that's in header.php gets just plunked in right here where this get_header is. Then it moves on to this code. Then it says get_sidebar. That's going to go get sidebar.php and put all this code where that function is in the index.php file right here. Now get_footer, I bet you can guess it. It's going to go get the footer.php, all the code that it finds in the footer.php file, and put it there.
So there is some content, a special function here, a little comment reminder for us to not forget analytics as we move to launch our site and then the closing body and closing HTML tags. So that code gets plunked right down into our index.php file right here. So it's that modular concept that WordPress is working with here. Let's say I click on to this Hello world post. It changes links. Now we are looking at just this one blog post and it has this comment out here and it has the text box here where I could leave my own comment on that post.
Now is index.php powering this as well? No, it's not. It's using single. What single.php means is single blog post. So you can see it's very similar looking to index.php. It has this get_header, get_sidebar, get_footer, but it's a little bit different. For instance, it has this PHP function here, comments_template. So that's one of the big differences. You can see that it's outputted this comment and this form for me to leave a new comment. That all comes from this, and can you guess? This is a module as well.
It's says go get the comments. php file and put that right here. So here is the file that has all the code that gets dropped in right there. So there is a few other files in our theme. Think of the 404 page. Now if you were to go to a URL that didn't exist on this site, I will just type a bunch of gobbledygook up here and hit Return, it's going to say Error 404, Page Not Found. That comes from this 404.php file. It uses these modular chunks, but then just has its own special content.
It doesn't need to say much more than this. So this is your opportunity to customize and create a 404 page for your site. There is the archive.php file. This is in-charge of displaying something if we wanted to look at just a month on our site. So just in August. Here is the archive for August. The archive.php file will be in-charge of displaying that site. Comments, we already looked at. The footer. These are just little modular chunks. WordPress themes work in this modular kind of way.
You don't have to repeat yourself in all of these different files. You can just call the modules as you need them. That's kind of the idea. Now I don't want you to think that this is your whole tour of the whole WordPress site. We are going to be looking at each one of these files in more detail as we move forward and as we actually build and flesh out this theme.
- Building a design in Photoshop
- Converting Photoshop design to HTML and CSS
- Setting up MAMP on Mac and WAMP on Windows
- Moving HTML and CSS into a WordPress theme
- Building navigation
- Using custom fields
- Creating a commenting system
Skill Level Intermediate
Q: What prerequisite skill do I need to be successful in this course?
<div>A: This course is set at the intermediate/advanced level. You’ll do best if you have a good knowledge of <a href="http://www.lynda.com/Photoshop-training-tutorials/279-0.html">Photoshop</a>, plus a good grasp of <a href="http://www.lynda.com/PHP-training-tutorials/282-0.html">PHP</a>, <a href="http://www.lynda.com/HTML-training-tutorials/224-0.html">HTML</a>, and <a href="http://www.lynda.com/CSS-training-tutorials/447-0.html">CSS</a>.</div> <div><br /> </div>
Q: The index.php file that the author is working with in Chapter 3 doesn't match mine after the "Building a sidebar" movie. It appears to change between the "Building a sidebar" and "Building the navigation" movies. What code am I missing?<br />
A: The author makes some changes off screen between several movies in this title, simply because there is so much material to cover. These changes are provided in the exercise files.<br /> <br /> However, if you are following along without the exercise files, you catch up to him by adding the following code to your index.php file, directly after the <span style="font-family: Courier;"><?php get_header(); ?></span> line:<br /> <br /> <span style="font-family: Courier;"><div id="main-content"></span><br /> <div><br /> Near the end of the file, just before <span style="font-family: Courier;"><?php get_sidebar(); ?></span>, add a closing div tag, <span style="font-family: Courier;"></div></span>, to complete the div wrapper.</div> <br /> The resulting code will look like so. You may also copy and paste this into a new file and save it as index.php.<br /> <br /> <span style="font-family: Courier;"><?php get_header(); ?><br /> <br /> <div id='main-content'><br /> <br /> <?php if (have_posts()) : while (have_posts()) : the_post(); ?><br /> <br /> <div <?php post_class() ?> id="post-<?php the_ID(); ?>"><br /> <br /> <h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2><br /> <br /> <?php include (TEMPLATEPATH . '/inc/meta.php' ); ?><br /> <br /> <div class="entry"><br /> <?php the_content(); ?><br /> </div><br /> <br /> <div class="postmetadata"><br /> <?php the_tags('Tags: ', ', ', '<br />'); ?><br /> Posted in <?php the_category(', ') ?> | <br /> <?php comments_popup_link('No Comments »', '1 Comment »', '% Comments »'); ?><br /> </div><br /> <br /> </div><br /> <br /> <?php endwhile; ?><br /> <br /> <?php include (TEMPLATEPATH . '/inc/nav.php' ); ?><br /> <br /> <?php else : ?><br /> <br /> <h2>Not Found</h2><br /> <br /> <?php endif; ?><br /> <br /> </div><br /> <br /> <?php get_sidebar(); ?><br /> <br /> <?php get_footer(); ?></span><br />
Q: How do I load my custom theme once I have finished?
A: Copy the Custom theme folder to your new WordPress installation and put it in wp-content > themes. Then you can activate the new theme and work with it from there.