tinymce nu este definit când nu se folosește wp_editor
Folosesc jQuery tinyMCE pentru a popula zonele de text generate dinamic cu editoare TinyMCE.
Când folosesc funcția WordPress wp_editor
înainte să apelez versiunea jQuery, nu am probleme. Dacă nu o folosesc, primesc:
Uncaught ReferenceError: tinymce is not defined
Ca o rezolvare temporară, am folosit:
wp_editor('hacky', 'hackhack');
wp_register_script('admin_js', get_template_directory_uri() . '/assets/js/admin.min.js', array());
wp_enqueue_script('admin_js');
Aceasta permite jQuery TinyMCE să funcționeze. Doresc să elimin această soluție. Gândindu-mă că WP nu încarcă versiunea jQuery (și necunoscând o metodă bună de a obține calea către WP-includes
) am folosit:
?><script type="text/javascript"src="//cdnjs.cloudflare.com/ajax/libs/tinymce/4.1.7/jquery.tinymce.min.js"></script><?php
wp_register_script('admin_js', get_template_directory_uri() . '/assets/js/admin.min.js', array());
wp_enqueue_script('admin_js');
Dar se pare că aceasta nu este problema. Se pare că versiunea WP încarcă fișierele necesare - doar că nu știu care sunt aceste fișiere necesare.

Cu ajutorul unui coleg, am analizat codul din class-wp-editor.php
Iată scripturile necesare pentru a inițializa jQuery tinyMCE dacă wp_editor
nu a fost folosit anterior (care apelează aceste scripturi).
// Obține scripturile necesare pentru a porni tinymce
$baseurl = includes_url( 'js/tinymce' );
$cssurl = includes_url('css/');
global $tinymce_version, $concatenate_scripts, $compress_scripts;
$version = 'ver=' . $tinymce_version;
$css = $cssurl . 'editor.css';
$compressed = $compress_scripts && $concatenate_scripts && isset($_SERVER['HTTP_ACCEPT_ENCODING'])
&& false !== stripos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip');
if ( $compressed ) {
echo "<script type='text/javascript' src='{$baseurl}/wp-tinymce.php?c=1&$version'></script>\n";
} else {
echo "<script type='text/javascript' src='{$baseurl}/tinymce.min.js?$version'></script>\n";
echo "<script type='text/javascript' src='{$baseurl}/plugins/compat3x/plugin.min.js?$version'></script>\n";
}
add_action( 'wp_print_footer_scripts', array( '_WP_Editors', 'editor_js' ), 50 );
add_action( 'wp_print_footer_scripts', array( '_WP_Editors', 'enqueue_scripts' ), 1 );
wp_register_style('tinymce_css', $css);
wp_enqueue_style('tinymce_css');
Acest cod va crea un editor tinyMCE dinamic fără filele pentru a comuta între modul vizual/text și fără funcționalitatea de încărcare a fișierelor media. A trebuit să creez manual aceste butoane, precum și jQuery-ul corespunzător pentru fiecare.
Am editat și CSS-ul necesar pe care editorul îl folosește.
EDIT:
Soluție mai elegantă, dar cu mai puține mecanisme de rezervă (fără versionare)
$js_src = includes_url('js/tinymce/') . 'tinymce.min.js';
$css_src = includes_url('css/') . 'editor.css';
// wp_enqueue nu pare să funcționeze deloc
echo '<script src="' . $js_src . '" type="text/javascript"></script>';
wp_register_style('tinymce_css', $css_src);
wp_enqueue_style('tinymce_css');

Nimic altceva nu a funcționat până când am găsit și încercat această soluție. Mulțumesc!

Problema mea a fost că WordPress nu includea tag-ul de script tinymce deoarece
user_can_richedit()
returna false (nu am investigat de ce. Utilizatorul meu este admin, iar funcționalitatea exista anterior pe o altă instalare, deci probabil există vreun set care controlează acest lucru). În orice caz, poți filtra valoarea returnată de user_can_richedit()
pentru a determina WordPress să includă scripturile tinymce, iar apoi tinymce va fi definit.
add_filter('user_can_richedit', '__return_true');

Am avut o eroare după ce am apelat wp_editor() care spunea:
j este nedefinit
S-a dovedit că numele opțiunii pe care o foloseam conținea un punct în denumire (my_plugin_name_customer.subscription.updated) și acesta a stricat editorul. Am înlocuit punctul cu underscore și problema a fost rezolvată.

Oricine și-a creat utilizatorul de admin din PhpMyAdmin și întâmpină această problemă - este posibil să fie din cauză că nu a copiat rândul user_meta pentru editarea în format rich text. Pur și simplu verificați și debifați opțiunea "Dezactivează editorul vizual la scriere" din profilul utilizatorului pentru a testa dacă aceasta va rezolva problema.
