Pot adăuga un format personalizat la opțiunea de format din panoul de text?

10 nov. 2010, 16:42:59
Vizualizări: 20.6K
Voturi: 18

În editorul de text, unde poți seta titluri și alte setări, este posibil să adaugi propriile stiluri pentru ca clienții să le folosească? și chiar să le elimini pe cele care nu sunt necesare?

2
Comentarii

WP3 și TinyMCE sunt atât de dezastruoase în acest aspect. Nu pot să cred că nu este posibil să adaugi sau să personalizezi ușor formatele, așa cum se poate în CKEditor.

cherouvim cherouvim
10 dec. 2010 22:43:09

De acord, este o adevărată bătaie de cap.

Mild Fuzz Mild Fuzz
11 dec. 2010 20:36:36
Toate răspunsurile la întrebare 3
13
20

Editorul "clasic" TinyMCE are două meniuri derulante: formatselect pentru stiluri de paragraf și styleselect pentru stiluri de caractere - care pot conține și stiluri de paragraf, ceea ce poate fi confuz. Configurația implicită în WordPress afișează doar meniul derulant pentru format. Dacă aplicați o foaie de stil personalizată editorului, TinyMCE o poate folosi pentru a prelua numele claselor și a le adăuga în meniul derulant pentru stil - dar acest lucru nu a funcționat întotdeauna pentru mine.

Începând cu versiunea 3.0, puteți apela add_editor_style() în fișierul functions.php pentru a adăuga o foaie de stil editorului. Implicit, aceasta este editor-style.css în directorul temei dumneavoastră. Înainte de versiunea 3.0, trebuie să utilizați filtrul mce_css pentru a adăuga URL-ul foii de stil a editorului. Acesta va fi inclus în valoarea de configurare content_css a TinyMCE.

Pentru a adăuga meniul derulant pentru stil, opțiunea styleselect trebuie să apară într-unul dintre vectorii de configurare a barei de butoane (theme_advanced_buttons[1-4] în TinyMCE, filtrat prin mce_buttons_[1-4] în WordPress). Lista de formate de bloc este controlată de opțiunea theme_advanced_blockformats a TinyMCE, pe care o puteți adăuga în vectorul de control din filtrul tiny_mce_before_init. Dacă doriți să personalizați numele din meniul derulant pentru stil (nu doar numele claselor CSS), consultați opțiunea theme_advanced_styles. De asemenea, puteți utiliza opțiunea mai avansată style_formats, care vă oferă mai multă flexibilitate în definirea stilurilor.

Codul PHP relevant cu toate cârligele și configurația implicită se află în wp-admin/includes/post.php, în funcția wp_tiny_mce(). În ansamblu, configurația dumneavoastră ar putea arăta astfel:

add_action( 'after_setup_theme', 'wpse3882_after_setup_theme' );
function wpse3882_after_setup_theme()
{
    add_editor_style();
}

add_filter('mce_buttons_2', 'wpse3882_mce_buttons_2');
function wpse3882_mce_buttons_2($buttons)
{
    array_unshift($buttons, 'styleselect');
    return $buttons;
}

add_filter('tiny_mce_before_init', 'wpse3882_tiny_mce_before_init');
function wpse3882_tiny_mce_before_init($settings)
{
    $settings['theme_advanced_blockformats'] = 'p,h1,h2,h3,h4';

    // Preluat de la http://tinymce.moxiecode.com/examples/example_24.php
    $style_formats = array(
        array('title' => 'Text îngroșat', 'inline' => 'b'),
        array('title' => 'Text roșu', 'inline' => 'span', 'styles' => array('color' => '#ff0000')),
        array('title' => 'Antet roșu', 'block' => 'h1', 'styles' => array('color' => '#ff0000')),
        array('title' => 'Exemplu 1', 'inline' => 'span', 'classes' => 'example1'),
        array('title' => 'Exemplu 2', 'inline' => 'span', 'classes' => 'example2'),
        array('title' => 'Stiluri de tabel'),
        array('title' => 'Rând de tabel 1', 'selector' => 'tr', 'classes' => 'tablerow1'),
    );
    // Înainte de versiunea 3.1, era necesar un truc special pentru a trimite acest vector la configurație.
    // Consultați istoricul acestui post pentru versiunile anterioare.
    $settings['style_formats'] = json_encode( $style_formats );

    return $settings;
}
10 nov. 2010 16:59:18
Comentarii

există un format special pe care ar trebui să-l aibă fișierul .css atunci când folosești add_editor_style? nimic nu pare să funcționeze

