web-dev-qa-db-fra.com

Arrêtez WordPress en ajoutant automatiquement des balises <br> pour publier du contenu

Existe-t-il un moyen d'empêcher WordPress d'insérer automatiquement des 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 bon me semble et le rendre facile à lire.

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

[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 invisibles <br> seront ajoutées au contenu du message, ce qui perturbera la mise en page de ma page.

24
mvaneijgen

La réponse par le karité n'est pas idéale comme dans beaucoup de cas:

  • Vous ne voulez pas tout effacer de <br>, <p> etc. Vous le voulez comme comportement par défaut pour votre WP visual composer que le code ci-dessus va supprimer
  • Dans de nombreux cas, il est considéré comme un "piratage du noyau", car il modifie le comportement par défaut du noyau de WP - par exemple, une telle chose ne sera pas transmise à 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. Donc, ajoutez simplement un filtre et passez dans une variable un tableau de vos codes de code que vous souhaitez filtrer comme ceci:

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é et vos codes courts seront donc exempts de <br>, <p> etc., mais les autres parties du contenu - par exemple le texte standard dans l'éditeur WP créé par l'utilisateur - auront toujours toutes les fonctionnalités de WP.

Références:

  1. le_contenu WP filtre
  2. Regex "traducteur"
  3. rejoindre PHP fonction
  4. preg_replace PHP function
25
Borek

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 (insérer des 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ù mettre ce code.

13
shea

Installez le plugin "Don't Muck My Markup".

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 ensemble.

3
Brent Baccala

C'est probablement l'éditeur de texte qui fait des dégâts. C'est 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 les balises" <p> "et" <br /> "lors de la sauvegarde et affichez-les dans l'éditeur HTML". Travaillé pour moi.

1

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

Pour cela, j'ai utilisé les extraits de code plugin (vous permet d'ajouter facilement des extraits PHP _ arbitraires qui sont exécutés) pour créer un extrait de code pour un[html][/html]shortcode. La particularité de ce shortcode est qu’il est compatible avec le plug-in toggle-wpautop qui vous permet de désactiver l’insertion automatique des balises <br> et <p> sur tout un article. Vous pouvez utiliser soit, mélanger et assortir.

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);
0
Greg

Cette fonction supprime uniquement les balises <p> et <br> pour le shortcode.

function bnd_fix_shortcodes_extra_line_break( $content ){
  $array = array (
    '<p>['    => '[',
    ']</p>'   => ']',
    ']<br />' => ']'
  );
  $content = strtr( $content, $array );
  return $content;
}
add_filter('the_content', 'bnd_fix_shortcodes_extra_line_break');
0
Burhan Nasir

Vous pourriez peut-être 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);

0
Simon