Cách tải wp_editor qua AJAX


17

Có ai biết làm thế nào để tải wp_editor qua AJAX trong WordPress không?

Đánh dấu và trình chỉnh sửa của tôi đang được tải đúng cách nhưng các điều khiển trình chỉnh sửa không được tải đúng cách, có thể là do Javascript không chạy trong cuộc gọi AJAX.

Bất kỳ trợ giúp sẽ được đánh giá cao.


Đó là một địa ngục của một điều để làm việc. Kiểm tra một số mã từ Carrington Build hoặc Advanced Custom Field (Tôi nghĩ rằng ...). Chỉ cần chuẩn bị để được thất vọng.
MikeNGarrett

Câu trả lời:


7

Vấn đề chính là các kịch bản bị thiếu. Các kịch bản _WP_Editors::enqueue_scripts()được bao bọc trong không bao giờ được in. Điều này cũng đúng với _WP_Editors::editor_js().

Vì vậy, bạn phải làm điều đó trong trình xử lý gọi lại AJAX của bạn. Tôi đã viết một plugin demo và đưa nó lên GitHub: T5 AJAX Editor .

Có một lớp tên Ajax_Editor. Phương thức của nó render()in trình soạn thảo theo yêu cầu 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();
}

Thứ tự chính xác là rất quan trọng, die()cuối cùng đừng quên . Những gì không hoạt động được là tải lên phương tiện truyền thông. Tôi gặp lỗi JavaScript khi cố gắng đưa vào đó.

Lưu ý rằng việc gọi điện print_footer_scripts();sẽ mang lại cho bạn nhiều hơn bạn mong đợi: một số plugin (ví dụ Trình theo dõi truy vấn) đăng ký tập lệnh của chúng ngay cả đối với các yêu cầu AJAX, ngay cả khi chúng không cần chúng ở đó.


Cám ơn rất nhiều! bạn đã cứu tôi sau 2 ngày cố gắng để có được công việc! Điều duy nhất với điều này, nếu bạn muốn đưa nó vào một loại bài đăng tùy chỉnh, nó xung đột với trình soạn thảo khác :(
numediaweb

Đối với bất kỳ ai đang tìm kiếm, sau WP 4.8, bạn có thể thực hiện việc này dễ dàng hơn (và rõ ràng hơn) thông qua API JS wp.editor.initialize: wordpress.stackexchange.com/a/274608/76440
majick

0

Sau khi vật lộn với nó, tìm thấy giải pháp một dòng hoạt động, trong phần gọi lại thêm:

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

Không biết tại sao tôi không thể tìm thấy tài liệu bên trong tinymce.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.