Pot adăuga un format personalizat la opțiunea de format din panoul de text?
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;
}

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

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

@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.

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

î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: Parametrii diferitelor elemente style_formats
sunt explicați în pagina wiki formats
asociată.

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: 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.

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 }

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

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

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;
