Come sostituire il contenuto dell'editor tinyMCE sia in modalità testo che visuale usando jQuery?
Ho aggiunto un pulsante accanto al pulsante Aggiungi Media nell'editor dei post di WordPress. Si chiama pulsante Inserisci Contenuto.
Quando questo pulsante viene premuto, dovrebbe inviare un contenuto, sia testo semplice che HTML, nell'editor, sostituendo qualsiasi testo presente.
Il codice dovrebbe funzionare sia in modalità testo che in modalità visuale. Come posso farlo usando jQuery?
Ecco un'immagine per chiarire meglio la domanda:
Nota: Ci sono già varie risposte ma rispondono solo alla sostituzione del testo in modalità visuale.

La prima cosa da fare è selezionare l'editor attivo. Qui selezioniamo l'editor utilizzando il suo id, che è content
.
var activeEditor = tinyMCE.get('content');
Poi utilizziamo il metodo setContent
di tinyMCE:
var activeEditor = tinyMCE.get('content');
var content = 'Contenuto HTML o testo semplice qui...';
activeEditor.setContent(content);
Tuttavia, se l'editor è in modalità testo all'inizio, dopo il caricamento della pagina, activeEditor
sarà null
. Quindi dobbiamo gestire questo caso:
var activeEditor = tinyMCE.get('content');
var content = 'Contenuto HTML o testo semplice qui...';
if(activeEditor!==null){
activeEditor.setContent(content);
}
Poiché setContent
funziona solo per tinyMCE, questo non funzionerà se l'editor è in modalità testo. Quindi dobbiamo chiamare direttamente la textarea e aggiornarne il valore:
var activeEditor = tinyMCE.get('content');
var content = 'Contenuto HTML o testo semplice qui...';
if(activeEditor!==null){
activeEditor.setContent(content);
} else {
$('#content').val(content);
}
Tuttavia, un'altra complicazione è che se si è passati alla modalità visuale e poi di nuovo alla modalità testo, activeEditor
non sarà più null, quindi setContent
verrà sempre chiamato invece della textarea. Quindi dobbiamo verificare lo stato dell'editor.
Per determinare la modalità corrente, monitoriamo la classe di div#wp-content-wrap.
Mettendo tutto insieme:
var content = 'Contenuto HTML o testo semplice qui...';
if($('#wp-content-wrap').hasClass('html-active')){ // Siamo in modalità testo
$('#content').val(content); // Aggiorna il contenuto della textarea
} else { // Siamo in modalità tinyMCE
var activeEditor = tinyMCE.get('content');
if(activeEditor!==null){ // Assicuriamoci di non chiamare setContent su null
activeEditor.setContent(content); // Aggiorna il contenuto di tinyMCE
}
}
