Я пытаюсь добавить пользовательский CSS (устанавливается с помощью параметров темы) в визуальный редактор TinyMCE в WordPress. На переднем крае тема генерирует этот CSS и выводит его на wp_head
крючок. Проблема, с которой я сталкиваюсь, заключается в возможности добавить этот вывод CSS в редактор.
Это невозможно сделать, add_editor_style( 'editor-style.css' )
потому что нам нужно использовать PHP для доступа к опции темы.
Как пример того, как это работает на переднем конце:
add_action( 'wp_head', 'my_custom_colors' );
function my_custom_colors() {
$color_1 = get_theme_mod( 'color_1', 'cc4a00' );
echo "<style type='text/css'>a { color: #{$color_1}; }";
}
Мне нужен метод для передачи этого пользовательского стиля в визуальный редактор. Любая помощь будет принята с благодарностью.
editor-style.css
, который является тематической территорией.Ответы:
Решение 1
Это работает как решение JavaScript:
Пример:
просто откройте консоль js и вставьте ее для быстрого тестирования. Для выбора конкретного редактора следует использовать:
Это вставит предоставленную строку в редакторы iframe
<head><style id="mceDefaultStyles"></style> ...
Решение 2
Используйте wp_ajax в качестве обработчика обратного вызова, чтобы добавить динамические стили в редакторе init с помощью фильтра
источник
add_editor_style( add_query_arg( 'action', 'my_editor_styles', admin_url( 'admin-ajax.php' ) )
поскольку это стандартный способ добавления тем стилями для тем.mce_css
сработало ли это для вас (если бы вы попробовали это).add_editor_style()
, но он должен прекрасно работать, глядя на код. Использованиеmce_css
на самом деле является лучшим решением в том случае, если вам нужно подключиться после добавления стилей черезadd_editor_style()
. Одна из таких причин в теме заключается в том, что полные URL, добавленные черезadd_editor_style()
, выводятся первыми, несмотря на порядок их добавления.WordPress предоставляет
mce_css
фильтр , который можно использовать для добавления пользовательских таблиц стилей в визуальный редактор. Согласно Кодексу:Пример обратного вызова фильтра Кодекса, модифицированного для Темы:
источник
Я принял вышеуказанное решение @ungestaltbar. Однако я хотел бы немного расширить этот ответ с помощью полного решения, которое я использую, чтобы другие могли увидеть, как оно работает.
Я надеюсь, что это нормально, чтобы опубликовать еще один ответ здесь, как это. Я не видел способа опубликовать это в прямом ответе на мое принятое решение. Я все еще учусь использовать WPSE.
источник
add_action( 'wp_ajax_nopriv_my_editor_styles', 'my_editor_styles_callback' );
если редактор используется на веб-интерфейсе (для пользователей, не вошедших в систему).Я, вероятно, опаздываю на эту вечеринку, но после использования вышеупомянутого решения я скоро понял, что скорость загрузки страницы редактора была сильно ограничена! Внимательно посмотрев на код, я понял, что код продолжает выполняться еще долго после того, как tinyMCE.activeEditor был инициализирован. В коде используется метод setInterval (), который оценивает выражение с заданными интервалами. Я полагаю, это произошло потому, что вы не могли определить, в какой момент во время выполнения кода будет доступен «activeEditor». Это то, что снизило скорость страницы до колен.
Гораздо лучшее решение, которое я использую для создания плагина - это
Здесь собственный слушатель TinyMCE используется для выполнения кода после инициализации активного редактора. Я надеюсь, что это поможет кому-то там. С уважением.
источник
Это измененное решение, опубликованное на форумах WordPress.org по этому вопросу: http://wordpress.org/support/topic/customdynamic-css-in-tinymce?replies=14#post-4827573.
Это определенно работает. Я не гуру JS, поэтому я не совсем уверен, что это лучшее решение.
Это также может быть добавлено в файл JS. Вы можете легко передать переменные через
wp_localize_script()
это.источник