Arrêtez WordPress d'ajouter automatiquement des balises <br> pour publier du contenu

26

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

Je voudrais qu'il se comporte davantage comme un éditeur de code où je peux structurer le code comme j'aime 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 afin qu'il soit plus facile à lire et à modifier:

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

mvaneijgen
la source
Voulez-vous supprimer les balises partout ou uniquement pour ces shortcodes?
shea
Veuillez voir ma réponse ici: wordpress.stackexchange.com/questions/55782/…
Chiedo

Réponses:

25

La réponse du karité n'est pas idéale comme dans de nombreux cas:

  • Vous ne voulez pas tout <br>, <p>supprimer, etc. Vous le voulez comme comportement par défaut pour votre compositeur visuel WP que le code ci-dessus supprimera
  • Dans de nombreux cas, il est considéré comme "piratage du noyau" car cela modifie le comportement du noyau 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 shortcodes. La bonne façon d'aborder cela n'est pas de changer le comportement par défaut (pirater le cœur) mais simplement de filtrer le contenu. Il suffit donc d'ajouter un filtre et dans une variable de passer un tableau de vos codes de prise de vue 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 donc vos shortcodes seront exempts de <br>, <p>etc., mais les autres parties de contenu - par exemple le texte standard dans l'éditeur WP créé par l'utilisateur - auront toujours toutes les fonctionnalités de WP.

Les références:

  1. filtre WP the_content
  2. "Traducteur" Regex
  3. rejoindre la fonction PHP
  4. fonction PHP preg_replace
Borek
la source
Cela a parfaitement fonctionné dans mon projet. Génial, formidable, merveilleux, brillant ..... Tellement excellent!
arefin2k
@Borek C'est génial et semble très bien fonctionner (+1), mais pour améliorer votre réponse, vous pourriez expliquer CE qu'il fait? De l'apparence des choses, il est de retirer <p>et <br>étiquettes de près one_third et team_membershortcodes, mais je ne suis pas exactement sûr (mes compétences en expression régulière ne sont certainement pas à la hauteur). Pouvez-vous décrire ce qu'il fait pour nous et maintenant nous pouvons le configurer pour d'autres shortcodes?
dKen
@dKen Il fait exactement ce que vous avez écrit. En dehors des regex, c'est vraiment simple car le contenu est encadré par un filtre WP intégré the_content. Nous avons juste besoin de donner le contenu à filtrer via une fonction dans laquelle nous spécifions quel (bloc) et comment (rep) filtrer. J'ai ajouté des références afin que vous compreniez mieux cela en vérifiant chaque fonction et filtre. Quant à l'ajout de shortcodes, il vous suffit d'élargir le tableau $ block en y ajoutant simplement des noms de shortcodes commejoin("|",array("one_third", "team_member", "next_one", "another_one", "one_more"));
Borek
... dit le développeur professionnel, bravo. Upvoting.
fusion27
Pour info cela ne fonctionne que lorsque la page est consultée. Cependant, dans votre éditeur, vous pouvez très bien voir des <p> et <br> indésirables comme d'habitude.
MarsAndBack
13

La wpautop()fonction ajoute <p>et <br>balise 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 post:

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

Si vous souhaitez conserver la création automatique de paragaraphe (insertion de <p>balises) et simplement supprimer les <br>balises 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.

karité
la source
3

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 effectuer cette opération à l'échelle du site.

Brent Baccala
la source
1

C'est probablement l'éditeur de texte qui gâche. C'est ce que j'ai fait:

J'utilise TinyMCE. Dans les paramètres de l'éditeur de texte, j'ai décoché la case "Arrêter la suppression des balises" <p> "et" <br /> "lors de l'enregistrement et les afficher dans l'éditeur HTML". A travaillé pour moi.

Svein E. Slotte Pedersen
la source
0

Vous pourriez peut-être simplement utiliser do_shortcode()si tout ce que vous avez dans votre contenu est des shortcodes, tant que vous n'avez aucun autre contenu qui a besoin des filtres.

Je ne connais pas le contexte, mais si vous êtes dans la boucle:

echo do_shortcode($post->post_content);

Simon
la source
0

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é le plugin Code Snippets (vous permet d'ajouter facilement des extraits PHP arbitraires qui s'exécutent) pour créer un extrait pour un [html][/html]shortcode. Ce qui est cool à propos de ce shortcode, c'est qu'il est compatible avec le plugin 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);
Greg
la source
0

Cette fonction supprime uniquement la balise <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');
Burhan Nasir
la source
Il affecte également tous les cas dans lesquels [et ne] sont pas utilisés dans le cadre d'un appel de shortcode.
fuxia
0

pour ceux qui ne sont pas familiarisés avec le piratage de code ou qui ne veulent pas utiliser de plug-in, vous pouvez le faire.

1) copier tout le code actuel des pages WP (éditeur de texte) entrez la description de l'image ici

2) puis collez-le dans le bloc-notes et continuez à modifier (ajoutez un code court, un code html ou un code css)

3) Copiez la pâte du bloc-notes dans le même éboulis sur les pages WP (éditeur de texte)

4) Appuyez sur le bouton [UPDATE] qui est situé sur le côté droit des mêmes pages WP pour publier les pages

entrez la description de l'image ici

5) Enfin, prévisualisez-le sur le site en direct

L'astuce ici est de ne pas revenir à [éditeur visuel] pour ces pages particulières, puis d'ajouter automatiquement [p] ou [br] ne se produira plus.

Broche HO LI
la source
-3

Une solution très simple: n'utilisez pas de nouvelles lignes dans l'éditeur wordpress. Oui, de nouvelles lignes clarifient. Cependant, dans ce cas, aucune pause ne peut être acceptée de manière acceptable.

JK
la source