Los shortcodes se muestran antes del contenido

16 oct 2012, 12:27:01
Vistas: 14.4K
Votos: 10

Posible duplicado:
problema con el short code

Los shortcodes no funcionan correctamente.

Para quienes quieran replicar el problema, aquí hay unos pasos sencillos:


1) Instala WordPress fresco (versión 3.4.2).

2) Ve a twentyeleven/functions.php y agrega lo siguiente:

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

3) Edita la publicación 'hello world' para que diga:

Bienvenido a WordPress. Esta es tu primera entrada. ¡Edítala o bórrala, luego comienza a escribir! 
[testshortcode] 
foobar

4) Guarda y visualiza, mis resultados se ven así:

-TEST-
Bienvenido a WordPress. Esta es tu primera entrada. ¡Edítala o bórrala, luego comienza a escribir!
foobar

cuando debería verse así:

Bienvenido a WordPress. Esta es tu primera entrada. ¡Edítala o bórrala, luego comienza a escribir!
-TEST-
foobar

¿Qué diablos está pasando aquí?

1
Comentarios

En lugar de "echo '-TEST-';" utiliza "return '-TEST-';".

Softmixt Softmixt
6 abr 2018 00:07:58
Todas las respuestas a la pregunta 1
5
17

Las devoluciones de llamada de shortcode deben retornar, no imprimir. Por lo tanto, utiliza lo siguiente:

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

Más información: http://codex.wordpress.org/Shortcode_API

Si necesitas usar echo, también puedes hacerlo de esta manera (útil si hay mucho marcado y es difícil trabajar con cadenas):

function test() {
    ob_start();
    echo '-TEST-';
    return ob_get_contents();
}
add_shortcode( 'testshortcode', 'test' );
16 oct 2012 12:29:05
Comentarios

Eso es interesante, funciona en la instalación limpia pero no funciona en un plugin que hace lo mismo, usaba echo y fallaba como en mi ejemplo, pero cuando lo cambio a return todavía falla. Aquí está el plugin http://wordpress.org/extend/plugins/wordpress-media-tags/

Neros Neros
16 oct 2012 12:37:04

Descargué el plugin y lo revisé, si reemplazas echo con return ahí, devolverá el contenido a la función que lo llama, no a WordPress.

Mridul Aggarwal Mridul Aggarwal
16 oct 2012 12:50:06

Acabo de darme cuenta de eso y estaba por comentar, si pones otro return en la función que llama el callback y reemplazas el echo, funciona. Gracias.

Neros Neros
16 oct 2012 12:51:32

Este contenido se me mostró dos veces (una antes del contenido, la segunda en el lugar que quería). Lo solucioné con:

function test() { ob_start(); echo '-TEST-'; $ReturnString = ob_get_contents(); ob_end_clean(); return $ReturnString; }

Harkály Gergő Harkály Gergő
19 dic 2016 02:33:34

Para las personas que tienen el contenido mostrándose dos veces, en lugar de ob_get_contents, usen ob_get_clean

DreamWave DreamWave
9 mar 2020 15:16:51