Setting up the WordPress shortcode handler function to return echoed strings
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.


, or by using our 


