tinymce no está definido cuando no se usa wp_editor
Estoy usando jQuery tinyMCE para poblar áreas de texto generadas dinámicamente con editores tiny MCE.
Cuando uso la función wp_editor
de WordPress antes de llamar a la versión jQuery, no tengo problemas. Si no lo hago, obtengo:
Uncaught ReferenceError: tinymce is not defined
Como un hack terrible, he usado:
wp_editor('hacky', 'hackhack');
wp_register_script('admin_js', get_template_directory_uri() . '/assets/js/admin.min.js', array());
wp_enqueue_script('admin_js');
Lo cual permite que jQuery TinyMCE funcione. Deseo eliminar esto. Pensando que WP no estaba cargando la versión jQuery (y sin conocer una buena manera de obtener la ruta de WP-includes
) usé:
?><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');
Pero este no parece ser el problema. Parece que la versión de WP carga los archivos que necesito - excepto que no sé qué archivos necesito.

Con la ayuda de un colega, revisamos el archivo class-wp-editor.php
Aquí están los scripts necesarios para inicializar jQuery tinyMCE si wp_editor
no se ha utilizado previamente (lo cual llama estos scripts).
// Obtener los scripts necesarios para lanzar 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');
Esto creará un editor tinyMCE dinámico sin las pestañas para cambiar entre visual/texto, ni la funcionalidad de carga de medios. Tuve que crear estos botones manualmente, así como el respectivo jQuery para cada uno.
También edité el CSS requerido que utiliza el editor.
EDITADO:
Solución más elegante pero con menos respaldo (sin versionado)
$js_src = includes_url('js/tinymce/') . 'tinymce.min.js';
$css_src = includes_url('css/') . 'editor.css';
// wp_enqueue no parece funcionar en absoluto
echo '<script src="' . $js_src . '" type="text/javascript"></script>';
wp_register_style('tinymce_css', $css_src);
wp_enqueue_style('tinymce_css');

Nada más de lo que intenté funcionó hasta que encontré y probé esto. ¡Gracias!

Para lo que valga - recientemente me encontré con este problema del editor desapareciendo en WordPress 4.1 después de migrar un sitio. El problema resultó ser que el "modo de accesibilidad" (el enlace bajo las opciones de pantalla en el editor de widgets) estaba activado.

Mi problema era que WordPress no incluía la etiqueta de script de TinyMCE porque
user_can_richedit()
devolvía false (No investigué por qué. Mi usuario es administrador, y anteriormente funcionaba en una instalación diferente, así que quizás alguna configuración lo controla?). En cualquier caso, puedes filtrar el valor de retorno de user_can_richedit()
para que WordPress incluya los scripts de TinyMCE y entonces TinyMCE estará definido.
add_filter('user_can_richedit', '__return_true');

Tuve un error después de llamar a wp_editor() que decía:
j is undefined
Resultó que el nombre de la opción que estaba usando tenía un punto en el nombre (my_plugin_name_customer.subscription.updated) y estaba rompiendo el editor. Reemplacé el punto con un guión bajo y solucionó mi problema.

Cualquiera que haya creado su usuario de administrador desde PhpMyAdmin y se encuentre con este problema, puede deberse a que no ha copiado la fila user_meta para la edición de texto enriquecido. Simplemente verifique y desmarque la opción "Deshabilitar el editor visual al escribir" en su perfil de usuario para probar si esto soluciona su problema.
