Advertisement
  1. Code
  2. WordPress

How to Create a Wordpress Theme from Scratch: Part 2

Scroll to top
Read Time: 6 min

It's time for the good stuff now. We'll be adding the comments system, a sidebar with widgets and an archive for all the old posts. This will cover all that you need for a simple but well functioning WordPress theme, and hopefully you be able to apply this to all sorts of theming projects.


Overview Of The Extras

Following on from the previous article on How to Create a WordPress Theme from Scratch, we are now going to add that oh so missing sidebar, the comments system and lastly an archive page. This should get you well introduced into WordPress theming, however you could always improve so I'll also give you a bit of recommended reading.

I hope to show you how to setup a widget ready sidebar, which should also give you an idea of how to add widgets to other areas of a template. The comments system is fairly simple, but we always like our site to look good so there will be a bit of styling involved. Lastly the archive, this is one of WordPress's standard template files, however custom pages are very similar, killing two birds with one stone...


Step 1 - The Sidebar

Always best to tackle the hard parts first right? Well lets get started then. Create a new file in your theme's directory called functions.php and open it up for editing. Paste in the following:

1
2
<?php
3
if ( function_exists('register_sidebar') )
4
    register_sidebar(array(
5
        'before_widget' => '',
6
        'after_widget' => '',
7
        'before_title' => '<h2>',
8
        'after_title' => '</h2>',
9
    ));
10
?>

What this does is tell WordPress that there is a widget ready sidebar in our theme. This code can be expanded on to include themes with several widget ready areas. We also state that our theme's sidebar needs different HTML from what WordPress normally outputs. What this does is stop the sidebar widgets getting wrapped in <li> tags, which wouldn't look so good for us.

Now, lets design that sidebar, create yet another file, called sidebar.php and paste in the following.

1
2
<div id="sidebar">
3
<?php if ( !function_exists('dynamic_sidebar')
4
        || !dynamic_sidebar() ) : ?>
5
 <h2>About</h2>
6
 <p>This is the deafult sidebar, add some widgets to change it.</p>
7
<?php endif; ?>
8
</div>

What this does is simply tell WordPress where the sidebar is meant to be. There's a little default text in there in case you don't have any widgets on the sidebar.

Finally we need to include the sidebar file in index.php, so open that up and add the following just before the <div id="content"> tag, make sure the header include tag is still at the top of the file though.

1
2
<?php get_sidebar(); ?>

Congrats, you've just added a dynamic sidebar to the theme.


Step 2 - Comments

The WordPress comment system can be as easy or as complicated as you wish, however because this is a simple tutorial that is building a simple theme, we're going to use the simple method of adding comments to our posts.

WordPress makes it easy by having a standard commenting system design that comes with every copy of WordPress, and it can be used by any theme. So that's what we'll do. Open up index.php and put the following after line 13 (I'm talking about right after the line with all the post details like the_time(), etc.)

1
2
<?php comments_template(); // Get wp-comments.php template ?>

As you can see, this includes a file that we do not have in our theme folder, but actually from somewhere within the confusing depths of WordPress. Joking aside, this makes our life a whole lot easier.

Test out your theme now, you'll notice that it's smart enough to not show the form and all the comments on the homepage, but when you click on a post it all renders as you want. Well... except for the fact that the textarea is way to big. To fix this we do not want to go and edit the core of WordPress but simply add a line of CSS, and make it somewhat easier to read in the process. So add the following to the bottom of style.css.

1
2
textarea#comment { width: 400px; padding: 5px; }
3
4
.commentmetadata { font-size: 10px; }

The first line will limit the textarea's with to a sensible size and also add a bit of padding to make it that bit easier to read. You now have a simple but ever so functional commenting system in your theme.

The meta data was also a bit small, so thats what the second line covers.


Step 3 - The Archive

Most WordPress sites have an 'archive', the place to look for old posts. The commonly display two lists, one with links to all the posts in the sites categories, and one with all the posts by month. This keeps the archive quick to browse through and makes it a better user experience.

archives.php is seen by WordPress as one of their standard files, you do not need to add any special header to get it seen. However if you wish to make another page template that is not standard, take a read here.

So create the new file and put in the following, and all will be explained.

1
2
<?php get_header(); ?>
3
		
4
	<?php get_sidebar(); ?>
5
	
6
	<div id="content">
7
8
	<h2 class="entry-title"><?php the_title() ?></h2>
9
10
	<?php the_content() ?>
11
12
					<ul id="archives-page" class="xoxo">
13
						<li id="category-archives">
14
							<h2>Archives by Category</h2>
15
							<ul>
16
								<?php wp_list_categories('optioncount=1&title_li=&show_count=1') ?> 
17
							</ul>
18
						</li>
19
						<li id="monthly-archives">
20
							<h2>Archives by Month</h2>
21
							<ul>
22
								<?php wp_get_archives('type=monthly&show_post_count=1') ?>
23
							</ul>
24
						</li>
25
					</ul>
26
		
27
	</div>
28
29
<?php get_footer(); ?>

This may look fairly similar to index.php however you may notice that there is no WordPress loop. This is because we're creating a page, with only one item in it. We can still use functions such as the_title() to get and display information about the page.

There is also the the_content() function, so that if you did put a little text on this page it would still display. Now the next stuff is fairly simple, its a standard list (well two actually...) with two functions in it, wp_list_categories() and wp_get_archives(). Both functions output a standard list, the first list all the sites categories and gives each a link which go to display all posts in that category. The second does just the same except it displays months not categories.

The parameters in the functions make them display the category/month with a post count for added dynamic site factor, hehe. To add this cool archive page to your site you need to create a new page and change the "Page Template" option to the new "Archives Page" one. Check it out, a cool archive page for everyone to see how much you have written.


Review - Does it work?

Yes it does, the sidebar does its job. Same goes for the comment system and the archive page. I hope this has shown you the basics of how to make a WordPress theme, even if in the simplest of forms. Check out the links below to get started with the more advanced themeing available for WordPress.


Further Reading

  • The WordPress Codex

    The WordPress Codex

    Theme development, the codex is clear and well written documentation. Coming from the creators of WordPress, you can't go wrong following its instructions.

    Visit

  • CSS Tricks Screencast

    There was a lot of mention about CSS Tricks 3 part guide to WordPress themeing, so I though I'd put it up on this one. It goes through how to build a nice site, a fair bit more complicated that this one but should improve on those themeing skills.

    Visit

 

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.