Come forzare TinyMCE in WordPress a sostituire le nuove righe con tag <br> e non con <p> </p>
La risposta suggerita da GavinR è corretta.
Non è necessario installare il plugin suggerito, però. Basta aggiungere questo mini plugin e il gioco è fatto:
<?php
defined( 'ABSPATH' ) OR exit;
/* Plugin Name: TinyMCE break invece di paragrafo */
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' );
Ora quando premi invio, verrà inserito il tag <br>
invece di creare un nuovo paragrafo. Ma attenzione, se crei due righe vuote consecutive, il testo verrà comunque diviso in paragrafi a causa del filtro wpautop
applicato al contenuto del tuo post. Devi prima rimuovere questo filtro e crearne uno nuovo che sostituirà tutte le righe vuote con tag <br>
. Aggiungi qualcosa del genere al tuo functions.php
per visualizzare i tag <br>
nel tuo template:
remove_filter ( 'the_content', 'wpautop' );
add_filter ( 'the_content', 'add_newlines_to_post_content' );
function add_newlines_to_post_content( $content ) {
return nl2br( $content );
}

Installa questo plugin: http://wordpress.org/plugins/advanced-tinymce-configuration/
e poi imposta forced_root_block su FALSE.

Questo potrebbe non funzionare per te, perché non sono sicuro dello scenario che richiederebbe la necessità di un'interruzione di riga piuttosto che paragrafi. Se è per un particolare tipo di post o un particolare template, potresti fare questo.
- Implementa il plugin Advanced Custom Fields.
- Crea un campo personalizzato per il tuo testo e seleziona il tipo di campo "textarea" con la formattazione impostata su "converti nuove righe in tag <br />".
- Imposta la "posizione" di questo campo personalizzato in modo che appaia solo sul tipo di post o template desiderato (il campo potrebbe sostituire l'editor sul tipo di post o template, se lo desideri).
Ovviamente, questo approccio rimuove tutte le normali opzioni di formattazione normalmente fornite da TinyMCE, inclusi i collegamenti e l'inserimento di media. Quindi, potrebbe non essere un'opzione per te.

Per quanto ne so.. l'unico modo per farlo è rimuovere il filtro wpautop
.
remove_filter( 'the_content', 'wpautop' );
remove_filter( 'the_excerpt', 'wpautop' );
Questo previene definitivamente che WordPress aggiunga tag p
"artificiali".
Il mio pensiero è che, poiché WordPress è in qualche modo progettato per gli "utenti comuni".. hanno ritenuto necessario includere il filtro wpautop
, che elabora il contenuto dopo che viene inviato (o quando si passa tra la modalità visuale e testo); eseguendo una serie di "controlli" per un HTML valido.. e modificando di conseguenza il contenuto.
Anche se ciò potrebbe essere ottimo per le persone che non toccano mai il lato HTML; è una spina nel fianco per molti utenti che cercano di "modificare" l'HTML.
NOTA: Rimuovere il filtro wpautop
farà sì che tutti i tuoi articoli/pagine (vecchi e nuovi) non utilizzino più il filtro. Questo comporterà che tutto il tuo HTML nell'editor di contenuti venga (compresso) insieme. Il lato visuale apparirà normale... ma il lato Testo sarà compresso... rendendo difficile la modifica del codice.

Se vuoi creare un rientro all'inizio di una frase dopo <br>
(SHIFT+INVIO), potresti aver bisogno di una soluzione personalizzata:
in functions.php aggiungi:
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;
}
poi nella cartella del tema, crea una cartella "scripts", e al suo interno crea un file icona (chiamato "indent_img.png") e un file javascript (chiamato "button.js"), con questo contenuto:
(function() {
tinymce.create('tinymce.plugins.Nlineeplg', {
init : function(ed, url) {
ed.addButton('indent_button', {
title : 'rientro',
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);
})();
quindi, nella pagina EDITOR, avrai un pulsante speciale, e quando clicchi all'inizio di una frase e premi quel pulsante, verrà inserito un rientro.

Grazie a Bigsmoke è possibile gestire wpautop in modo flessibile:
A - Attivare o disattivare wpautop su pagine specifiche
B - Senza modificare il file function.php
C - Senza alterare le pagine esistenti se il filtro Wpautop era stato rimosso
D - Senza compromettere il contenuto nella visualizzazione testo dell'editor
http://wordpress.org/plugins/wpautop-control/
Ora posso creare la maggior parte del layout del testo sfruttando i paragrafi automatici, per poi perfezionare l'aspetto senza che wpautop attivo o disattivo crei problemi.

Disabilitare autop per questo è probabilmente una cattiva idea, poiché comporta molte altre modifiche nel modo in cui viene elaborato il contenuto dell'editor, modifiche che molto probabilmente il poster vorrà comunque che abbiano effetto

Hai ragione. Ma poiché WP forza la modifica di br/ in è solo un casino quando provi, ad esempio, ad avere un aggiustamento preciso del tuo testo accanto a un'immagine.
Se hai una soluzione più pulita per questo, sarei felice di usarla.

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