Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

Possible Duplicate:
problem with short code

Shortcodes are broken.

For those of you playing at home, heres an easy step by step to replicate my problem.


1) Open a fresh Wordpress install (3.4.2).

2) Go into twentyeleven/functions.php and add the following:

function test() {
echo '-TEST-';
}
add_shortcode('testshortcode', 'test');

3) Edit the 'hello world' post to say:

Welcome to WordPress. This is your first post. Edit or delete it, then start blogging! 
[testshortcode] 
foobar

4) Save and view, my results look like the following:

-TEST-
Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!
foobar

when it should look like this:

Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!
-TEST-
foobar

What on earth is going on here?

share|improve this question
add comment

marked as duplicate by toscho Oct 16 '12 at 10:50

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

1 Answer

up vote 1 down vote accepted

Shortcode callbacks have to return, not output. So use the following:

function test() {
    return '-TEST-';
}
add_shortcode( 'testshortcode', 'test' );

More info: http://codex.wordpress.org/Shortcode_API

If you have to use echo you can also do it this way(useful if there's a lot of markup & it's difficult working with strings)-

function test() {
    ob_start();
    echo '-TEST-';
    return ob_get_contents();
}
add_shortcode( 'testshortcode', 'test' );
share|improve this answer
    
That's interesting, it works on the clean install but doesn't work in a plugin that does the same thing, it used echo and failed like my example, but when i change it to return it still fails. Here's the plugin wordpress.org/extend/plugins/wordpress-media-tags –  Brae Oct 16 '12 at 9:37
    
I downloaded the plugin & checked it, if you replace echo with return there, it will return the content to the calling function, not to wordpress. –  Mridul Aggarwal Oct 16 '12 at 9:50
    
I just worked that out and was about to comment, if you put another return on the function the callback calls and replace the echo, it works. Cheers. –  Brae Oct 16 '12 at 9:51
add comment

Not the answer you're looking for? Browse other questions tagged or ask your own question.