Mam motyw opracowany na zamówienie i naprawdę złożony. Jedną z rzeczy, które mam, jest wiele obszarów zawartości, w których użytkownicy mogą określać zawartość dla określonych kart. Ładuję wiele wystąpień edytora WordPress przez wp_editor()
funkcję. Działa idealnie. (To wszystko po stronie administratora, w typie posta „Strona”)
Zacząłem jednak wprowadzać kilka ulepszeń, w tym możliwość dynamicznego dodawania / usuwania kart (wcześniej załadowałem 6 edytorów na stronie). Użytkownicy mogą mieć 1-7 kart.
Gdy użytkownicy dodają kartę, musi ona dodać instancję edytora do strony. Jednak bez względu na to, co próbuję, nie mogę go poprawnie załadować i wyświetlić.
Oto 2 rzeczy, których do tej pory próbowałem:
- Utwórz plik php, który zawiera bootstrap administratora, a następnie załaduj edytor
wp_editor()
. Następnie wykonuję jQuery,$.load
aby wywołać stronę i dołączyć wynikowy kod HTML w obszarze, który musi wyświetlić. Nie działa to jednak tak naprawdę, ponieważ znikają przyciski formatowania edytorów (warto zauważyć, że podciągając stronę bezpośrednio w górę, edytor wyświetla i działa idealnie) - Załadowałem edytor na stronę, w ukrytym div, a następnie po dodaniu karty użyj jquery, aby przenieść ją na miejsce. To ładuje takt edytora, ale nie możesz użyć żadnego z przycisków edytora (wyświetlają się, ale nic nie robią), i nie możesz umieścić kursora w polu tekstowym (ciekawe, że przejście do trybu HTML umożliwia pisanie i interakcję z przyciskami trybu HTML)
Pytanie brzmi, czy ktoś miał szczęście dodając redaktorów za pośrednictwem połączeń AJAX? Jakakolwiek rada?
admin-ajax.php
? Jeśli nie,admin-ajax.php
$('#sph-tabs-section-tab'+newTab).load('/wp-admin/admin-ajax.php?action=sph_add_editor');
a następnie dodałem funkcję, która zwracawp_editor()
. Jest wywoływany bez problemu, ale nadal zwraca tylko edytor bez przycisków. (dokładnie takie same wyniki jak pozycja 1 w PO)Odpowiedzi:
Aby pojawiły się szybkie tagi, musisz utworzyć je ponownie w ramach swojego programu obsługi onkompletnej ajax.
Mój moduł obsługi sukcesu ajax wygląda następująco;
Udało mi się załadować edytor, wywołując najpierw funkcję statyczną, która tworzy edytor i buforuje go jako zmienną. Uruchamiam metodę tworzenia edytora przy init. Wydaje się, że Wordpress uruchamia wszystkie wymagane skrypty.
Ważne jest, aby podczas tworzenia instancji edytora ustawić tak, aby korzystała z tinymce, tak by plik js tinymce był również zapisywany w pliku.
źródło
Po zmaganiu się z nim znalazłem rozwiązanie, które działa, w wywołaniu zwrotnym po dodaniu nowego elementu:
Dziwne, że w kodzie nie ma żadnej dokumentacji.
źródło
wp_editor()
tinymce
true
Wreszcie działające rozwiązanie:
dodaj akcję w wordpress, powiedzmy
My_Action_Name
(także uwaga, identyfikator textareaMy_TextAreaID_22
):teraz, w Dashboard, uruchom tę funkcję (uwaga, użycie
My_TextAreaID_22
iMy_Action_Name
):źródło
Musisz ponownie wywołać edytora init po dodaniu swojego obszaru tekstowego ajax, zrobiłem to tak:
Następnie wywołaj swoją funkcję po swojej ajax, w ten sposób:
źródło
response
), wywołaj funkcję tinymce_textareas, która inicjuje tinyMCE w nowych obszarach tekstowych.Użyteczne rozwiązanie z @toscho na github . Buduje ten miły wynik również na pytanie tutaj, zobacz jego odpowiedź, aby uzyskać więcej informacji.
źródło
Użyj tego kodu, mam nadzieję, że pomoże:
Więcej szczegółów można znaleźć tutaj .
źródło
Udało mi się to w ten sposób:
Identyfikator musi być rzadki i niepowtarzalny. Ustawienia muszą być takie same jak ustawienia w edytorze 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
źródło
Działa to na stronach administracyjnych.
Aby dodać nowy edytor wp do kontenera JS AJAX:
1) Utwórz funkcję wp_ajax w functions.php, aby zwrócić wp_editor
2) Utwórz skrypt jQuery, aby poprosić o nowy edytor tekstu i dołącz go do kontenera, w tym przypadku po naciśnięciu przycisku
Plik PHP
Skrypt JS (jsfile.js)
Kolejkuj wywołania skryptów:
źródło