With Ruby Sinreich
Based on the amazing work of Tracy Levesque: TheTracyL.com/gdi/building-themes
Fundamentally, the WordPress Theme system is a way to 'skin' your weblog. Yet, it is more than just a 'skin.' Skinning your site implies that only the design is changed. WordPress Themes can provide much more control over the look and presentation of the material on your website.
A theme not only determines how a site looks, it can also add functionality to a site. You can build plugin-like functionality right into a theme.
There are thousands of free themes in the official WordPress Themes Directory.
WordPress currently comes with 3 themes: Twenty Eleven, Twenty Twelve and Twenty Thirteen.
Under Appearance > Themes you can see they are both installed. The theme in use is labeled "Current" and the other "Available."
Note: Twenty Fourteen and Twenty Fifteen are now available. This presentation is based on Twenty Thirteen.
/wp-content/themes
folderThe 2013 theme for WordPress takes us back to the blog, featuring a full range of post formats, each displayed beautifully in their own unique way. Design details abound, starting with a vibrant color scheme and matching header images, beautiful typography and icons, and a flexible layout that looks great on any device, big or small.
NO!
This means do not edit:
If you break something you can just hit undo or remove your file. All parent theme files will remain intact.
It tells WordPress to load the parent theme after your theme.
/*
Theme Name: [Your Theme Name]
Theme URI: [Your URL]
Description: The custom theme [Your Theme Name] using the parent theme Twenty Thirteen.
Author: [You]
Author URI: [Your URL]
Template: twentythirteen
Version: 1
*/
@import url("../twentythirteen/style.css");
This is the thumbnail image that shows up under Appearance > Themes in the WordPress admin.
You can find the 600px by 400px screenshot image file, screenshot.png, in
/wp-content/themes/twentythirteen
Open the file in your favorite graphics editor, turn it into your own screenshot and save it into your child theme's folder.
wp-content/themes
(no spaces)
After you've added your theme go check out Appearance > Themes in the WP admin.
Your child theme is now listed under "Available Themes." Hit activate and now your theme will be in charge.
The 2 files in your theme illustrate how a child theme's files effect the parent's files -- they either modify and add functionality to its identically named file, or completely overwrite it.
Your style.css file will override styles in the parent theme's style.css file with the same selectors.
Example: Changing the size of the header title. The font-size for .site-title
is 60px. Use the css selector in your child theme to change it.
.site-title {
font-size: 50px;
}
First, an introduction to templates...
Templates are the files which control how your WordPress site will be displayed on the Web.
In the twentythirteen folder is all the theme's the template files. You can create your own versions of these files in your child theme.
Example: Removing WordPress credit from footer.php
footer.php
in the twentythirteen folder and save a copy into your theme's folder.
<div class="site-info">
<?php do_action( 'twentythirteen_credits' ); ?>
<a href="<?php echo esc_url( __( 'http://wordpress.org/', 'twentythirteen' ) ); ?>" title="<?php esc_attr_e( 'Semantic Personal Publishing Platform', 'twentythirteen' ); ?>"><?php printf( __( 'Proudly powered by %s', 'twentythirteen' ), 'WordPress' ); ?></a>
</div?><!-- .site-info -->
Twentythirteen has just one default template, a content area with a right sidebar.
You can make additional templates. Templates you create will appear in the Template drop-down menu on the Page edit screen.
<?php
/*
Template Name: [Type your template name here]
*/
?>
<?php get_header(); ?>
<?php get_footer(); ?>
Example: Create a full-width, no sidebar template.
page.php
in the twentythirteen folder.page-fullwidth.php
and save it into your theme's folderTemplate Name:
to top of the file<?php get_sidebar(); ?>
.entry-content
full width.
<?get_search_form(); ?>
<?get_sidebar(); ?>
<?comments_template(); ?>
Check out the WordPress Codex Include Tags Page
Example: Add the search form to the header
header.php
in the twentythirteen folder and save a copy into your theme's folder.<?get_search_form(); ?>
to the header just below the site description
<?the_title(); ?>
<?the_content(); ?>
<?the_permalink(); ?>
<?the_excerpt(); ?>
<?get_the_post_thumbnail(); ?>
Check out the WordPress Codex Function Reference
Example: Add a copyright to the footer
footer.php
in your theme's folder.
Copyright © <?php echo date('Y'); ?> <a href="<?php echo home_url( '/' ); ?>"><?php bloginfo( 'name' ); ?></a>
is_front_page()
is_home()
is_single()
is_page()
is_category()
Check out the WordPress Codex Conditional Tags Page and this blog post on is_front_page()
vs. is_home()
Example: Add credit to the footer that only shows on the home page
footer.php
<?php
if(is_front_page()){
echo "<p>Web design by [your name here]</p>";
}
?>
bloginfo
to add the blog description to the footer.
get_template_part is a special include tag that allows you to load any other template file into a template. It lets you to reuse code in multiple templates.
Important Dev rule #2 Don't Repeat Yourself.
Check out the WordPress Codex get template part
<?php get_template_part( 'content', 'none' ); ?>
Will load a template file named content-none.php
<?php the_post_thumbnail('medium'); ?>
This will create an img
tag for the medium sized version of a post or page's "Featured Image"
Check out the WordPress Codex the post thumbnail
You can bring up the thumbnail, medium, large, original or a custom size of the featured image. If no size is defined it will default to the thumbnail size.
<?php the_post_thumbnail('thumbnail'); ?>
<?php the_post_thumbnail('medium'); ?>
<?php the_post_thumbnail('large'); ?>
<?php the_post_thumbnail('full'); ?>
<?php the_post_thumbnail( array(250,100) ); ?>
get_template_directory_uri
- Retrieves stylesheet directory address for the current theme.get_stylesheet_directory_uri
- Retrieves stylesheet directory address for the current theme/child theme.
Check out the WordPress Codex get template directory uri and get stylesheet directory uri
To include images in your theme you can use the code below.
<img src="<?php echo get_stylesheet_directory_uri(); ?>/images/image.png" />
VS.
<img src="http://whatever.com/wp-content/mytheme/images/image.png" />
WordPress uses the Query String — information contained within each link on your web site — to decide which template or set of templates will be used to display the page.
If you name a template file a certain way, it will automatically apply to a certain page.
There's a chart on WordPress.org that shows how the naming conventions work.
The chart looks confusing, but if you break it down it's really pretty simple. We'll look at the template hierarchy for category archives.
If you name template a file a certain way they will affect the display of a certain page. Just follow the chart to find the correct naming convention.
Custom archive and post templates can be named by id or slug
Check out this interactive version of the chart
Example: Make an archive term template
category.php
in the twentythirteen folder.category-[slug].php
and save it into your theme's folder
index.php
is the end of the road. Any page that does not have another template file made for it will use index.php
aka the default template for the posts (blog) page.
Child themes are great for modifying existing themes, but you can create your own custom theme with a starter theme.
Starter themes have base WordPress functionality, but very little or no style. Starter theme developers encourage you to hack it and make it your own.
Starter themes can also come with a base framework, like HTML 5 Boilerplate, Twitter Bootstrap or a responsive grid if you enjoy using frameworks. There's no need to reinvent the wheel!