Sometime we want to insert Google Adsense or other advertisement code into middle of a post in WordPress. Replacing the <!--more--> code with Google Adsense or other advertisement code is one of the way.
To replace the <!--more--> with advertisement code, we start with defining a pseudo code.
- At the single post page (normally single.php), intercept the output of the content.
- Find the location and the length of
<!--more-->. - Replace <!–more–> with the advertisement code or insert the advertisement code after or before the
<!--more-->tag. - Output the modified content.
Let’s assume the single post page of your WordPress theme is single.php. Find the line in single.php where the_content() function is called, replace the line with the following code:
if (ob_start()) {
the_content();
$content = ob_get_clean ();
echo replace_more_tag (
$content,
get_post_middle_ads ());
} else {
the_content();
}
Now we need to define two more functions(replace_more_tag and get_post_middle_ads). You can put the functions either at top of the code in single.php or inside functions.php in your wordpress theme. I would suggestion to put the functions in functions.php for easier maintenance.
When calling the the_content() function, WordPress automatically replace the <!--more--> tag with <p><span id="more-id"></span></p> where the id is the post’s id. So we need to take care of this when writing the replace_more_tag function.
replace_more_tag($original, $replace, $include_more_tag = true, $include_after = false)
The function finds the <p><span id="more-id"></span></p> in $original and replace it with $replace. If $include_more_tag is true, the <p><span id="more-id"></span></p> will be included. If $include_after is true, it includes the <p><span id="more-id"></span></p> after the $replace else the other way round. Finally the function returns the replaced text.
get_post_middle_ads ()
The function simply return the text defined in the function.
Here is the code for the two functions above:
function
replace_more_tag (
$original,
$replace,
$include_more_tag = true,
$include_after = false
) {
$start = '<p><span id="more-';
$end = '"></span></p>';
$startPos = strpos ($original, $start);
if ($startPos === false)
return '<p>'.$replace.'</p>'.$original;
$endPos = strpos ($original, $end, $startPos + strlen($start));
if ($endPos === false)
return '<p>'.$replace.'</p>'.$original;
$moreTag = substr ($original, $startPos, $endPos - $startPos + strlen($end));
$returnText = substr ($original, 0, $startPos);
if ($include_more_tag && !$include_after)
$returnText.= $moreTag;
$returnText.= '<p>'.$replace.'</p>';
if ($include_more_tag && $include_after)
$returnText.= $moreTag;
$returnText.= substr ($original, $startPos + strlen($moreTag));
return $returnText;
}
function
get_post_middle_ads () {
return <<<EOT
// Your advertisment script here
EOT;
}
And this is the way it works in the site.
Leave a Reply