do_shortcode () dans la page d'administration

14

J'utilise quelques plugins qui ont des shortcodes ... cependant, au lieu de créer une page publique pour le contenu, j'ai créé de nouvelles pages au sein de l'administrateur en utilisant add_menu_pageet j'ai besoin de savoir comment utiliser do_shortcode()dans ce contexte.

En l'état, toute la fonction crache la chaîne. Je suppose que c'est parce que l'API shortcode n'est pas disponible dans une page d'administration.

Comment puis-je contourner cela? Il n'y a aucune documentation que je puisse trouver qui explique comment utiliser les shortcodes dans WP Admin ... ou si c'est même possible.


Plus précisément, j'essaie d'utiliser les shortcodes WooCommerce dans WP Admin. Je déteste le fait que les plugins n'utilisent pas le WP Backend pour la gestion des comptes / utilisateurs.

dcolumbus
la source
Celui qui est venu et a décidé que "je n'ai fait aucune recherche" et m'a donné un score négatif sans commenter est extrêmement inutile.
dcolumbus
1
Je suppose que vous pourriez dire que les shortcodes sont pour le contenu frontal ... Essayez-vous d'utiliser un autre plugin pour générer du contenu pour votre propre page d'administration de plugin?
Damien
@dcolumbus je suis d'accord. J'ai récemment vu quelques faux votes négatifs, certainement plus que je ne me souviens avoir vu dans le passé. OMI, c'est une question honnête (et assez géniale), donc je suis en train de
tenter
Si vous avez créé une page d'administration, vous pouvez spécifier la sortie - pourquoi avez-vous besoin / voulez-vous utiliser do_shortcode(). Pouvez vous donner un exemple?
Stephen Harris
En particulier, j'essaie d'utiliser les shortcodes WooCommerce. Pages de gestion des utilisateurs et de gestion des comptes.
dcolumbus

Réponses:

10

Au lieu d'appeler, il do_shortcode()suffit d'appeler la fonction associée au shortcode.

Exemple

Il y a un shortcode nommé [example]et une fonction enregistrée comme gestionnaire de shortcode:

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

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

Dans votre page d'administration, vous appelez simplement la fonction:

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

Sortie: This works!.

Plus rapide et plus fiable que do_shortcode().

fuxia
la source
1
Je n'avais même pas pensé à ça! Là encore, je n'avais jamais utilisé de shortcodes dans l'admin (pour une raison quelconque) et j'avais une excuse pour enquêter;)
TheDeadMedic
Je n'ai aucune idée pourquoi je n'y ai pas pensé non plus ... Je vais essayer et faire un rapport!
dcolumbus
Un inconvénient est qu'il se cassera si l'auteur du plugin refactorise la fonction de rappel du shortcode à l'avenir. Les modifications apportées au shortcode lui-même seront probablement rétrocompatibles, mais il est moins probable que les noms des fonctions internes du plugin le soient.
Ian Dunn
2

Il semble que l'API shortcode soit disponible dans l'admin, mais sa sortie dépendra de la balise shortcode en question.

L'intégré [caption]fonctionne comme prévu, alors [embed]que non (cela est dû à la façon dont l'API intégrée "charge paresseusement" son shortcode, et dépend du the_contentfiltre à exécuter, donc techniquement pas la faute de l'API shortcode).

Conclusion: Cela dépend entièrement de la façon dont la balise est enregistrée et de ce qu'elle fait / suppose lorsqu'elle est exécutée.

@dcolumbus De quelle balise parlons-nous dans votre cas?

TheDeadMedic
la source
1
De plus, certains tags s'attendent get_the_ID()à renvoyer un ID de publication.
Stephen Harris