web-dev-qa-db-fra.com

Faire fonctionner le shortcode avec les guillemets doubles imbriqués

J'ai shortcode suivant:

function infobox_shortcode( $atts, $content = null ) {

    extract( shortcode_atts( array(
      'src' => '',
      'title' => '',
      'text' => '',
    ), $atts, 'infobox' ) );

    $return = '<div class="infobox clearfix"><div class="col-md-1 infobox-image"><img src="'.$src.'" alt="'.$title.'"/></div><div class="col-md-8 infobox-content"><h2> ' . $title . '</h2><p>' . $text . '</p></div></div>';

    return $return;

}
add_shortcode( 'infobox', 'infobox_shortcode' );

Cela fonctionne bien, lorsque l'utilisateur l'utilise simplement comme ceci:

[infobox src="http://www.google.com" title="Google" text="Some description"]

Mais:

Dès que les utilisateurs essaient d’ajouter, par exemple un lien avec des guillemets vers le shortcode, il - bien sûr - rompt:

[infobox src="http://www.google.com" title="Google" text="Some description - see more: <a href="http://www.google.com">More here</a>"]

Le problème est que mon utilisateur utilise l'éditeur WP pour ajouter un lien, ce qui crée des guillemets doubles. Alsor WordPress semble supprimer les guillemets simples pour les attributs par défaut et ajoute des guillemets doubles qui brisent à nouveau mon shortcode.

En ce moment, je vois 2 solutions pour cela, mais les deux ne sont pas tout à fait satisfaisants.

a) Dites à WP de ne pas convertir les guillemets simples en guillemets doubles dans des liens href lors de l'enregistrement d'un post ou b) Pour que le shortcode fonctionne avec des guillemets doubles.

Y at-il d’autres astuces ou solutions de contournement?

Merci!

Mike

4
Mike

De toute façon, cela semble être une solution très maladroite pour le balisage arbitraire en shortcode.

Si un seul des attributs est plus volumineux et inclut du balisage, je considérerais de faire un shortcode englobant:

[infobox src="http://www.google.com" title="Google"]
    Some description - see more: <a href="http://www.google.com">More here</a>
[/infobox]

Vous êtes peut-être à un point où vous aurez besoin de créer une interface utilisateur personnalisée, ou les utilisateurs seront trop exposés aux erreurs.

3
Rarst