Ejecutar códigos cortos de WordPress en una cadena

2 minutos de lectura

avatar de usuario
tcox

Tengo una cadena que puede contener códigos cortos como “esta es una cadena con [anyshortcode1] y esto es [anyshortcode2]”. Quiero mostrar la cadena con los códigos cortos ejecutándose donde están colocados. Cuando hago eco de esta cadena, no hace los códigos cortos, solo los imprime dejándolos entre paréntesis. Traté de arreglar esto usando código como el siguiente:

$string_with_shortcodes = "this is a string with [anyshortcode1] and this is [anyshortcode2]";
$pattern = get_shortcode_regex();
preg_match_all("/$pattern/",$string_with_shortcodes, $matches);
foreach ($matches[0] as $short) {
    $string_with_shortcodes = str_replace($short, 'do_shortcode("' . $short . '")', $string_with_shortcodes);
}
eval("\$string_with_shortcodes = \"$string_with_shortcodes\";");
echo $string_with_shortcodes;

Esto realiza con éxito el reemplazo de la cadena, pero provoca un error con la función eval:

Error de análisis: error de sintaxis, T_STRING inesperado

¿Estoy usando mal la función eval? ¿O hay una forma más sencilla de ejecutar códigos cortos desde una cadena?

avatar de usuario
KodePara.Me

Para ejecutar la shortcode desde dentro de la cadena tienes que usar el do_shortcode() función.

Así es como se usa:

$string_with_shortcodes = "this is a string with [anyshortcode1] and this is [anyshortcode2]";
echo do_shortcode($string_with_shortcodes);

Si esto no funciona, entonces algo anda mal con su instalación.

También tenga en cuenta que eval() no es el mejor comando en su código ..! 🙂

Finalmente, asegúrese de que el código abreviado todavía existe. Hay muchos temas que usan códigos abreviados para diseñar el contenido y luego, cuando el usuario instala otro tema, los códigos abreviados anteriores ya no son funcionales, porque se eliminarán con el tema anterior.

  • ¡Wow gracias! Lo estaba haciendo demasiado complicado. Estaba malinterpretando cómo funcionaba do_shortcode.

    – tcox

    18 de diciembre de 2013 a las 13:49

  • Si encontraste tu respuesta, por favor márcala como la respuesta. De esta forma ahorras tiempo de otros usuarios de StackOverflow 😉 Ah… ¡¡Y bienvenido a WordPress World!! 🙂

    – KodeFor.Me

    18 de diciembre de 2013 a las 13:50

  • Además, si tienes algo como $str = '<div>[shortcode]</div>' también funciona si lo haces echo do_shortcode($str) como encanto

    – mapmalith

    24 de febrero de 2017 a las 6:51

avatar de usuario
Soni afortunado

$string_with_shortcodes = str_replace($short, do_shortcode($short), $string_with_shortcodes);

No estoy seguro de lo que está tratando de hacer con Eval.

  • Está tratando de permitir que su sitio sea pirateado por cualquiera que pueda escribir un código abreviado con eval es lo que está haciendo.

    – mopsyd

    24 de marzo de 2018 a las 22:27

  • Si sabe o no que eso es lo que está haciendo es otra cuestión.

    – mopsyd

    24 de marzo de 2018 a las 22:27

¿Ha sido útil esta solución?