Adding things to titles inside the post content
January 8, 2015For a specific styling i needed to be able to add elements, specifically a <span>
element inside the H2 tags automatically.
Outside of the content is easy
To achieve this for titles outside of the_content
is pretty easily done with the $before
and $after
Parameters on the_title()
like so, or we could just wrap the_title
inside the desired tags.
<?php the_title( '<h2 class="entry-title"><span>', '</span></h2>' ); ?>
Filtering the_content
To achieve the same result for all H2 tags inside the content we need to filter the_content
with a regular expression.
function pdr_add_class_to_h2( $content ){ return preg_replace( '/<h2(.*?)>(.*?)<\/h2>/', '<h2\1 class="entry-title"><span>\2</span></h2>', $content ); } add_filter( 'the_content', 'pdr_add_class_to_h2' );
To extend this with other tags to replace, we can also pass arrays to preg_replace. Each element in $pattern
will be replace by its counterpart in $replacement
.
function pdr_add_class_to_titles( $content ){ $pattern = array( '/<h2(.*?)>(.*?)<\/h2>/', '/<h3(.*?)>(.*?)<\/h3>/', '/<h4(.*?)>(.*?)<\/h4>/', '/<h5(.*?)>(.*?)<\/h5>/', '/<h6(.*?)>(.*?)<\/h6>/' ); $replacement = array( '<h2\1 class="entry-title"><span>\2</span></h2>', '<h3\1 class="entry-title"><span>\2</span></h3>', '<h4\1 class="entry-title"><span>\2</span></h4>', '<h5\1 class="entry-title"><span>\2</span></h5>', '<h6\1 class="entry-title"><span>\2</span></h6>', ); return preg_replace( $pattern, $replacement, $content ); } add_filter( 'the_content', 'pdr_add_class_to_titles' );
I found this solution in this support thread and adapted it a bit to fit my needs and replace all titles but it could basically be used to replace all kinds of stuff inside the content.