web-dev-qa-db-fra.com

tinymce n'est pas défini lorsque vous n'utilisez pas wp_editor

J'utilise jQuery tinyMCE pour alimenter des zones de texte générées dynamiquement avec de minuscules éditeurs MCE.

Lorsque j'utilise la fonction WordPress wp_editor avant d'appeler la version jQuery, je ne rencontre aucun problème. Si je ne le fais pas, je reçois;

Uncaught ReferenceError: tinymce n'est pas défini

En tant que bidouille épouvantable, j'ai utilisé;

wp_editor('hacky', 'hackhack');

wp_register_script('admin_js', get_template_directory_uri() . '/assets/js/admin.min.js', array());
wp_enqueue_script('admin_js');

Ce qui permet au jQuery TinyMCE de fonctionner. Je souhaite éliminer cela. Penser WP ne chargeait pas la version de jQuery (et ne connaissait pas un bon moyen d'obtenir le chemin de WP-includes) que j'avais utilisé;

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

Mais cela ne semble pas être le problème. Il semble que la version WP charge les fichiers requis dont j'ai besoin - sauf que je ne connais pas les fichiers dont j'ai besoin.

5
myol

Avec l'aide d'un collègue, nous avons creusé dans class-wp-editor.php

Voici les scripts nécessaires pour initialiser jQuery tinyMCE si wp_editor n'a pas été utilisé auparavant (qui appelle ces scripts).

// Get the necessary scripts to launch 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');

Cela créera un éditeur dynamique tinyMCE sans les onglets permettant de basculer entre visuel/texte, ni la fonctionnalité de téléchargement multimédia. Je devais créer ces boutons manuellement ainsi que le jQuery respectif pour chacun.

Edité dans le css requis que l'éditeur utilise également.

MODIFIER:

Solution plus élégante mais avec moins de repli (pas de versioning)

$js_src = includes_url('js/tinymce/') . 'tinymce.min.js';
$css_src = includes_url('css/') . 'editor.css';

// wp_enqueue doesn't seem to work at all
echo '<script src="' . $js_src . '" type="text/javascript"></script>';

wp_register_style('tinymce_css', $css_src);
wp_enqueue_style('tinymce_css');
5
myol

Pour ce que ça vaut - j'ai récemment rencontré ce problème avec l'éditeur qui disparaissait avec wp 4.1 après une migration de site. Le problème était que le "mode d'accessibilité" (le lien sous les options d'écran dans l'éditeur de widgets) était activé.

1
dave

Mon problème était que wordpress n'incluait pas la balise script tinymce parce que user_can_richedit() retournait false (je n'ai pas cherché à savoir pourquoi. Mon utilisateur est un administrateur et il travaillait auparavant sur une installation différente, alors peut-être qu'un paramètre le contrôle?). Dans tous les cas, vous pouvez filtrer la valeur de retour de user_can_richedit() pour que wordpress inclue les scripts tinymce, puis tinymce sera défini.

add_filter('user_can_richedit', '__return_true');
0
Luke Chinworth