While Canvas comes bundled with a « Magazine » page template, consisting of a featured posts slider and a « Magazine »-style grid, there may be a time when only the grid is required… or a custom implementation of the grid, for that matter. In this tutorial, we’ll discuss a short code snippet that can be added to your « functions.php » file to transform the default WordPress category archive into a « Magazine »-style grid.
This modification is divided into four parts in your « functions.php » file; a CSS class on the <body> HTML tag, a CSS class on each post & a second CSS class on every second post, a « .fix » DIV tag after every second post and forcing the category archive to include the « content-magazine-grid.php » content template file into the Canvas content templating system.
The finished code
Before we start, lets take a look at the finished code.
// Add "magazine" CSS class to <body> tag on category archive.
add_filter( 'body_class', 'woo_custom_add_magazine_bodyclass', 12 );
function woo_custom_add_magazine_bodyclass ( $classes ) {
if ( is_category() ) {
$classes[] = 'magazine';
}
return $classes;
} // End woo_custom_add_magazine_bodyclass()
// Add "block" CSS class to each post.
add_filter( 'post_class', 'woo_custom_add_block_postclass', 12 );
function woo_custom_add_block_postclass ( $classes) {
global $wp_query;
$current_count = $wp_query->current_post + 1;
if ( is_category() ) {
$classes[] = 'block';
if ( $current_count % 2 == 0 ) {
$classes[] = 'last';
} // End IF Statement
}
return $classes;
} // End woo_custom_add_block_postclass()
// Add the "fix" DIV tag after every second post.
add_action( 'woo_post_after', 'woo_custom_add_magazine_blockfix', 12 );
function woo_custom_add_magazine_blockfix () {
global $wp_query;
$current_count = $wp_query->current_post + 1;
if ( is_category() && ( $current_count % 2 == 0 ) ) {
?>
<div class="fix"></div><!--/.fix-->
<?php
} // End IF Statement
} // End woo_custom_add_magazine_blockfix()
// Make sure the "content-magazine-grid.php" file is used instead of the default "content-*.php" file.
add_filter( 'woo_template_parts', 'woo_custom_category_archive_templatepart_magazine', 12 );
function woo_custom_category_archive_templatepart_magazine ( $templates ) {
if ( is_category() ) {
$index_to_replace = count( $templates ) - 2;
$templates[$index_to_replace] = 'content-magazine-grid.php'; // Preserve the default Canvas content templating system.
// $templates = array( 'content-magazine-grid.php' ); // Override the content templating system entirely.
}
return $templates;
} // End woo_custom_category_archive_templatepart_magazine()
What the code does
The above code does the following:
- Add the « magazine » CSS class to the <body> HTML tag.
- Add the « block » CSS class to each post, and the « last » CSS class to every second post.
- After every second post, add a « .fix » DIV tag.
- Force the category archive to include the « content-magazine-grid.php » content template file instead of « content-post-full.php » or « content-post.php », or simply override all content template options.
In addition to the end result of a « Magazine »-style grid on your category archive, this is an example of how Canvas can make use of a selection of smaller filters and actions to achieve a greater result, rather than making extensive modifications to the core theme template files, or using an extensive and difficult to decipher code snippet. Through 4 short code snippets, we’ve recreated the « Magazine »-style grid and can add/remove pieces at any stage to modify the end result.
The final result looks something like this:

About
