web-dev-qa-db-fra.com

Shortcode ajoutant des balises p et br

Je m'excuse car je sais que cela a déjà été demandé et je crois que le problème concerne la fonction wpautop qui ajoute des balises de fermeture p ou br, mais chaque solution que j'ai trouvée n'a pas fonctionné, je ne peux donc pas résoudre le problème.

Je fais:

class my_plugin {

  public static function init() {
    remove_filter('the_content', 'wpautop');
    add_shortcode('myshortcode', array(__CLASS__, 'my_shortcode'));
  }

  public static function my_shortcode() {
    /* do stuff here */
    ob_start();
    include('views/file.php');
     return ob_get_clean();
  }
}

my_plugin::init();

J'ai aussi essayé:

remove_filter( 'the_content', 'wpautop' );
add_filter( 'the_content', 'wpautop' , 99 );
add_filter( 'the_content', 'shortcode_unautop', 100 );

Voici ce qu'il y a dans le fichier de vue en ce moment:

<form method="get" id="search" action="<?= get_permalink() ?>">
    <input name="st" id="st" class="text" type="text">
    <input id="search" class="submit" value="Search" type="submit">
</form>

Et voici ce qui est rendu:

<form method="get" id="search" action="">
    <input name="st" id="st" class="text" type="text"><br>
    <input id="search" class="submit" value="Search" type="submit"><br>
</form>

Si je prends la version originale et supprime tous les sauts de ligne, le rendu est correct. Le problème est qu’il s’agit d’une version considérablement simplifiée du fichier original et que l’édition de "vues" deviendrait un cauchemar si elles devaient se trouver sur une seule ligne.

Pour ce que ça vaut la peine si au lieu de retourner le contenu de la vue, tout se passe comme prévu (sauf bien sûr, pouvoir placer correctement le shortcode dans un autre contenu).

De plus, la partie "faire ici" ne fait qu'obtenir deux variables de la demande et un appel d'API pour configurer les variables utilisées dans la vue.

5
JSP

Je ne sais pas si cela sera utile à quelqu'un d'autre, mais la cause du problème était un formateur personnalisé que le thème avait:

function my_formatter($content) {
        $new_content = '';
        $pattern_full = '{(\[raw\].*?\[/raw\])}is';
        $pattern_contents = '{\[raw\](.*?)\[/raw\]}is';
        $pieces = preg_split($pattern_full, $content, -1, PREG_SPLIT_DELIM_CAPTURE);

        foreach ($pieces as $piece) {
                if (preg_match($pattern_contents, $piece, $matches)) {
                        $new_content .= $matches[1];
                } else {
                        $new_content .= wptexturize(wpautop($piece));
                }
        }

        return $new_content;
}

remove_filter('the_content', 'wpautop');
remove_filter('the_content', 'wptexturize');

add_filter('the_content', 'my_formatter', 99);

FWIW: Le thème est Avenue (de ThemeForest) qui utilise le cadre de thème "Pyre". La raison pour laquelle un autre site qui utilise le même thème n'a pas le problème est que le fichier functions.php a été réécrit/modifié dans le cadre d'un thème enfant et n'inclut pas le fichier shortcodes.php contenant la fonction ci-dessus.

Désolé de perdre votre temps, mais j'apprécie vraiment votre temps et vos réponses.

3
JSP

À travers Supprimer le formatage automatique de WordPress (voir au point 9), j’ai découvert que vous deviez utiliser les balises raw. Dans mon cas:

[raw][album=1 template=portfolio][/raw]

J'ai utilisé NextGEN Gallery et dans mes modèles, des balises p et br ont été ajoutées. Une autre option serait de commenter le formateur personnalisé. Mon thème s'appelait MG Universal Multimedia Gallery.

1
testing

Sans voir tout le code, c'est difficile à dire.

J'ai rencontré un problème à quelques reprises où certains sauts de ligne, espacement ou caractères étranges dans le balisage à l'intérieur des fonctions de shortcode obligent WP à ajouter automatiquement ceux où ils ne devraient pas se trouver.

En regardant votre fonction, cela pourrait être quelque chose comme ça dans views/file.php qui le fait. Assurez-vous que vous n'avez pas d'espacement étrange ou de sauts de ligne inutiles. Même essayer de supprimer les sauts de ligne et les rajouter. Cela semble bizarre, mais je l'ai déjà vu.

0
mindctrl