web-dev-qa-db-fra.com

do_shortcode () ne fonctionne pas si un shortcode est contenu dans une variable, fonctionne si un shortcode est transmis sous forme de chaîne

Je développe un plugin dans lequel l’une des fonctionnalités est de changer de formulaire sur une page spécifique en modifiant le shortcode dans un champ personnalisé.

dans mon fichier de plugin:

function getShort()
{
    global $post;
    $m = get_post_meta($post->ID, 'short', true);
    return $m;
}

dans mon fichier de thème:

$short = getShort();
echo do_shortcode($short);

Avec le code ci-dessus, il n’imprime que le shortcode. Si je répète la valeur de $ short, copiez et collez-le comme argument de do_shortcode (), il affiche la valeur attendue.

Je suis sûr à 100% que la valeur de $ short est une chaîne et qu'il s'agit du shortcode correctement formaté. Une idée pourquoi ça ne marche pas?

2
Pizaul

Même si vous êtes sûr que ce n'est pas le cas, il semble que la valeur que vous transmettez manuellement ne soit pas identique à la valeur dans $short.

Videz le contenu de $short (var_dump($short);) et jetez un œil à la source de la page générée! Il y a de bonnes chances que la variable contienne des balises ou d'autres caractères qui ne seront pas visibles dans la vue du navigateur rendue.

1
ndm

Assurez-vous que la chaîne dans la variable $short est entre crochets, comme [header]. Si ce n'est pas stocké de cette façon, passez l'appel comme ceci echo do_shortcode('['.$short.']');

1
Radu Dragomir