Come forzare TinyMCE in WordPress a sostituire le nuove righe con tag <br> e non con <p> </p>

10 ott 2013, 19:35:46
Visualizzazioni: 15.6K
Voti: 7

L'editor TinyMCE inserisce <p>&nbsp;</p> invece dei tag <br> quando premo Invio per andare a capo nel testo.

Come posso forzare TinyMCE in WP a sostituire le nuove righe con <br> invece che con <p>&nbsp;</p>?

10
Commenti

usa i ritorni a capo soft (shift+invio) per inserire <br> invece di paragrafi.

Milo Milo
10 ott 2013 20:00:49

@Grazie, ma purtroppo non è un'opzione nel mio caso. Devo farlo premendo Invio. Quindi, immagino che sia necessario modificare qualche opzione di TinyMCE o WP. Sai quale?

Derfder Derfder
10 ott 2013 20:09:44

Non esiste tale opzione in WordPress, usa il ritorno a capo soft

Eugene Manuilov Eugene Manuilov
10 ott 2013 20:23:10

@EugeneManuilov Non ti credo che non sia possibile impostarlo in TinyMCE o WP. Deve esserci un modo per farlo.

Derfder Derfder
11 ott 2013 10:19:11

@Milo Il mio cliente non sa nemmeno cosa significhi "soft return". E di certo non vuole premere shift + invio ogni volta che vuole andare a capo. Se è possibile in Drupal e Joomla, deve esserlo anche in WordPress.

Derfder Derfder
11 ott 2013 10:20:43

@EugeneManuilov se non è un problema di WordPress, come posso farlo in TinyMCE. Quale file in WP dovrei modificare?

Derfder Derfder
11 ott 2013 10:22:17

@EugeneManuilov Ho provato questa funzione change_mce_options($init){ $init["forced_root_block"] = false; $init["force_br_newlines"] = true; $init["force_p_newlines"] = false; $init["convert_newlines_to_brs"] = true; return $init; } add_filter('tiny_mce_before_init','change_mce_options'); Ma aggiunge br all'interno dei tag <p> come <p><br></p>. E invece ho bisogno che sia così <p></p><br>. Hai qualche idea su come correggere questa soluzione?

Derfder Derfder
11 ott 2013 18:32:01

@Milo un altro problema è che questo codice: change_mce_options($init){ $init["forced_root_block"] = false; $init["force_br_newlines"] = true; $init["force_p_newlines"] = false; $init["convert_newlines_to_brs"] = true; return $init; } add_filter('tiny_mce_before_init','change_mce_options'); non salva i tag <br>. Vengono rimossi dopo che WordPress salva il contenuto.

Derfder Derfder
11 ott 2013 18:33:12

Non so se potresti (o dovresti provare a) sovrascrivere enter con shift+enter durante l'evento keydown nell'textarea con jQuery? Solo un pensiero.

birgire birgire
14 ott 2013 20:23:31

@birgire Ancora una volta, questo funziona in Drupal quindi deve funzionare anche in WordPress. Devo solo configurare TinyMCE in WordPress e disattivare alcuni filtri in WP ecc.

Derfder Derfder
14 ott 2013 20:52:25
Mostra i restanti 5 commenti
Tutte le risposte alla domanda 6
1
12

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 );
}
17 ott 2013 13:53:24
Commenti

Suggerirei di aggiungere questo a un plugin piuttosto che al tuo tema, così se finirai per cambiare tema il tuo editor continuerà a utilizzare questo metodo.

Morgan Estes Morgan Estes
17 ott 2013 17:52:01
1
15 ott 2013 06:52:13
Commenti

Non funziona, continua a generare <p>&nbsp;</p> invece di <br> nelle mie textarea con l'editor tinymce.

Derfder Derfder
15 ott 2013 13:37:02
0

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.

  1. Implementa il plugin Advanced Custom Fields.
  2. 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 />".
  3. 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.

15 ott 2013 00:57:43
1

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.

17 ott 2013 16:08:43
Commenti

Stavo utilizzando Advance Custom Fields, quindi avevo bisogno di remove_filter ('acf_the_content', 'wpautop'); invece, ma continuava a racchiudere tutto l'input in un unico paragrafo come blocco radice.

TecBrat TecBrat
30 set 2016 20:27:24
0

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;">&nbsp;</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.

26 mar 2014 23:27:26
4

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.

11 ago 2014 16:03:45
Commenti

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

Mark Kaplun Mark Kaplun
11 ago 2014 16:30:14

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.

bradypus bradypus
11 ago 2014 16:48:48

Prova a fare una domanda a riguardo ;)

Mark Kaplun Mark Kaplun
11 ago 2014 17:08:07