Jak załadować wp_editor przez AJAX

17

Czy ktoś wie, jak załadować wp_editor przez AJAX w WordPress?

Mój znacznik i edytor ładują się poprawnie, ale formanty edytora nie ładują się poprawnie, może to być spowodowane tym, że JavaScript nie działa w wywołaniu AJAX.

Każda pomoc będzie mile widziana.

użytkownik17108
źródło
Cholernie dobrze jest zacząć działać. Sprawdź część kodu z Carrington Build lub Advanced Custom Fields (myślę ...). Po prostu bądź przygotowany na frustrację.
MikeNGarrett

Odpowiedzi:

7

Głównym problemem są brakujące skrypty. Skrypty umieszczone w kolejce _WP_Editors::enqueue_scripts()nigdy nie są drukowane. To samo dotyczy _WP_Editors::editor_js().

Musisz to zrobić w module obsługi wywołania zwrotnego AJAX. Napisałem wtyczkę demo i umieściłem ją w edytorze AJAX GitHub: T5 .

Jest jedna klasa o nazwie Ajax_Editor. Ta metoda render()drukuje edytor na żądanie AJAX.

public function render()
{
    if ( ! $this->validator->is_valid( TRUE ) )
        die( 'nope' );

    wp_editor( $this->data->get(), $this->editor_id, $this->settings );
    \_WP_Editors::enqueue_scripts();
    print_footer_scripts();
    \_WP_Editors::editor_js();

    die();
}

Dokładna kolejność jest ważna i nie zapomnij die()na końcu. Jeszcze nie działa przesyłanie multimediów. Podczas próby włączenia tego pojawia się błąd JavaScript.

Pamiętaj, że wywołanie print_footer_scripts();da ci więcej, niż się spodziewałeś: niektóre wtyczki (na przykład Query Monitor) rejestrują swoje skrypty nawet dla żądań AJAX, nawet jeśli ich tam nie potrzebują.

fuxia
źródło
Dzięki wielkie! uratowałeś mnie od 2 dni próbując dostać pracę! jedyną rzeczą z tym, jeśli chcesz dołączyć go do niestandardowego typu postu, jest on w konflikcie z innym edytorem :(
numediaweb
dla każdego, kto szuka, po WP 4.8 możesz to zrobić łatwiej (i czysto) za pomocą JS API wp.editor.initialize: wordpress.stackexchange.com/a/274608/76440
majick
0

Po zmaganiu się z nim znalazłem jedno liniowe rozwiązanie, które działa, w wywołaniu zwrotnym dodaj:

tinymce.execCommand( 'mceAddEditor', true, element.id );

Nie mam pojęcia, dlaczego nie mogłem znaleźć dokumentacji w tinymce.

Goran Jakovljevic
źródło