An example WordPress child theme based on the Largo parent theme (http://github.com/inn/largo)
We are actively working on this!
To create a child theme of your own WE DO NOT recommend cloning this repo exactly as-is. Rather, this is intended as a verbose example of how to structure a child theme. You probably do not need (or want) everything that is included in here but we hope it is a helpful reference as you're building your own child theme with Largo.
If you have specific questions or requests for documentation, please open an issue so we make sure to address them.
The layout of this sample theme is based on convention and best practices. What follows is a general outline of files and directories that loosely depend on each other as well as how we tend to use each directory to organize our code.
tests
and phpunit.xml
The unit tests depend on a phpunit.xml
file in the root of the theme. The phpunit.xml
file references files within the tests
directory.
less
, css
and Gruntfile.js
The Gruntfile.js
is configured to compile files within the less
directory to corresponding files in the css
directory.
To override a template part from Largo core, create a partials
directory within the root of your theme and add a file to the directory with a filename matching that of the template part to be overridden.
This is standard get_template_part
functionality. The only difference is that Largo stores template parts in a partials
directory.
You can also place your own template parts in the partials
directory. It's a good idea to break large template files down into component part by creating these partial files. Doing so will make each template file easier to read and maintain.
We try really hard to keep components logically separated. Here are some guidelines:
Javascript files should be placed in the js
directory.
CSS files should be placed in the css
directory.
Note: if you're using grunt and less to generate your CSS, there's typically no reason to edit these files directly.
LESS files, should be placed in the less
directory.
If you add new file to the less
directory, you'll want to update Gruntfile.js
so that it knows about it:
files: {
'css/style.css': 'less/style.less',
'homepages/assets/css/your_homepage.css': 'homepages/assets/less/your_homepage.less',
'css/yournewfilename.css': 'less/yournewfilename.less'
}
Theme images should be placed in the img
directory.
Component parts of your theme should be kept in inc
.
These are generally not template files, but files containing functions or other business logic for your theme.
Templates should be kept in the root directory of the theme.
For example, to override Largo's home.php
template, create a file with the same name in the root of your theme directory.
Template parts should be kept in a partials
subdirectory as described above.
Custom homepage layouts should be kept within the homepages
subdirectory.
Documentation should be kept in the docs
subdirectory.
Adding your custom javascript or CSS to your theme works just the same as with any other WordPress theme.
For example (from functions.php
):
function enqueue_script() {
$version = '0.1.0';
wp_enqueue_script(
'your_theme',
get_stylesheet_directory() . '/js/your_theme.js',
array('jquery'),
$version,
true
);
}
add_action('wp_enqueue_scripts', 'enqueue_script');
The process for CSS is similar. See the wp_enqueue_style
documentation for more info.
If you want to completely remove and/or replace a Javascript or CSS file that is loaded by the Largo parent theme, you can deregister the default script and replace it with your own.
For example:
function replace_largoCore() {
$version = '0.1.0';
wp_dequeue_script('largoCore');
wp_register_script(
'largoCore',
get_stylesheet_directory() . '/js/your_largoCore.js',
array('jquery'),
$version,
true
);
}
add_action('wp_enqueue_scripts', 'replace_largoCore')
See the documentation for wp_dequeue_script
and wp_dequeue_style
.