tinymce no está definido cuando no se usa wp_editor

19 ene 2015, 17:09:13
Vistas: 20.5K
Votos: 8

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.

0
Todas las respuestas a la pregunta 5
3

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&amp;$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');
27 ene 2015 21:50:23
Comentarios

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

stealthyninja stealthyninja
4 ago 2017 12:47:09

Intenta desactivar el plugin Autoptimize si estás usando uno.

Mayur Chauhan Mayur Chauhan
3 jul 2019 03:32:08

Si vas a Dev Tools, en la consola, y buscas el error y el nombre del archivo asociado, te ayudará a encontrar el archivo problemático. Lo más probable es que sea un plugin adicional que estaba vinculado para funcionar con un Tema específico que ya no está en uso.

KeitelDOG KeitelDOG
14 may 2021 19:02:26
1

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.

19 feb 2015 15:33:43
Comentarios

¿Puedes elaborar más?

Volatil3 Volatil3
25 sept 2018 11:55:46
0

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');
3 oct 2018 18:47:46
0

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.

28 ago 2019 15:15:14
0

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.

14 sept 2021 07:30:42