Come sostituire il contenuto dell'editor tinyMCE sia in modalità testo che visuale usando jQuery?

3 nov 2017, 07:05:07
Visualizzazioni: 21.5K
Voti: 6

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:

Screenshot dell'editor WordPress che mostra il pulsante Inserisci Contenuto accanto al pulsante Aggiungi Media

Nota: Ci sono già varie risposte ma rispondono solo alla sostituzione del testo in modalità visuale.

0
Tutte le risposte alla domanda 1
1
17

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
    }
}
3 nov 2017 07:05:07
Commenti

Funziona come previsto, dovrebbe essere accettato

Roland Soós Roland Soós
23 mag 2018 11:39:10