Próbuję dodać niestandardowy CSS (ustawiany za pomocą opcji motywu) do edytora wizualnego TinyMCE w WordPress. Z przodu motyw generuje ten CSS i generuje go na wp_head
haku. Problem, na który wpadam, to możliwość dodania tego wyjścia CSS do edytora.
Nie można tego zrobić, add_editor_style( 'editor-style.css' )
ponieważ musimy użyć PHP, aby uzyskać dostęp do opcji motywu.
Jako przykład tego, jak działa na interfejsie:
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}; }";
}
Potrzebuję metody wprowadzenia tego niestandardowego stylu do edytora wizualnego. Każda pomoc byłaby bardzo mile widziana.
editor-style.css
, czyli terytorium tematycznego.Odpowiedzi:
Rozwiązanie 1
Działa to jako rozwiązanie javascript:
Przykład:
wystarczy otworzyć konsolę js i wkleić ją do szybkiego testu. Aby celować w konkretnego edytora, należy użyć:
Spowoduje to wstrzyknięcie podanego ciągu do edytora iframe
<head><style id="mceDefaultStyles"></style> ...
Rozwiązanie 2
Użyj wp_ajax jako modułu obsługi wywołania zwrotnego, aby dodać style dynamiczne do edytora init za pomocą filtra
źródło
add_editor_style( add_query_arg( 'action', 'my_editor_styles', admin_url( 'admin-ajax.php' ) )
ponieważ jest to standardowy sposób dodawania stylów edytora przez motywy.mce_css
dla ciebie zadziałało (jeśli spróbowałeś).add_editor_style()
, ale powinno dobrze działać, patrząc na kod. Używaniemce_css
jest w rzeczywistości lepszym rozwiązaniem w przypadku, gdy musisz zaczepić się po dodaniu stylów za pomocąadd_editor_style()
. Jednym z takich powodów w kompozycji jest to, że pełne adresy URL dodawane za pośrednictwemadd_editor_style()
są generowane jako pierwsze, pomimo kolejności dodawania.WordPress zapewnia
mce_css
filtr , którego można używać do dodawania niestandardowych arkuszy stylów do Edytora wizualnego. Zgodnie z Kodeksem:Przykład wywołania zwrotnego filtra kodeksu, zmodyfikowanego dla motywu:
źródło
Akceptowałem powyższe rozwiązanie przez @ungestaltbar. Chciałem jednak nieco rozszerzyć tę odpowiedź o pełne rozwiązanie, którego używam, aby inni mogli zobaczyć, jak to działa.
Mam nadzieję, że można w tym miejscu opublikować kolejną odpowiedź. Nie widziałem sposobu, aby opublikować to w bezpośredniej odpowiedzi na moje zaakceptowane rozwiązanie. Wciąż uczę się, jak korzystać z WPSE.
źródło
add_action( 'wp_ajax_nopriv_my_editor_styles', 'my_editor_styles_callback' );
jeśli edytor jest używany w interfejsie użytkownika (dla niezalogowanych użytkowników).Prawdopodobnie spóźniłem się na tę imprezę, ale po użyciu powyższego rozwiązania szybko zdałem sobie sprawę, że szybkość wczytywania strony edytora została poważnie sparaliżowana! Przyjrzawszy się kodowi, zdałem sobie sprawę, że kod działa długo po zainicjowaniu tinyMCE.activeEditor. Kod używa metody setInterval (), która ocenia wyrażenie w określonych odstępach czasu. Sądzę, że było tak, ponieważ nie można było ustalić, w którym momencie podczas wykonywania kodu dostępne będzie „activeEditor”. To właśnie spowodowało, że szybkość strony spadła na kolana.
Jest to o wiele lepsze rozwiązanie, którego używam do zbudowania wtyczki
Tutaj rodzimy nasłuch TinyMCE służy do wykonania kodu po zainicjowaniu aktywnego edytora. Mam nadzieję, że to pomoże komuś tam. Z poważaniem.
źródło
To jest zmodyfikowane rozwiązanie opublikowane na forach WordPress.org na to pytanie: http://wordpress.org/support/topic/customdynamic-css-in-tinymce?replies=14#post-4827573
To zdecydowanie działa. Nie jestem jednak guru JS, więc nie jestem do końca pewien, czy to najlepsze rozwiązanie.
Można to również dodać do pliku JS. Dzięki temu można łatwo przekazywać zmienne
wp_localize_script()
.źródło