Setting up the WordPress shortcode handler function to return echoed strings

Knowledge Base on June 30th, 2010 Comments Off

This post was originally published at LionVineyard.com on 2009/02/26

Recently I started developing and enhanced version of an existing WordPress plugin. One of my tasks was to add a shortcode function.

The problem: The plugin output was appearing at the top of the page/post, and not where I was placing the shortcode. My main plugin function was echoing quite a few lines. The WordPress shortcode API explicitly states that :

“The return value of a shortcode handler function is inserted into the post content output in place of the shortcode macro. Remember to use return and not echo – anything that is echoed will be output to the browser, but it won’t appear in the correct place on the page.” Source: http://codex.wordpress.org/Shortcode_API

It took me a while to discover this as I did not carefully read the description. Lesson 1: Carefully read the documentation.

I experimented for some time trying different alternatives, whatever I could think of from my Fortran/Matlab background, but nothing would would work.

My original setup was this:

function my_func_shortcode($atts) {

my_func_plugin();

return;
}
add_shortcode('myfunc', 'my_func_shortcode');

my_func_plugin() echoes multiple strings.

The solution: Capture the output buffer with in the shortcode handler function and return it.

The working shortcode function looks like this:

function my_func_shortcode($atts) {

ob_start();

my_func_plugin();

$output_string = ob_get_contents();

ob_end_clean();

return $output_string;
}
add_shortcode('myfunc', 'my_func_shortcode');

For once again Google proved to be a valuable ally. I found the solution just by searching “capture output php”.

I hope this will be helpful for some of you and save you hours of searching.

Comments are closed.
RSS Feed
on facebook
@twitter
footer