zbyshekh
Estoy creando un complemento de wordpress y quiero usar códigos cortos para insertar un código bastante grande dentro de la publicación. Obtuve este código simple que simula mi problema.
function shortcode_fn( $attributes ) {
wanted();
return "unwanted";
}
add_shortcode( 'simplenote', 'shortcode_fn');
function wanted(){
echo "wanted";
}
y publicar con este contenido
start
[simplenote]
end
que da este resultado:
wanted
start
unwanted
end
y quiero que inserte el texto “buscado” entre el inicio y el final. Sé que la solución más fácil sería simplemente devolver “buscado” en buscado(), pero ya tengo todas estas funciones y son bastante grandes. ¿Hay una solución fácil sin escribir todo desde cero?
@edit: ¿tal vez hay alguna forma de almacenar todos los ecos de la función en una cadena sin imprimirlos?
Una solución fácil es usar Control de salida funciones:
function shortcode_fn( $attributes ) {
ob_start(); // start a buffer
wanted(); // everything is echoed into a buffer
$wanted = ob_get_clean(); // get the buffer contents and clean it
return $wanted;
}
-
Lo hice, y funciona parcialmente. El texto es visible entre el inicio y el final, pero también imprime la función antes del inicio. ¿Hay alguna forma de suprimirlo?
– zbyshekh
28 de abril de 2014 a las 8:42
-
Debería ser suprimido. Este es el código original: eval.in/143153 Resultado: inicio deseado final no deseado Esto es con almacenamiento en búfer de salida: eval.in/143155 Resultado: inicio buscado final no deseado
– Ruslán Bes
28 de abril de 2014 a las 9:09
-
Funciona, mi mal 🙂 Usé ob_get_content en su lugar, ahora funciona perfectamente
– zbyshekh
28 de abril de 2014 a las 9:30
-
muchas gracias, me salvó el tiempo
– Lacas
8 de febrero a las 12:49
rambu
Siga este enlace http://codex.wordpress.org/Shortcode_API#Resumen
Cuando se muestra the_content, la API de shortcode analizará cualquier shortcode registrado como “[myshortcode]”, separe y analice los atributos y el contenido, si los hay, y páseles la función de controlador de shortcode correspondiente. Cualquier cadena devuelta (sin eco) por el controlador de shortcode se insertará en el cuerpo de la publicación en lugar del propio shortcode.
Por lo tanto, todas las funciones de shortcode deben devolverse, puede cambiar su función “quería” a esto:
function wanted(){
return "wanted";
}
matt gibson
La forma estándar de WordPress sería proporcionar dos funciones. Una, get_wanted()
haría devolver la cadena buscada; el otro, wanted()
es solo:
function wanted() {
echo get_wanted();
}
Entonces puede hacer cualquiera de las dos cosas, pero solo tiene la mayor parte del código en un solo lugar. Este es un patrón común en WordPress, por ejemplo the_title()
versus get_the_title()
.
Como menciona @Ruslan, la forma más estándar sin reescribir su función existente para construir una cadena sería usar el control de salida.
Usando la respuesta de Ruslan Bes, el código se ve así:
function shortcode_fn( $attributes ) {
ob_start(); // start a buffer
wanted(); // everything is echoed into a buffer
$wanted = ob_get_clean(); // get the buffer contents and clean it
return $wanted;
}
add_shortcode( 'simplenote', 'shortcode_fn');
function wanted(){
echo "wanted";
}
No creo que haya una forma de evitar esto, ya que las funciones para generar la salida del shortcode se ejecutan antes de la salida del contenido de la página/publicación, por lo tanto, el motivo por el que se muestra arriba en su ejemplo.
– alarde de
28 de abril de 2014 a las 6:59