Cómo forzar a TinyMCE en WordPress para que reemplace saltos de línea con <br> en lugar de <p> </p>
El editor TinyMCE inserta <p> </p>
en lugar de etiquetas <br>
cuando presiono Enter para un salto de línea en mi texto.
¿Cómo forzar a TinyMCE en WordPress para que reemplace los saltos de línea con <br>
y no con <p> </p>
?

La respuesta sugerida por GavinR es correcta.
Sin embargo, no necesitas instalar el complemento sugerido. Solo añade este mini plugin y estarás listo:
<?php
defined( 'ABSPATH' ) OR exit;
/* Plugin Name: TinyMCE salto de línea en lugar de párrafo */
function mytheme_tinymce_settings( $tinymce_init_settings ) {
$tinymce_init_settings['forced_root_block'] = false;
return $tinymce_init_settings;
}
add_filter( 'tiny_mce_before_init', 'mytheme_tinymce_settings' );
Ahora, cuando presiones enter, se insertará la etiqueta <br>
en lugar de crear un nuevo párrafo. Pero ten cuidado, si creas dos saltos de línea consecutivos, el texto aún se dividirá en párrafos como resultado del filtro wpautop
aplicado al contenido de tu publicación. Primero necesitas eliminar este filtro y crear un nuevo filtro que reemplace todos los saltos de línea con etiquetas <br>
. Añade algo como esto a tu functions.php
para mostrar las etiquetas <br>
en tu plantilla:
remove_filter ( 'the_content', 'wpautop' );
add_filter ( 'the_content', 'add_newlines_to_post_content' );
function add_newlines_to_post_content( $content ) {
return nl2br( $content );
}

Instala este plugin: http://wordpress.org/plugins/advanced-tinymce-configuration/
y luego configura forced_root_block a FALSE.

Esto podría no funcionar para ti, porque no estoy seguro del escenario que requeriría un salto de línea en lugar de párrafos. Si es para un tipo de publicación particular o una plantilla específica, podrías hacer esto.
- Implementa el plugin Advanced Custom Fields.
- Crea un campo personalizado para tu texto y selecciona el tipo de campo "textarea" con el formato configurado como "convertir saltos de línea en etiquetas <br />".
- Configura la "ubicación" de este campo personalizado para que aparezca solo en el tipo de publicación o plantilla deseada (el campo podría reemplazar el editor en el tipo de publicación o plantilla, si se desea).
Obviamente, este enfoque elimina todas las opciones de formato normales que normalmente proporciona TinyMCE, incluyendo enlaces e inserción de medios. Por lo tanto, puede que no sea una opción para ti.

Hasta donde sé, la única forma de hacer esto es eliminar el filtro wpautop
.
remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );
Esto definitivamente evita que WordPress agregue etiquetas p
'artificiales'.
Mi razonamiento es que, dado que WordPress está diseñado en cierta medida para el "usuario común", sienten necesario incluir el filtro wpautop
, que procesa el contenido después de ser enviado (o al cambiar entre los modos visual y texto); ejecutando una serie de "verificaciones" para HTML válido... y ajustando el contenido en consecuencia.
Si bien esto puede ser genial para las personas que nunca tocan el lado HTML; es una molestia para muchos usuarios que intentan "manipular" el HTML.
NOTA: Eliminar el filtro wpautop
hará que todas tus entradas/páginas (antiguas y nuevas) no utilicen el filtro. Esto resultará en que todo tu HTML en el editor de contenido se compacte. El lado visual aparecerá bien... pero el lado de texto estará comprimido... lo que dificulta la modificación del código.

Si deseas hacer una sangría al inicio de una oración después de <br>
(SHIFT+ENTER), entonces podrías necesitar una solución personalizada:
En functions.php agrega:
add_action('init', 'add_cust_button');
function add_cust_button() {
if ( get_user_option('rich_editing') == 'true') {
add_filter('mce_external_plugins', 'add_mycust_plugin');
add_filter('mce_buttons_2', 'register_mycust_plugin');
}
}
function register_mycust_plugin($buttons) {
array_push($buttons, "|", "indent_button");
return $buttons;
}
function add_mycust_plugin($plugin_array) {
$plugin_array['my_custom_button'] = get_bloginfo('template_url').'/scripts/button.js';
return $plugin_array;
}
add_filter( 'tiny_mce_version', 'my_refresh_mce');
function my_refresh_mce($ver) {
$ver += 3;
return $ver;
}
Luego, en la carpeta del tema, crea una carpeta "scripts", y dentro de ella crea un archivo de icono (llamado "indent_img.png") y un archivo javascript (llamado "button.js"), con este contenido:
(function() {
tinymce.create('tinymce.plugins.Nlineeplg', {
init : function(ed, url) {
ed.addButton('indent_button', {
title : 'sangría', // Traducido a español
image : url+'/indent_img.png',
onclick : function() {
ed.execCommand('mceInsertContent', false, '<span style="margin:0 0 0 8px;"> </span>');
}
});
},
createControl : function(n, cm) {
return null;
}
});
tinymce.PluginManager.add('my_custom_button', tinymce.plugins.Nlineeplg);
})();
Entonces, en la página del EDITOR, tendrás un botón especial, y cuando hagas clic al inicio de una oración y pulses ese botón, colocará una sangría.

Gracias a Bigsmoke es posible jugar con wpautop:
A - Habilitar o deshabilitar wpautop en páginas seleccionadas
B - Sin modificar function.php
C - Sin afectar páginas antiguas si el filtro Wpautop fue eliminado
D - Sin comprimir el contenido en el lado de texto del editor
http://wordpress.org/plugins/wpautop-control/
Ahora puedo organizar la mayoría de mi diseño de texto disfrutando de párrafos automáticos, y luego finalizar el aspecto sin que wpautop esté activado o desactivado causando problemas.

Desactivar autop para esto probablemente sea una mala idea, ya que realiza muchos más cambios en cómo se procesa el contenido del editor, cambios que muy probablemente el autor aún querrá que surtan efecto.

Tienes razón. Pero debido a que WP fuerza a que los br/ se cambien por es un desastre cuando intentas, por ejemplo, tener un ajuste fino de tu texto junto a una imagen.
Si tienes una solución más limpia para eso, estaría encantado de usarla.

Listo. :) http://wordpress.stackexchange.com/questions/157427/how-avoid-wp-editor-to-change-br-by-nbsp
