Cum să forțezi TinyMCE în WordPress să înlocuiască noile linii cu <br> și nu cu <p> </p>

10 oct. 2013, 19:35:46
Vizualizări: 15.6K
Voturi: 7

Editorul TinyMCE inserează <p>&nbsp;</p> în loc de tag-uri <br> când apăs Enter pentru o linie nouă în text.

Cum pot forța TinyMCE în WordPress să înlocuiască noile linii cu <br> și nu cu <p>&nbsp;</p>?

10
Comentarii

folosește întoarceri moi (shift+enter) pentru a insera <br> în loc de paragrafe.

Milo Milo
10 oct. 2013 20:00:49

@Mulțumesc, dar din păcate asta nu este o opțiune în cazul meu. Am nevoie să o fac apăsând Enter. Deci, cred că trebuie schimbată o opțiune din TinyMCE sau WP. Știi care?

Derfder Derfder
10 oct. 2013 20:09:44

Nu există o astfel de opțiune în WordPress, folosește întoarcere moale

Eugene Manuilov Eugene Manuilov
10 oct. 2013 20:23:10

@EugeneManuilov Nu te cred că nu este posibil să configurezi asta în TinyMCE sau WP. Trebuie să existe o metodă.

Derfder Derfder
11 oct. 2013 10:19:11

@Milo Clientul meu nici măcar nu știe ce înseamnă un soft return. Și cu siguranță nu vrea să apese shift + enter de fiecare dată când dorește să facă o linie nouă. Dacă este posibil în Drupal și Joomla, trebuie să fie posibil și în WordPress.

Derfder Derfder
11 oct. 2013 10:20:43

@EugeneManuilov dacă nu este o problemă a WordPress-ului, cum pot face asta în TinyMCE. Ce fișier din WP ar trebui să modific?

Derfder Derfder
11 oct. 2013 10:22:17

@EugeneManuilov Am încercat această funcție 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'); Dar adaugă br în interiorul tag-urilor <p> ca <p><br></p>. Și am nevoie să fie așa <p></p><br>. Ai vreo idee cum să repar soluția curentă pentru asta?

Derfder Derfder
11 oct. 2013 18:32:01

@Milo o altă problemă este că acest cod: 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'); nu a salvat tag-urile <br>. Acestea sunt eliminate după ce WordPress salvează.

Derfder Derfder
11 oct. 2013 18:33:12

Nu știu dacă ai putea (sau chiar ar trebui să încerci) să suprascrii enter cu shift+enter în timpul evenimentului keydown în textarea cu jQuery? Doar o idee.

birgire birgire
14 oct. 2013 20:23:31

@birgire Din nou, acest lucru funcționează în Drupal, deci trebuie să funcționeze și în WordPress. Trebuie doar să configurez TinyMCE în WordPress și să dezactivez unele filtre în WP etc.

Derfder Derfder
14 oct. 2013 20:52:25
Arată celelalte 5 comentarii
Toate răspunsurile la întrebare 6
1
12

Răspunsul sugerat de GavinR este corect.

Nu este nevoie să instalați plugin-ul sugerat, totuși. Adăugați acest mini plugin și sunteți gata:

<?php
defined( 'ABSPATH' ) OR exit;
/* Plugin Name: TinyMCE break în loc de paragraf */
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' );

Acum, când apăsați Enter, va fi inserată eticheta <br> în loc să creeze un nou paragraf. Dar atenție, dacă creați două linii noi consecutive, textul va fi totuși împărțit în paragrafe ca urmare a filtrului wpautop aplicat conținutului postării. Trebuie mai întâi să eliminați acest filtru și să creați un nou filtru care va înlocui toate liniile noi cu etichete <br>. Adăugați ceva de genul acesta în functions.php pentru a afișa etichetele <br> în șablonul dvs.:

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 oct. 2013 13:53:24
Comentarii

Aș sugera să adaugi asta într-un plugin în loc de tema ta, astfel încât dacă vei schimba tema, editorul tău va continua să folosească această metodă.

Morgan Estes Morgan Estes
17 oct. 2013 17:52:01
1

Instalează acest plugin: http://wordpress.org/plugins/advanced-tinymce-configuration/

și apoi setează forced_root_block la FALSE.

15 oct. 2013 06:52:13
Comentarii

Nu funcționează, în continuare afișează <p>&nbsp;</p> în loc de <br> în zonele mele de text cu editorul TinyMCE.

Derfder Derfder
15 oct. 2013 13:37:02
0

