web-dev-qa-db-fra.com

Shortcodes, mise en mémoire tampon de sortie et fonctions WordPress

J'ai quelques formulaires longs que je veux produire en codes courts. API Shortcode indique que

Si le shortcode génère beaucoup de code HTML, alors ob_start peut être utilisé pour capturer la sortie et le convertir en chaîne.

Cela semble être exactement mon cas. De plus, je souhaite utiliser les fonctions WordPress dans mon code HTML, comme ceci:

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

    ob_start();
    ?>
    <div id="reg_form">
        <h2><?php echo __('Login info', 'my-plugin-domain'); ?></h2>
        <!-- and so on -->

    </div>
    <p><a href="<?php echo site_url( 'dashboard' ); ?>"><?php echo __('Go to Dashboard', 'my-plugin-domain'); ?></a>!</p>
    <?php
    $output_string = ob_get_contents();
    ob_end_clean();

    return $output_string;
}

add_shortcode('register_form', array( $this, 'my_shortcode_register_form' ));

Cela fonctionne bien, mais je m'intéresse aux meilleures pratiques, aux bugs potentiels et aux performances. Des inconvénients à cette approche? Quelque chose qui pourrait aller terriblement mal?

J'ai vu au moins une question sur cet avertissement, n'utilisez pas seulement la mise en mémoire tampon de la sortie, sauf en cas d'absolue nécessité. Devrais-je simplement importer ces formulaires dans des modèles?

3
montrealist

Devrais-je simplement importer ces formulaires dans des modèles?

Cela dépend du formulaire et vous n'avez pas imprimé beaucoup de détails sur ce que font vos formulaires. Les codes abrégés sont gentils mais ne sont pas le bon outil pour chaque travail.

Je voudrais:

  1. Préférez un modèle dédié à un shortcode, en particulier pour les formulaires longs. Vous commencez à avoir à manipuler les données $_POST ou $_GET dans le shortcode ou à vérifier la présence de ces données dans votre en-tête, ou autre, et cela devient confus. De plus, le shortcode est une surcharge qui peut être évitée.
  2. Envisagez une exception à la règle n ° 1 et créez un shortcode si le formulaire doit être réutilisé sur plusieurs pages ou si cette réutilisation est au moins une possibilité plausible. Honnêtement, si le test de "réutilisation" échoue, je ne vois pas du tout l'intérêt du shortcode.
  3. Envisagez une exception aux règles n ° 1 et n ° 2 si vous avez besoin d'un contenu modifiable autour du code court.
  4. Si vous écrivez un plugin, un shortcode est l’un de vos meilleurs choix. Vous pouvez demander aux personnes de créer un modèle de page et d'insérer du code, ou de modifier les règles de réécriture pour créer votre propre pseudo-page, mais la première est choquante pour la plupart des utilisateurs et la seconde est complexe. Même demander aux gens de coller un shortcode dans le corps du message peut provoquer une panique, mais à un moment donné, l’humanité doit apprendre à utiliser un ordinateur.

Je suis sûr qu'il y a d'autres préoccupations, mais ce sont celles qui me semblent les plus importantes.

3
s_ha_dum