tinymce non è definito quando non si usa wp_editor
Sto utilizzando jQuery tinyMCE per popolare dinamicamente aree di testo con editor TinyMCE.
Quando uso la funzione WordPress wp_editor
prima di chiamare la versione jQuery, non ho problemi. Se non lo faccio, ottengo:
Uncaught ReferenceError: tinymce is not defined
Come soluzione provvisoria poco elegante, ho utilizzato:
wp_editor('hacky', 'hackhack');
wp_register_script('admin_js', get_template_directory_uri() . '/assets/js/admin.min.js', array());
wp_enqueue_script('admin_js');
Questo permette a jQuery TinyMCE di funzionare. Vorrei eliminare questo approccio. Pensando che WP non stesse caricando la versione jQuery (e non conoscendo un buon modo per ottenere il percorso di WP-includes
) ho utilizzato:
?><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');
Ma questo non sembra essere il problema. Sembra che la versione WP carichi i file necessari di cui ho bisogno - solo che non so quali file mi servono.

Con l'aiuto di un collega, abbiamo esaminato il file class-wp-editor.php
Ecco gli script necessari per inizializzare jQuery tinyMCE se wp_editor
non è stato utilizzato in precedenza (che normalmente richiama questi script).
// Ottieni gli script necessari per avviare 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');
Questo creerà un editor tinyMCE dinamico senza le schede per passare da visuale/testo, né la funzionalità di caricamento media. Ho dovuto creare manualmente questi pulsanti così come il rispettivo jQuery per ognuno.
Ho anche modificato il CSS necessario che l'editor utilizza.
MODIFICA:
Soluzione più elegante ma con meno fallback (nessun controllo di versione)
$js_src = includes_url('js/tinymce/') . 'tinymce.min.js';
$css_src = includes_url('css/') . 'editor.css';
// wp_enqueue sembra non funzionare affatto
echo '<script src="' . $js_src . '" type="text/javascript"></script>';
wp_register_style('tinymce_css', $css_src);
wp_enqueue_style('tinymce_css');

Nient'altro di quello che stavo provando funzionava fino a quando non ho trovato e provato questo. Grazie!

Per quel che vale - recentemente mi sono imbattuto in questo problema con l'editor che scompariva in WordPress 4.1 dopo una migrazione del sito. Il problema si è rivelato essere che la "modalità accessibilità" (il link sotto "Opzioni schermo" nell'editor dei widget) era attivata.

Il mio problema era che WordPress non includeva il tag script di TinyMCE perché
user_can_richedit()
restituiva false (non ho indagato sul motivo. Il mio utente è un amministratore e funzionava in precedenza su un'installazione diversa, quindi forse qualche impostazione lo controlla?). In ogni caso, puoi filtrare il valore restituito da user_can_richedit()
per far sì che WordPress includa gli script di TinyMCE e quindi TinyMCE sarà definito.
add_filter('user_can_richedit', '__return_true');

Ho riscontrato un errore dopo aver chiamato wp_editor() che diceva:
j is undefined
Si è scoperto che il nome dell'opzione che stavo utilizzando conteneva un punto (my_plugin_name_customer.subscription.updated) e questo causava l'interruzione dell'editor. Ho sostituito il punto con un underscore e questo ha risolto il problema.

Chiunque abbia creato il proprio utente amministratore da PhpMyAdmin e si imbatta in questo problema, potrebbe essere perché non ha copiato la riga user_meta per l'editor di testo avanzato. Basta verificare e deselezionare l'opzione "Disabilita l'editor visivo durante la scrittura" nel tuo profilo utente per testare se questo risolverà il problema.
