Arrêtez WordPress en ajoutant automatiquement les balises br pour publier du contenu.

22

Existe-t-il un moyen d'empêcher WordPress d'insérer automatiquement les balises <br> lors de l'ajout de retours dans l'éditeur de texte WordPress.

J'aimerais qu'il se comporte davantage comme un éditeur de code où je peux structurer le code comme je le souhaite et le rendre facile à lire.

Le code que j'utilise dans l'éditeur est le suivant:

[one_third][team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"][custom_button url="#"]For more information[/custom_button][/team_member][/one_third][one_third][team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"][custom_button url="#"]For more information[/custom_button][/team_member][/one_third][one_third][team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"][custom_button url="#"]For more information[/custom_button][/team_member][/one_third]

Je voudrais le structurer comme ceci pour qu'il soit plus facile à lire et à éditer:

[one_third]
[team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"]
[custom_button url="#"]For more information[/custom_button]
[/team_member]
[/one_third]

[one_third]
[team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"]
[custom_button url="#"]For more information[/custom_button]
[/team_member]
[/one_third]

[one_third]
[team_member image_url="team_member.jpg" name="Laser vision" role="WordPress Designer"]
[custom_button url="#"]For more information[/custom_button]
[/team_member]
[/one_third]

Cependant, lorsque cela sera fait, des balises <br> invisibles seront ajoutées au contenu du message, ce qui perturbera la présentation de ma page.

    
posée mvaneijgen 16.01.2014 - 23:03

8 réponses

24

La réponse par le karité n’est pas idéale, car dans de nombreux cas:

  • Vous ne voulez pas tout supprimer de <br>, <p> etc. Vous le voulez comme comportement par défaut pour votre composeur visuel WP que le code ci-dessus va supprimer
  • Dans de nombreux cas, il est considéré comme un "piratage du noyau", car cela modifie la comportement de base par défaut de WP - par exemple, une telle chose ne passera pas sur ThemeForest

Comme je peux le voir, vous avez principalement des problèmes avec vos codes courts. La bonne façon de procéder est de ne pas modifier le comportement par défaut (pirater le noyau), mais simplement de filtrer le contenu. Il suffit donc d’ajouter un filtre et de transmettre dans une variable un tableau de vos codes de code que vous souhaitez filtrer, comme suit:

function the_content_filter($content) {
    $block = join("|",array("one_third", "team_member"));
    $rep = preg_replace("/(<p>)?\[($block)(\s[^\]]+)?\](<\/p>|<br \/>)?/","[$2$3]",$content);
    $rep = preg_replace("/(<p>)?\[\/($block)](<\/p>|<br \/>)?/","[/$2]",$rep);
return $rep;
}
add_filter("the_content", "the_content_filter");

Le contenu à l'intérieur sera filtré. Par conséquent, vos codes abrégés seront exempts de <br>, <p> etc., mais les autres parties du contenu - par exemple le texte standard dans l'éditeur de WP créé par l'utilisateur - auront toujours toutes les fonctionnalités de WP.

Références:

  1. le filtre WP the_content
  2. "traducteur" regex
  3. rejoindre la fonction PHP
  4. fonction PHP preg_replace
réponse donnée Borek 17.01.2014 - 20:24
13

La fonction wpautop() ajoute des balises <p> et <br> à votre contenu afin de préserver les sauts de ligne. Si vous préférez ajouter ces balises vous-même, vous pouvez supprimer les filtres qui appliquent cette fonction au contenu du message:

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

Si vous souhaitez conserver la création automatique de paragaraphe (en insérant les balises <p> ) et simplement supprimer les balises <br> supplémentaires, vous pouvez utiliser ce code à la place:

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

function wpse_wpautop_nobr( $content ) {
    return wpautop( $content, false );
}

add_filter( 'the_content', 'wpse_wpautop_nobr' );
add_filter( 'the_excerpt', 'wpse_wpautop_nobr' );

Voir ce lien si vous ne savez pas où placer ce code.

    
réponse donnée shea 17.01.2014 - 05:18
2

Installez le plug-in "Ne perdez pas mon code".

Il ajoute une option de case à cocher à chaque page, désactivant l'insertion automatique des balises <p> et <br> .

Il existe également une option pour faire ce site dans son intégralité.

    
réponse donnée Brent Baccala 23.11.2016 - 00:19
1

C’est probablement l’éditeur de texte qui fait des dégâts. Voici ce que j'ai fait:

J'utilise TinyMCE. Sous les paramètres de l'éditeur de texte, j'ai décoché "Arrêtez de supprimer le" < p > "et" < br / > "balises lors de la sauvegarde et les afficher dans l'éditeur HTML". Travaillé pour moi.

    
réponse donnée Svein E. Slotte Pedersen 20.09.2016 - 09:28
0

Peut-être pourriez-vous simplement utiliser do_shortcode() si votre contenu ne contient que des codes abrégés, tant que vous n'avez pas d'autre contenu nécessitant des filtres.

Je ne connais pas le contexte, mais si vous êtes au courant:

echo do_shortcode($post->post_content);

    
réponse donnée Simon 17.11.2015 - 23:37
0

La réponse de Borek n'a pas fonctionné pour mon cas d'utilisation, qui consiste à écrire du code HTML brut.

Pour cela, j'ai utilisé le plug-in Extraits de code (vous permet d'ajouter facilement des extraits PHP arbitraires à exécuter) pour créer un extrait de code pour un shortcode [html][/html] . La particularité de ce shortcode est qu’il est compatible avec le toggle-wpautop qui vous permet de désactiver l'insertion automatique des balises <br> et <p> sur une publication entière. Vous pouvez utiliser soit, mix & match.

function html_shorttag_filter($content) {
  // Based on: https://wordpress.org/plugins/lct-temporary-wpautop-disable-shortcode/
  $new_content = '';
  $pieces = preg_split('/(\[html\].*?\[\/html\])/is', $content, -1, PREG_SPLIT_DELIM_CAPTURE);
  // don't interfere with plugin that disables wpautop on the entire page
  // see: https://plugins.svn.wordpress.org/toggle-wpautop/tags/1.2.2/toggle-wpautop.php
  $autop_disabled = get_post_meta(get_the_ID(), '_lp_disable_wpautop', true);
  foreach ($pieces as $piece) {
    if (preg_match( '/\[html\](.*?)\[\/html\]/is', $piece, $matches)) {
      $new_content .= $matches[1];
    } else {
      $new_content .= $autop_disabled ? $piece : wpautop($piece);
    }
  }
  // remove the wpautop filter, but only do it if the other plugin won't do it for us
  if (!$autop_disabled) {
    remove_filter('the_content', 'wpautop');
    remove_filter('the_excerpt', 'wpautop');
  }
  return $new_content;
}
// idea to use 9 is from: https://plugins.svn.wordpress.org/wpautop-control/trunk/wpautop-control.php
add_filter('the_content', 'html_shorttag_filter', 9);
add_filter('the_excerpt', 'html_shorttag_filter', 9);
    
réponse donnée Greg 07.12.2016 - 20:41
-1

Autre approche que j'ai utilisée: une classe d'utilitaires js. Pratique si vous n’avez pas envie de mélanger regex avec tout le contenu.

Avoir une classe (par exemple, 'no-breaks') sur l'élément parent:

<div class="no-breaks"> 
    ...content that is run through a wpautop here...
</div>

Puis sur js, utilisez-le pour zapper ces balises br:

// zap all the br tags wpautop adds
$('.no-breaks').find('br').remove();
    
réponse donnée yuvilio 07.08.2018 - 22:04
-3

Une solution très simple: n’utilisez pas de nouvelles lignes dans l’éditeur wordpress. Oui, les nouvelles lignes clarifient. Toutefois, dans ce cas, aucune interruption ne peut toujours être comprise de manière acceptable.

    
réponse donnée J.K. 05.12.2015 - 12:51

Lire d'autres questions sur les étiquettes