Mild Fuzz Mild Fuzz
10 nov. 2010 17:25:31

Încă nu am reușit să înțeleg cum se adaugă clase în meniul derulant de formatare, în afară de cele implicite.

Mild Fuzz Mild Fuzz
11 nov. 2010 14:52:07

@Mild Fuzz: Răspunsul meu anterior a fost înșelător deoarece WordPress afișează doar unul dintre cele două meniuri derulante necesare. Am actualizat răspunsul cu o metodă de adăugare a celui de-al doilea meniu și cum să-l controlezi.

Jan Fabry Jan Fabry
11 nov. 2010 15:39:58

ești legendar!! nu sunt sigur ce face 'style_formats', dar 'theme_advanced_styles' face exact ce am nevoie!!

Mild Fuzz Mild Fuzz
11 nov. 2010 15:47:15

încerc să fac ca acel al doilea bloc să aibă efect, deoarece pare că ar fi extrem de util. Problema este că $settings['style_formats'] este null înainte să-l setăm, așa că nu pot compara formatele cu nimic.

Mild Fuzz Mild Fuzz
11 nov. 2010 16:35:46

@Mild Fuzz: Parametrii diferitelor elemente style_formats sunt explicați în pagina wiki formats asociată.

Jan Fabry Jan Fabry
11 nov. 2010 16:46:02

care arată totul în JS, sunt puțin confuz despre cum să convertesc asta în PHP funcțional. Am încercat '$settings['style_formats'] .= "custom_format : {block : 'h1', attributes : {title : \"Header\"}, styles : {color : red}}";' dar distruge complet tinyMCE

Mild Fuzz Mild Fuzz
11 nov. 2010 16:55:01

@Mild Fuzz: Am crezut că WordPress va aplica json_encode() la configurație, dar doar o afișează. Am modificat răspunsul meu pentru a include o "injecție de JS" pentru a pasa o configurație de array către TinyMCE. Nu este garantat că va funcționa.

Jan Fabry Jan Fabry
11 nov. 2010 17:32:31

nu mai produce erori, dar nu are niciun efect!

Mild Fuzz Mild Fuzz
12 nov. 2010 12:23:11

Funcționează codul exemplu și a rezolvat întrebarea ta? Observă că ai o greșeală de scriere la sfârșitul liniei "Table styles", ai nevoie de un ) și nu de un }

cherouvim cherouvim
10 dec. 2010 22:41:57

json_encode generează " și nu ' așa că javascript-ul nu funcționează. Trebuie să faci str_replace('"', "'", json_encode($style_formats))

cherouvim cherouvim
10 dec. 2010 23:00:01

Cum poți redenumi butonul derulant din Formats?

ejntaylor ejntaylor
17 aug. 2016 16:18:03

@raison: Cel mai bine este să întrebi asta într-o întrebare separată.

Jan Fabry Jan Fabry
17 aug. 2016 16:25:57
Arată celelalte 8 comentarii
0

Puteți adăuga un format personalizat sau elimina unul existent în felul următor:

add_filter('tiny_mce_before_init', function($init_array) {
    $init_array['formats'] = json_encode([
        // adaugă un nou format la formate
        'h3marked' => [
            'selector' => 'h3',
            'block'    => 'h3',
            'classes'  => 'article-paragraph',
        ],
    ], JSON_THROW_ON_ERROR);

    // elimină din acest array formatele care nu sunt necesare
    $block_formats = [
        'Paragraf=p',
        'Titlu 1=h1',
        'Titlu 2=h2',
        'Titlu 3=h3',
        'Titlu 3 marcat=h3marked',    // folosește noul format în selecție
        'Titlu 4=h4',
        'Titlu 5=h5',
        'Titlu 6=h6',
        'Preformatat=pre',
    ];
    $init_array['block_formats'] = implode(';', $block_formats);

    return $init_array;
});

Consultați mai multe detalii în acest articol și în documentația TinyMCE

1 apr. 2021 13:35:18
1

Conform menționat aici Dropdown-ul de format TinyMCE nu mai afișează previzualizările stilurilor

Kara a avut dreptate, trebuie să eliminați stilurile implicite pentru a vedea noile stiluri...

unset($init['preview_styles']);

return $settings;
25 feb. 2016 23:36:54
Comentarii

Te rog să adaugi mai multe detalii, de exemplu nu este clar ce este $settings aici. Mulțumesc

birgire birgire
25 feb. 2016 23:50:43