Eu tenho um tema que é personalizado desenvolvido e realmente complexo. Uma das coisas que tenho são várias áreas de conteúdo nas quais os usuários podem especificar conteúdo para guias específicas. Carrego várias instâncias do editor do WordPress por meio da wp_editor()
função Funciona perfeitamente. (Tudo isso no lado do administrador, no tipo de postagem "Página")
No entanto, comecei a fazer algumas melhorias, incluindo a capacidade de adicionar / remover guias dinamicamente (antes, eu carregava 6 editores na página). Os usuários podem ter de 1 a 7 guias.
Quando os usuários adicionam uma guia, ele precisa adicionar uma instância do editor à página. No entanto, não importa o que eu tente, não consigo carregar e exibir corretamente.
Aqui estão as duas coisas que eu tentei até agora:
- Crie um arquivo php com a inicialização do administrador incluída e carregue o editor com
wp_editor()
. Em seguida, faço um jQuery$.load
para chamar a página e incluir o HTML resultante na área que ele precisa exibir. No entanto, isso realmente não funciona, pois os botões de formatação dos editores desaparecem (vale a pena notar que, ao puxar a página diretamente para cima, o editor é exibido e funciona perfeitamente) - Carregou o editor na página, dentro de uma div oculta e, depois que uma guia é adicionada, use o jquery para movê-lo no lugar. Isso carrega o editor intacto, mas você não pode usar nenhum dos botões do editor (eles são exibidos, mas não faz nada) e não pode colocar o cursor na área de texto (curioso, porém, que mudar para o modo HTML permite digitação e alguma interação com os botões do modo HTML)
Portanto, a pergunta é: alguém teve sorte em adicionar editores através de chamadas AJAX? Algum conselho?
admin-ajax.php
? Se não fazer uma função com o seu código, em seguida, chamá-lo viaadmin-ajax.php
$('#sph-tabs-section-tab'+newTab).load('/wp-admin/admin-ajax.php?action=sph_add_editor');
e adicionei uma função que retornawp_editor()
. É chamado sem nenhum problema, mas ainda assim retorna o editor sem botões. (exata mesmos resultados que o item 1 no OP)Respostas:
Para que as tags rápidas apareçam, é necessário instanciá-las novamente no seu manipulador ajax em um completo.
Meu manipulador de sucesso do ajax se parece com isso;
Consegui fazer o editor carregar primeiro chamando uma função estática que cria o editor e o armazena em cache como variável. Eu executo o método de criação do editor no init. Isso parece levar o wordpress a enfileirar todos os scripts necessários.
É importante que, quando você criar sua instância do editor, defina-a para usar tinymce, para que o arquivo tinymce js também seja enquadrado.
fonte
Depois de lutar com ele, encontrou a solução que funciona, em um retorno de chamada depois de adicionar um novo elemento:
É estranho que não haja documentação dentro do codex.
fonte
wp_editor()
comtinymce
conjunto de arg paratrue
:-)Finalmente, solução de trabalho:
adicione ação no wordpress, digamos
My_Action_Name
(observe também, textarea IDMy_TextAreaID_22
):agora, no painel, execute esta função (observe, usando of
My_TextAreaID_22
eMy_Action_Name
):fonte
Você precisa chamar o editor init novamente depois de adicionar sua área de texto ajax, eu fiz assim:
Em seguida, chame sua função após o seu ajax, assim:
fonte
response
), chame a função tinymce_textareas que inicializa tinyMCE nas novas áreas de texto.A solução utilizável do @toscho no github . Ele construiu esse bom resultado também para uma pergunta aqui, veja sua resposta para mais detalhes.
fonte
Use este código, espero que ajude:
Mais detalhes podem ser encontrados aqui .
fonte
Eu consegui desta maneira:
O ID deve ser redundante e exclusivo. As configurações devem ser as mesmas do seu 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
fonte
Isso funcionará nas páginas de administração.
Para anexar um novo editor wp a um contêiner por JS AJAX:
1) Crie uma função wp_ajax em functions.php para retornar o wp_editor
2) Crie um script jQuery para solicitar um novo editor de texto e anexá-lo a um contêiner, neste caso, ao pressionar um botão
Arquivo PHP
Script JS (jsfile.js)
Os scripts de enfileiramento chamam:
fonte