tinymce не определен, когда не используется wp_editor
Я использую jQuery tinyMCE для заполнения динамически генерируемых текстовых областей редакторами tiny MCE.
Когда я использую функцию WordPress wp_editor
перед вызовом jQuery версии, проблем не возникает. Если нет, я получаю:
Uncaught ReferenceError: tinymce is not defined
В качестве временного решения я использовал:
wp_editor('hacky', 'hackhack');
wp_register_script('admin_js', get_template_directory_uri() . '/assets/js/admin.min.js', array());
wp_enqueue_script('admin_js');
Это позволяет jQuery TinyMCE работать. Я хочу избавиться от этого. Думая, что WP не загружает версию jQuery (и не зная хорошего способа получить путь к WP-includes
), я использовал:
?><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');
Но похоже, что это не проблема. Похоже, что версия WP загружает необходимые мне файлы - только я не знаю, какие файлы мне нужны.

С помощью коллеги мы разобрали файл class-wp-editor.php
Вот необходимые скрипты для инициализации jQuery tinyMCE, если wp_editor
не был использован заранее (который вызывает эти скрипты).
// Получаем необходимые скрипты для запуска 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');
Это создаст динамический редактор tinyMCE без вкладок для переключения между визуальным/текстовым режимом, а также без функционала загрузки медиафайлов. Мне пришлось вручную создавать эти кнопки, а также соответствующий jQuery для каждой.
Также отредактировал необходимый CSS, который использует редактор.
РЕДАКТИРОВАНО:
Более элегантное решение, но с меньшей поддержкой (без версионирования)
$js_src = includes_url('js/tinymce/') . 'tinymce.min.js';
$css_src = includes_url('css/') . 'editor.css';
// wp_enqueue, похоже, вообще не работает
echo '<script src="' . $js_src . '" type="text/javascript"></script>';
wp_register_style('tinymce_css', $css_src);
wp_enqueue_style('tinymce_css');

Ничего из того, что я пробовал, не работало, пока я не нашел и не попробовал это. Спасибо!

Попробуйте отключить плагин Autoptimize, если вы его используете.

Моя проблема была в том, что WordPress не включал тег скрипта TinyMCE, потому что функция
user_can_richedit()
возвращала false (я не исследовал причину. Мой пользователь — администратор, и раньше всё работало на другой установке, так что, возможно, это контролируется какими-то настройками?). В любом случае, вы можете отфильтровать возвращаемое значение функции user_can_richedit()
, чтобы WordPress включил скрипты TinyMCE, и тогда TinyMCE будет определен.
add_filter('user_can_richedit', '__return_true');

У меня возникла ошибка после вызова wp_editor(), которая гласила:
j is undefined
Оказалось, что имя опции, которое я использовал, содержало точку (my_plugin_name_customer.subscription.updated), и это ломало редактор. Я заменил точку на подчёркивание, и это решило мою проблему.

Если вы создали пользователя администратора через PhpMyAdmin и столкнулись с этой проблемой, возможно, причина в том, что вы не скопировали строку user_meta для визуального редактора. Просто проверьте и снимите галочку с опции "Отключить визуальный редактор при написании" в вашем профиле пользователя, чтобы проверить, решит ли это проблему.
