it-swarm.com.de

tinymce ist nicht definiert, wenn wp_editor nicht verwendet wird

Ich benutze jQuery tinyMCE, um dynamisch erzeugte Textbereiche mit winzigen MCE-Editoren zu füllen.

Wenn ich die WordPress-Funktion wp_editor verwende, bevor ich die jQuery-Version aufrufe, treten keine Probleme auf. Wenn ich es nicht tue, bekomme ich;

Nicht erfasster ReferenceError: tinymce ist nicht definiert

Als schrecklichen Hack habe ich verwendet;

wp_editor('hacky', 'hackhack');

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

Damit funktioniert die jQuery TinyMCE. Ich möchte dies beseitigen. Ich dachte WP hat die jQuery-Version nicht geladen (und wusste nicht, wie ich den Pfad von WP-includes ermitteln kann).

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

Dies scheint jedoch nicht das Problem zu sein. Es scheint, dass die WP -Version die benötigten Dateien lädt - außer ich weiß nicht, welche Dateien ich brauche.

5
myol

Mit Hilfe eines Kollegen haben wir class-wp-editor.php durchgegraben

Hier sind die erforderlichen Skripts zum Initialisieren von jQuery tinyMCE, wenn wp_editor zuvor nicht verwendet wurde (wodurch diese Skripts aufgerufen werden).

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

Dadurch wird ein dynamischer tinyMCE-Editor erstellt, in dem weder die Registerkarten zum Wechseln zwischen visuellem Text noch die Funktionen zum Hochladen von Medien vorhanden sind. Ich musste diese Buttons manuell erstellen sowie die jeweilige jQuery für jede.

In der erforderlichen CSS bearbeitet, die der Editor ebenfalls verwendet.

BEARBEITEN:

Elegantere Lösung, aber mit weniger Ausfall (keine Versionierung)

$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

Für das, was es wert ist - ich bin kürzlich auf dieses Problem gestoßen, als der Editor mit wp 4.1 nach einer Site-Migration verschwand. Das Problem war zufällig, dass der "Eingabehilfen-Modus" (der Link unter den Bildschirmoptionen im Widget-Editor) aktiviert war.

1
dave

Mein Problem war, dass WordPress das Tinymce-Skript-Tag nicht enthielt, weil user_can_richedit() false zurückgab (ich habe nicht untersucht, warum. Mein Benutzer ist ein Administrator, und es arbeitete zuvor an einer anderen Installation, also regelt es möglicherweise eine Einstellung?). In jedem Fall können Sie den Rückgabewert von user_can_richedit() filtern, damit WordPress die Tinymce-Skripte enthält. Anschließend wird Tinymce definiert.

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