On a recent project using a Genesis child theme I found myself in a situation where I wanted to use a filter, but only on certain views, namely the category view and the homepage view. Adding a filter is pretty straight forward, but using that filter in combination with conditional tags you need to add a bit extra instead of just the tags themselves.
Now, the example is for the Genesis Framework, but really the logic behind will work on any child theme using filters. What I wanted to filter was the output of the post meta area, which normally displays both the categories and the tags. I wanted to use a slightly different post meta on the homepage where the tags would be replaced with a Continue reading link.
This is what the filter looks like:
[php]//Customizing Post Meta
function forsite_post_meta_filter($post_meta) {
$post_meta = ‘[post_ categories], <a href="’. get_permalink() .’" title="’. the_title_attribute(‘echo=0′) .’">Continue Reading</a>’;
return $post_meta;
}[/php]
As you can see I am just adding a permalink with a ‘Continue Reading’ text. Nothing too fancy. Normally you would add your filter and you’d be all done. Like so:
[php]//Customizing Post Meta
function forsite_post_meta_filter($post_meta) {
$post_meta = ‘[post_ categories], <a href="’. get_permalink() .’" title="’. the_title_attribute(‘echo=0′) .’">Continue Reading</a>’;
return $post_meta;
}
add_filter(‘genesis_post_meta’, ‘forsite_post_meta_filter’);[/php]
Using Conditial Tags with this filter actually requires the use of an add_action
statement. The way to do is by declaring another function which handles the conditional tags. Something like this
[php]function forsite_post_meta_conditionals() {
if( is_home() || is_category() ) {
add_filter(‘genesis_post_meta’, ‘forsite_post_meta_filter’);
}
}
add_action(‘wp’, ‘forsite_post_meta_conditionals’);[/php]
The if statement determines to actually use this filter only whether you are looking at the home page or the category view. Combined the full code looks like this:
[php]//Customizing Post Meta
function forsite_post_meta_filter($post_meta) {
$post_meta = ‘[post_ categories], <a href="’. get_permalink() .’" title="’. the_title_attribute(‘echo=0′) .’">Continue Reading</a>’;
return $post_meta;
}
function forsite_post_meta_conditionals() {
if( is_home() || is_category() ) {
add_filter(‘genesis_post_meta’, ‘forsite_post_meta_filter’);
}
}
add_action(‘wp’, ‘forsite_post_meta_conditionals’);[/php]
On all occasions where I used post_categories in these code snippets I’ve added an extra blank space between the underscore and categories for it otherwise shows the actual content. So when implementing this code, be sure to delete that extra space!
More info on conditional tags can be found in the Codex, and more information on WordPress filters. Have you worked with conditional tags and / or filters before?
This article first appeared on Devlounge.
Leave a Reply