У меня есть тема, которая специально разработана и действительно сложна. Одна из вещей, которые у меня есть, это несколько областей контента, где пользователи могут указывать контент для определенных вкладок. Я загружаю несколько экземпляров редактора WordPress через wp_editor()
функцию. Работает отлично. (Это все на стороне администратора, в типе поста "Страница")
Однако я начал вносить некоторые улучшения, в том числе возможность динамически добавлять / удалять вкладки (раньше я загружал 6 редакторов на странице). Пользователи могут иметь 1-7 вкладок.
Когда пользователи добавляют вкладку, она должна добавить экземпляр редактора на страницу. Однако, что бы я ни пытался, я не могу заставить его загружаться и отображаться правильно.
Вот две вещи, которые я пробовал до сих пор:
- Создайте php-файл с включенной начальной загрузкой администратора, а затем загрузите редактор с помощью
wp_editor()
. Затем я делаю jQuery$.load
для вызова страницы и включаю полученный HTML-код в область, которая должна отображаться. Однако это не работает, так как кнопки форматирования редакторов исчезают (стоит отметить, что при перетягивании страницы вверх редактор отображается и работает отлично) - Загрузите редактор на странице, внутри скрытого элемента div, а затем, после добавления вкладки, используйте jquery, чтобы переместить ее на место. Это загружает редактор в такт, но вы не можете использовать любую из кнопок редактора (они отображаются, но ничего не делают), и вы не можете поместить курсор в текстовую область (любопытно, однако, что переход в режим HTML позволяет печатать и немного взаимодействовать с кнопками режима HTML)
Итак, вопрос в том, кому-нибудь повезло, добавив редакторов через вызовы AJAX? Любой совет?
admin-ajax.php
? Если не сделать функцию с вашим кодом, то вызовите его черезadmin-ajax.php
$('#sph-tabs-section-tab'+newTab).load('/wp-admin/admin-ajax.php?action=sph_add_editor');
а затем добавил функцию, которая возвращаетwp_editor()
. Он вызывается без проблем, но все равно возвращает только редактор без кнопок. (точно такие же результаты, как в пункте 1 в ОП)Ответы:
Чтобы отобразить ярлыки быстрого доступа, вам необходимо создать их экземпляр в обработчике ajax oncomplete.
Мой обработчик успеха ajax выглядит так;
Мне удалось заставить редактор загружаться, сначала вызвав статическую функцию, которая создает редактор и кэширует его как переменную. Я запускаю метод создания редактора на init. Похоже, что WordPress включает все необходимые скрипты.
Важно, чтобы при создании вашего экземпляра редактора, чтобы вы установили его на использование tinymce, таким образом также заполнялся файл tinymce js.
источник
После борьбы с этим, нашел решение, которое работает, в обратном вызове после добавления нового элемента:
Странно, что внутри кодекса нет документации.
источник
wp_editor()
сtinymce
установленным аргументом argtrue
:-)Наконец, рабочее решение:
добавить действие в WordPress, скажем
My_Action_Name
(также обратите внимание, текстовое IDMy_TextAreaID_22
):Теперь, в Dashboard, выполните эту функцию (обратите внимание, с использованием
My_TextAreaID_22
иMy_Action_Name
):источник
Вам нужно снова вызвать редактор init после добавления вашего ajax textarea, я сделал это так:
Затем вызовите вашу функцию после вашего AJAX, например так:
источник
response
), вызовите функцию tinymce_textareas, которая инициализирует tinyMCE для новых текстовых областей.Полезное решение от @toscho на github . Он построил этот хороший результат и для вопроса здесь, см. Его ответ для более подробной информации.
источник
Используйте этот код, надеюсь, он поможет:
Более подробную информацию можно найти здесь .
источник
Мне это удалось:
Идентификатор должен быть случайным и уникальным. Настройки должны совпадать с настройками в вашем редакторе ajax.
wp_editor( '', '[set id as you need]', array(the same settings as in the main page) ); _WP_Editors::editor_js(); //this print editor init code
источник
Это будет работать на страницах администратора.
Чтобы добавить новый wp-редактор в контейнер с помощью JS AJAX:
1) Создайте функцию wp_ajax в functions.php для возврата wp_editor
2) Создайте скрипт jQuery для запроса нового текстового редактора и добавьте его в контейнер, для этого случая, при нажатии кнопки
PHP-файл
JS Script (jsfile.js)
Сценарии постановки вызова:
источник