Usar do_shortcode() en una página de administración

12 ago 2012, 00:26:44
Vistas: 13.6K
Votos: 15

Estoy usando algunos plugins que tienen shortcodes... sin embargo, en lugar de crear una página pública para el contenido, he creado algunas páginas nuevas dentro del administrador usando add_menu_page y necesito saber cómo utilizar do_shortcode() en este contexto.

Actualmente, la función solo devuelve el string. Supongo que es porque la API de shortcodes no está disponible en una página de administración.

¿Cómo puedo solucionar esto? No hay documentación que explique cómo utilizar shortcodes dentro del WP Admin... o si siquiera es posible.


Específicamente estoy intentando utilizar shortcodes de WooCommerce dentro del WP Admin. No me gusta que los plugins no utilicen el backend de WP para la gestión de cuentas/usuarios.

5
Comentarios

Quien sea que vino y decidió que "no hice ninguna investigación" y me dio una puntuación negativa sin comentar es extremadamente poco útil.

dcolumbus dcolumbus
12 ago 2012 00:39:34

Supongo que podrías decir que los shortcodes son para contenido de front end... ¿Estás intentando usar otro plugin para generar contenido para la página de administración de tu propio plugin?

Damien Damien
12 ago 2012 00:56:09

@dcolumbus Estoy de acuerdo. He visto algunos votos negativos falsos recientemente, definitivamente más de los que recuerdo haber visto en el pasado. En mi opinión, esta es una pregunta honesta (y bastante impresionante), así que actualmente estoy intentando dar una respuesta ;)

TheDeadMedic TheDeadMedic
12 ago 2012 01:39:05

Si has creado una página de administración, entonces puedes especificar la salida - ¿por qué necesitas/quieres usar do_shortcode()? ¿Podrías proporcionar un ejemplo?

Stephen Harris Stephen Harris
12 ago 2012 01:53:12

Específicamente estoy intentando utilizar los shortcodes de WooCommerce. Páginas de gestión de usuarios y gestión de cuentas.

dcolumbus dcolumbus
12 ago 2012 22:35:05
Todas las respuestas a la pregunta 2
3
10

En lugar de llamar a do_shortcode(), simplemente llama a la función asociada con el shortcode.

Ejemplo

Hay un shortcode llamado [example] y una función registrada como manejadora del shortcode:

function example_shortcode( $atts = array(), $content = '' )
{
    extract( 
            shortcode_atts( 
            array (
            'before' => '',
            'after' => '',
            ), 
            $atts 
       )
   );

    return $before . $content . $after;
}
add_shortcode( 'example', 'example_shortcode' );

En tu página de administrador simplemente llama a la función:

echo example_shortcode( 
    array ( 'before' => 'Esto ', 'after' => '!' ), 
    'funciona' 
);

Salida: Esto funciona!.

Más rápido y confiable que do_shortcode().

12 ago 2012 02:01:04
Comentarios

¡Ni siquiera había pensado en esto! Aunque nunca había usado shortcodes en el administrador (por la razón que sea) y tenía una excusa para investigar ;)

TheDeadMedic TheDeadMedic
12 ago 2012 02:15:00

No tengo idea de por qué tampoco había pensado en esto... Voy a probarlo y reportar los resultados.

dcolumbus dcolumbus
12 ago 2012 22:35:38

Un inconveniente de esto es que dejará de funcionar si el autor del plugin refactoriza la función callback del shortcode en el futuro. Los cambios en el shortcode probablemente serán compatibles con versiones anteriores, pero es menos probable que los nombres de funciones internas del plugin lo sean.

Ian Dunn Ian Dunn
15 sept 2012 12:49:50
1

Parece que la API de shortcodes está disponible en el panel de administración, pero su resultado dependerá del shortcode en cuestión.

El shortcode incorporado [caption] funciona como se espera, mientras que [embed] no (esto se debe a cómo la API de embed "carga perezosamente" su shortcode y depende del filtro the_content para ejecutarse, así que técnicamente no es culpa de la API de shortcodes).

Conclusión: Depende completamente de cómo y cuándo se registra el shortcode, y qué hace/asume cuando se ejecuta.

@dcolumbus ¿De qué shortcode estamos hablando en tu caso?

12 ago 2012 01:47:59
Comentarios

Además, algunas etiquetas esperarán que get_the_ID() devuelva un ID de publicación.

Stephen Harris Stephen Harris
12 ago 2012 01:52:09