do_shortcode () dentro de la página de administración

14

Estoy usando algunos complementos que tienen códigos cortos ... 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_pagey necesito saber cómo utilizarlas do_shortcode()en este contexto.

Tal como está, toda la función hace que escupe la cadena. Supongo que es porque la API de shortcode no está disponible en una página de administración.

¿Cómo puedo evitar esto? No hay documentación que pueda encontrar que explique cómo utilizar códigos cortos dentro de WP Admin ... o si es posible.


Específicamente estoy tratando de utilizar códigos cortos de WooCommerce dentro del Administrador de WP. Odio el hecho de que los complementos no utilicen WP Backend para la gestión de cuentas / usuarios.

dcolumbus
fuente
Quien vino y decidió que "no hice ninguna investigación" y me dio un puntaje negativo sin comentar es extremadamente inútil.
dcolumbus
1
Supongo que se podría decir que los códigos cortos son para contenido front-end ... ¿Estás tratando de usar otro complemento para generar contenido para tu propia página de administración de complementos?
Damien
@dcolumbus estoy de acuerdo. He visto algunos votos negativos espurios recientemente, ciertamente más de lo que recuerdo haber visto en el pasado. OMI, esta es una pregunta honesta (y bastante impresionante), por lo que actualmente estoy apuñalando una respuesta;)
TheDeadMedic
Si ha creado una página de administración, puede especificar el resultado: ¿por qué necesita / desea usar do_shortcode()? ¿Puede dar un ejemplo?
Stephen Harris
Especialmente estoy tratando de utilizar códigos cortos de WooCommerce. Gestión de usuarios y páginas de gestión de cuentas.
dcolumbus

Respuestas:

10

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

Ejemplo

Hay un shortcode nombrado [example]y una función registrada como controlador de shortcode:

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

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

En su página de administrador simplemente llame a la función:

echo example_shortcode( 
    array ( 'before' => 'This ', 'after' => '!' ), 
    'works' 
);

Salida: This works!.

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

fuxia
fuente
1
¡Ni siquiera había pensado en esto! Por otra parte, nunca había usado códigos cortos en el administrador (por alguna razón) y tenía una excusa para investigar;)
TheDeadMedic
No tengo idea de por qué tampoco he pensado en esto ... ¡Voy a intentarlo e informar!
dcolumbus
Una desventaja de esto es que se romperá si el autor del complemento refactoriza la función de devolución de llamada del shortcode en el futuro. Los cambios en el shortcode en sí probablemente serán compatibles con versiones anteriores, pero es menos probable que los nombres de las funciones internas del complemento lo sean.
Ian Dunn
2

Parece que la API de shortcode está disponible en el administrador, pero su salida dependerá de la etiqueta de shortcode en cuestión.

El incorporado [caption]funciona como se esperaba, [embed]pero no lo hace (esto se debe a cómo la API incrustada "carga perezosa" es shortcode y depende del the_contentfiltro que se ejecute, por lo que técnicamente no es la falla de la API shortcode).

Conclusión: depende completamente de cómo y cuándo se registra la etiqueta, y de lo que hace / asume cuando se ejecuta.

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

TheDeadMedic
fuente
1
Además, algunas etiquetas esperan get_the_ID()devolver una ID de publicación.
Stephen Harris