tinymce не определен, когда не используется wp_editor

19 янв. 2015 г., 17:09:13
Просмотры: 20.5K
Голосов: 8

Я использую 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 загружает необходимые мне файлы - только я не знаю, какие файлы мне нужны.

0
Все ответы на вопрос 5
3

С помощью коллеги мы разобрали файл 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&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');

Это создаст динамический редактор 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');
27 янв. 2015 г. 21:50:23
Комментарии

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

stealthyninja stealthyninja
4 авг. 2017 г. 12:47:09

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

Mayur Chauhan Mayur Chauhan
3 июл. 2019 г. 03:32:08

Если вы откроете Dev Tools, в консоли, и найдете ошибку и связанный с ней файл, это поможет вам найти проблемный файл. Скорее всего, это дополнительный плагин, который был привязан к работе с определенной темой, которая больше не используется.

KeitelDOG KeitelDOG
14 мая 2021 г. 19:02:26
1

На всякий случай - я недавно столкнулся с этой проблемой, когда редактор исчез в WordPress 4.1 после миграции сайта. Оказалось, что был включен "режим доступности" (ссылка под настройками экрана в редакторе виджетов).

19 февр. 2015 г. 15:33:43
Комментарии

можете уточнить?

Volatil3 Volatil3
25 сент. 2018 г. 11:55:46
0

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

add_filter('user_can_richedit', '__return_true');
3 окт. 2018 г. 18:47:46
0

У меня возникла ошибка после вызова wp_editor(), которая гласила:

j is undefined

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

28 авг. 2019 г. 15:15:14
0

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

14 сент. 2021 г. 07:30:42