Deja de WordPress agregar automáticamente etiquetas br para publicar contenido

22

¿Hay alguna manera de evitar que WordPress inserte automáticamente las etiquetas <br> al agregar devoluciones en el editor de texto de WordPress?

Me gustaría que se comportara más como un editor de código donde puedo estructurar el código como me gusta y hacerlo más fácil de leer.

El código que estoy usando en el editor es:

[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]

Me gustaría estructurarlo así para que sea más fácil de leer y editar:

[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]

Sin embargo, cuando haga esto, se agregarán etiquetas invisibles <br> al contenido de la publicación, lo que arruinará el diseño de mi página.

    
pregunta mvaneijgen 16.01.2014 - 23:03

8 respuestas

24

La respuesta por shea no es ideal como en muchos casos:

  • No desea eliminar todo de <br>, <p> , etc. Lo quiere como un comportamiento predeterminado para su compositor visual de WP que el código anterior eliminará
  • En muchos casos se considera como "hackear el núcleo" ya que esto está cambiando el comportamiento básico predeterminado de WP - por ejemplo, tal cosa no pasará en ThemeForest

Como puedo ver, principalmente tienes problemas con tus códigos cortos. La forma correcta de abordar esto no es cambiar el comportamiento predeterminado (piratear el núcleo) sino simplemente filtrar el contenido. Así que solo agregue un filtro y, en una variable, pase una matriz de los códigos de disparo que desea filtrar de esta manera:

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");

El contenido interno se filtrará y, por lo tanto, sus códigos cortos estarán libres de <br>, <p> etc., pero las otras partes del contenido, por ejemplo, el texto estándar en el editor de WP creado por el usuario, aún tendrán la funcionalidad completa de WP.

Referencias:

  1. the_content WP filter
  2. Regex "traductor"
  3. unirse a la función PHP
  4. función PHP preg_replace
respondido por el Borek 17.01.2014 - 20:24
13

La función wpautop() agrega las etiquetas <p> y <br> a su contenido para preservar los saltos de línea. Si prefiere agregar estas etiquetas, puede eliminar los filtros que aplican esta función al contenido de la publicación:

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

Si desea mantener la creación automática de paragaraph (insertar etiquetas <p> ) y simplemente eliminar las etiquetas <br> adicionales, puede usar este código en su lugar:

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' );

Consulte este enlace si no está seguro de dónde colocar este código.

    
respondido por el shea 17.01.2014 - 05:18
2

Instala el complemento "No deseches mi marca".

Agrega una opción de casilla de verificación a cada página que deshabilita la inserción automática de las etiquetas <p> y <br> .

También hay una opción para hacer esto en todo el sitio.

    
respondido por el Brent Baccala 23.11.2016 - 00:19
1

Probablemente es el editor de texto el que hace un lío. Esto es lo que hice:

Yo uso TinyMCE. En la configuración del editor de texto, desmarque "Dejar de eliminar" < p > "y" < br / > "etiquetas al guardar y mostrarlas en el editor HTML". Trabajó para mí.

    
respondido por el Svein E. Slotte Pedersen 20.09.2016 - 09:28
0

Tal vez podría simplemente usar do_shortcode() si todo lo que tiene en su contenido son códigos cortos, siempre y cuando no tenga ningún otro contenido que necesite los filtros.

No sé el contexto, pero si estás en el bucle:

echo do_shortcode($post->post_content);

    
respondido por el Simon 17.11.2015 - 23:37
0

La respuesta de Borek no funcionó para mi caso de uso, que es escribir HTML sin procesar.

Para eso utilicé el Fragmentos de código (le permite agregar fácilmente fragmentos de código PHP que se ejecutan) para crear un fragmento de código corto [html][/html] . Lo bueno de este código abreviado es que es compatible con toggle-wpautop complemento que te permite desactivar la inserción automática de las etiquetas <br> y <p> en una publicación completa. Puedes usar cualquiera de los dos, mezclar & partido.

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);
    
respondido por el Greg 07.12.2016 - 20:41
-1

Enfoque alternativo que he usado: una clase de utilidad js. Práctico si no tienes ganas de morder con expresiones regulares en todo el contenido.

Tenga una clase (como por ejemplo, 'no-breaks') en el elemento padre:

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

Luego, en js, utilízalo para eliminar esas etiquetas br:

// zap all the br tags wpautop adds
$('.no-breaks').find('br').remove();
    
respondido por el yuvilio 07.08.2018 - 22:04
-3

Una solución muy simple: no utilice nuevas líneas en el editor de wordpress. Sí, aclarar nuevas líneas. Sin embargo, en este caso, no puede haber interrupciones comprensibles de manera aceptable.

    
respondido por el J.K. 05.12.2015 - 12:51

Lea otras preguntas en las etiquetas