tinymce non è definito quando non si usa wp_editor

19 gen 2015, 17:09:13
Visualizzazioni: 20.5K
Voti: 8

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.

0
Tutte le risposte alla domanda 5
3

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&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');

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');
27 gen 2015 21:50:23
Commenti

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

stealthyninja stealthyninja
4 ago 2017 12:47:09

Prova a disabilitare il plugin Autoptimize se ne stai usando uno.

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

Se vai su Dev Tools, nella console, e cerchi l'errore e il nome del file associato, ti aiuterà a trovare il file responsabile. È probabile che sia un plugin aggiuntivo legato a funzionare con un Tema specifico che non è più in uso.

KeitelDOG KeitelDOG
14 mag 2021 19:02:26
1

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.

19 feb 2015 15:33:43
Commenti

puoi elaborare?

Volatil3 Volatil3
25 set 2018 11:55:46
0

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

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.

28 ago 2019 15:15:14
0

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.

14 set 2021 07:30:42