Acest lucru s-ar putea să nu funcționeze pentru tine, deoarece nu sunt sigur care este scenariul care ar necesita un salt de linie în loc de paragrafe. Dacă este pentru un anumit tip de postare sau un anumit șablon, ai putea face asta.

  1. Implementează plugin-ul Advanced Custom Fields.
  2. Creează un câmp personalizat pentru textul tău și selectează tipul de câmp "textarea" cu formatarea setată la "convert new lines into <br /> tags".
  3. Stabilește "locația" acestui câmp personalizat să apară doar pe tipul de postare sau șablonul dorit (câmpul ar putea înlocui editorul pe tipul de postare sau șablon, dacă dorești).

Evident, această abordare elimină toate opțiunile normale de formatare oferite de obicei de TinyMCE, inclusiv legături și inserarea de media. Așadar, s-ar putea să nu fie o opțiune pentru tine.

15 oct. 2013 00:57:43
1

Din câte știu eu.. singura modalitate de a face asta este eliminarea filtrului wpautop.

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

Această acțiune previne în mod sigur WordPress-ul să adauge tag-uri p 'artificiale'.

Cred că motivul este că WordPress este conceput parțial pentru "neinițiați".. ei consideră necesar să includă filtrul wpautop, care procesează conținutul după ce acesta este trimis (sau la comutarea între modurile vizual și text); efectuând o serie de "verificări" pentru HTML valid.. și ajustând conținutul în consecință.

Deși acest lucru poate fi minunat pentru persoanele care nu ating niciodată partea de HTML; este o bătaie de cap pentru mulți utilizatori care încearcă să "se joace" cu HTML-ul.

NOTĂ: Eliminarea filtrului wpautop va determina ca toate articolele/paginile tale (vechi și noi) să nu mai folosească acest filtru. Acest lucru va duce la faptul că tot HTML-ul din editorul de conținut va fi "strâns" împreună. Partea vizuală va apărea în regulă... dar partea de Text va fi comprimată... ceea ce face dificilă modificarea codului.

17 oct. 2013 16:08:43
Comentarii

Foloseam Advance Custom Fields, așa că am avut nevoie de remove_filter ('acf_the_content', 'wpautop'); în schimb, dar tot a înfășurat întregul conținut într-un singur paragraf ca bloc rădăcină.

TecBrat TecBrat
30 sept. 2016 20:27:24
0

dacă dorești să faci indent la începutul propoziției după <br> (SHIFT+ENTER), atunci poate fi necesar să folosești o soluție personalizată:

în functions.php adaugă:

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;
}

apoi în folderul temei, creează un folder "scripts", iar în interiorul său creează un fișier pentru iconiță (numit "indent_img.png") și un fișier javascript (numit "button.js"), cu acest conținut:

(function() {
    tinymce.create('tinymce.plugins.Nlineeplg', {
        init : function(ed, url) {

            ed.addButton('indent_button', {
                title : 'indentare',
                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);
})();

apoi, în pagina EDITOR, vei avea un buton special, iar când dai click la începutul propoziției și apeși acel buton, acesta va plasa o indentare.

26 mar. 2014 23:27:26
4

Datorită Bigsmoke, este posibil să lucrăm cu wpautop:
A - Activarea sau dezactivarea wpautop pe anumite pagini selectate
B - Fără a modifica fișierul function.php
C - Fără a afecta paginile vechi dacă filtrul Wpautop a fost eliminat
D - Fără a comprima conținutul în partea de text a editorului

http://wordpress.org/plugins/wpautop-control/

Acum pot să-mi organizez majoritatea aspectelor textului beneficiind de paragrafe automate, apoi să finalizez aspectul fără să fie nevoie să activez sau dezactivez wpautop.

11 aug. 2014 16:03:45
Comentarii

Dezactivarea funcției autop pentru aceasta este probabil o idee proastă, deoarece aduce multe alte modificări în modul în care este procesat conținutul editorului, modificări pe care cel mai probabil autorul le-ar dori să rămână active.

Mark Kaplun Mark Kaplun
11 aug. 2014 16:30:14

Ai dreptate. Dar pentru că WordPress forțează transformarea br/ în  , devine un haos când încerci, de exemplu, să faci o ajustare fină a textului lângă o imagine.

Dacă ai o soluție mai curată pentru asta, aș fi încântat să o folosesc.

bradypus bradypus
11 aug. 2014 16:48:48

Încearcă să pui o întrebare despre asta ;)

Mark Kaplun Mark Kaplun
11 aug. 2014 17:08:07