Tengo un tema desarrollado a medida y realmente complejo. Una de las cosas que tengo es múltiples áreas de contenido donde los usuarios pueden especificar contenido para pestañas específicas. Cargo varias instancias del editor de WordPress a través de la wp_editor()
función. Funciona perfectamente (Todo esto está en el lado del administrador, en el tipo de publicación "Página")
Sin embargo, comencé a hacer algunas mejoras, incluida la capacidad de agregar / eliminar pestañas dinámicamente (antes, cargué 6 editores en la página). Los usuarios pueden tener 1-7 pestañas.
Cuando los usuarios agregan una pestaña, debe agregar una instancia del editor a la página. Sin embargo, no importa lo que intente, no puedo hacer que se cargue y se muestre correctamente.
Aquí están las 2 cosas que he probado hasta ahora:
- Cree un archivo php que incluya el bootstrap de administrador y luego cargue el editor con
wp_editor()
. Luego hago un jQuery$.load
para llamar a la página e incluir el HTML resultante en el área que necesita mostrar. Sin embargo, esto realmente no funciona, ya que los botones de formato de los editores desaparecen (vale la pena señalar que al abrir la página directamente, el editor se muestra y funciona perfectamente) - Cargó el editor en la página, dentro de un div oculto, y luego una vez que se agrega una pestaña, use jquery para moverlo a su lugar. Esto carga el editor con tacto, pero no puede usar ninguno de los botones del editor (se muestran, pero no hacen nada), y no puede colocar el cursor en el área de texto (sin embargo, es curioso que cambie al modo HTML permite escribir y cierta interacción con los botones de modo HTML)
Entonces la pregunta es, ¿alguien ha tenido suerte agregando editores a través de llamadas AJAX? ¿Algún consejo?
admin-ajax.php
? Si no hace una función con su códigoadmin-ajax.php
$('#sph-tabs-section-tab'+newTab).load('/wp-admin/admin-ajax.php?action=sph_add_editor');
y luego agregué una función que devuelvewp_editor()
. Se llama sin problemas, pero aún así solo devuelve el editor sin botones. (exactamente los mismos resultados que el ítem 1 en el PO)Respuestas:
Para que aparezcan las etiquetas rápidas, debe volver a crearlas en su controlador completo ajax.
Mi controlador de éxito ajax se ve así;
Me las arreglé para cargar el editor al llamar primero a una función estática que crea el editor y lo almacena en caché como variable. Ejecuto el método de creación del editor en init. Esto parece hacer que WordPress agregue todos los scripts requeridos.
Es importante que cuando cree su instancia de editor, que la configure para usar tinymce, de esa manera también se conquista el archivo tinymce js.
fuente
Después de luchar con él, encontré la solución que funciona, en una devolución de llamada después de agregar un nuevo elemento:
Es extraño que no haya documentación dentro del códice.
fuente
wp_editor()
continymce
arg establecido entrue
:-)Finalmente, solución de trabajo:
agregue acción en wordpress, digamos
My_Action_Name
(también tenga en cuenta, ID de área de textoMy_TextAreaID_22
):ahora, en Dashboard, ejecute esta función (nota, usando
My_TextAreaID_22
yMy_Action_Name
):fuente
Debe volver a llamar al editor init una vez que agregue su área de texto ajax, lo hice así:
Luego llame a su función después de su ajax, así:
fuente
response
), llame a la función tinymce_textareas que inicializa tinyMCE en las nuevas áreas de texto.La solución utilizable de @toscho en github . Él construyó este buen resultado también para una pregunta aquí, vea su respuesta para más detalles.
fuente
Use este código, espero que ayude:
Más detalles se pueden encontrar aquí .
fuente
Lo logré de esta manera:
La identificación debe ser rundom y única. La configuración debe ser la misma que la configuración de su editor 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
fuente
Esto funcionará en las páginas de administración.
Para agregar un nuevo editor de wp a un contenedor por JS AJAX:
1) Cree una función wp_ajax en functions.php para devolver el wp_editor
2) Cree un script jQuery para solicitar un nuevo editor de texto y añádalo a un contenedor, para este caso, al presionar un botón
Archivo PHP
JS Script (jsfile.js)
Llamada de secuencias de comandos en cola:
fuente