Deje de que WordPress agregue automáticamente etiquetas <br> para publicar contenido

26

¿Hay alguna manera de evitar que WordPress inserte <br>etiquetas automáticamente al agregar retornos 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 a mi gusto y hacer que sea 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 <br>etiquetas invisibles al contenido de la publicación que estropearán el diseño de mi página.

mvaneijgen
fuente
¿Desea eliminar las etiquetas en todas partes , o solo para esos códigos cortos?
shea
Vea mi respuesta aquí: wordpress.stackexchange.com/questions/55782/…
Chiedo

Respuestas:

25

La respuesta de karité no es ideal como en muchos casos:

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

Como puedo ver, principalmente tiene problemas con sus códigos cortos. La forma correcta de abordar esto no es cambiar el comportamiento predeterminado (piratear el núcleo) sino simplemente filtrar el contenido. Entonces, solo agregue un filtro y, en una variable, pase una matriz de sus 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 dentro 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, texto estándar en el editor de WP creado por el usuario, seguirán teniendo 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
Borek
fuente
Funcionó perfectamente en mi proyecto. Impresionante, tremendo, maravilloso, brillante ... ¡Excelente!
arefin2k
@Borek Esto es increíble y parece funcionar realmente bien (+1), pero para mejorar su respuesta, podría explicar ¿QUÉ está haciendo? Por el aspecto de las cosas, está eliminando <p>y <br>etiquetando códigos cercanos one_third y team_membercortos, pero no estoy exactamente seguro (mis habilidades REGEX definitivamente no están a la altura). ¿Puede describir lo que hace por nosotros y ahora podemos configurarlo para otros códigos cortos?
dKen
@dKen Está haciendo exactamente lo que escribiste. Además de la expresión regular, es realmente simple ya que el contenido está incluido en un filtro WP incorporado the_content. Solo necesitamos dar el contenido para filtrar a través de la función en la que especificamos qué (bloquear) y cómo (rep) filtrar. He agregado referencias para que comprenda mejor esto al revisar cada función y filtro. En cuanto a agregar más códigos cortos, solo necesita expandir la matriz $ block simplemente agregando nombres de códigos cortos comojoin("|",array("one_third", "team_member", "next_one", "another_one", "one_more"));
Borek
... dijo el desarrollador profesional, bien hecho. Votación a favor.
fusion27
FYI esto funciona solo cuando se ve la página. Sin embargo, en su editor es muy posible que todavía vea <p> 'y' s no deseados como de costumbre.
MarsAndBack
13

La wpautop()función agrega <p>y <br>etiqueta a su contenido para preservar los saltos de línea. Si prefiere agregar estas etiquetas usted mismo, 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 <p>etiquetas) y simplemente eliminar las <br>etiquetas 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' );

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

Ella a
fuente
3

Instale el complemento "No muck My Markup".

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

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

Brent Baccala
fuente
1

Probablemente es el editor de texto el que hace un desastre. Esto es lo que hice:

Yo uso TinyMCE. En la configuración del editor de texto, desmarqué "Dejar de eliminar las etiquetas" <p> "y" <br /> "al guardarlas y mostrarlas en el editor HTML". Trabajó para mi.

Svein E. Slotte Pedersen
fuente
0

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

No sé el contexto, pero si estás al tanto:

echo do_shortcode($post->post_content);

Simon
fuente
0

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

Para eso utilicé el complemento de fragmentos de código (le permite agregar fácilmente fragmentos arbitrarios de PHP que se ejecutan) para crear un fragmento para un [html][/html]código corto. Lo bueno de este código corto es que es compatible con el conmutador-wpautop plugin que le permite desactivar la inserción automática de <br>y <p>etiquetas sobre todo un mensaje. Puede usar cualquiera, mezclar y combinar.

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
fuente
0

Esta función solo elimina la etiqueta <p>y <br>para el 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
fuente
También afecta a todos los casos en los que [y ]son no utilizado como parte de una llamada de código corto.
fuxia
0

para aquellos que no están familiarizados con el pirateo de código o no quieren usar el complemento, pueden hacerlo.

1) copie todo el código actual de las páginas WP (editor de texto) ingrese la descripción de la imagen aquí

2) luego pegue en el bloc de notas y continúe requiriendo edición (agregue código corto, código html o código css)

3) Copie y pegue del bloc de notas en la misma pantalla en las páginas WP (editor de texto)

4) Presione el botón [ACTUALIZAR] que se encuentra en el lado derecho de las mismas páginas de WP para publicar las páginas

ingrese la descripción de la imagen aquí

5) Finalmente previsualízalo en el sitio en vivo

El truco aquí es no volver al [editor visual] para estas páginas en particular y luego agregar automáticamente para [p] o [br] ya no sucederá.

Pin HO LI
fuente
-3

Una solución muy simple: no use nuevas líneas en el editor de wordpress. Sí, las nuevas líneas aclaran. Sin embargo, en este caso, no hay interrupciones que aún puedan ser aceptablemente comprensibles.

JK
fuente