Trusted WordPress tutorials, when you need them most.
Beginner’s Guide to WordPress
Coppa WPB
25 Million+
Websites using our plugins
16+
Years of WordPress experience
3000+
WordPress tutorials
by experts

Come creare un plugin TinyMCE per WordPress

Se siete sviluppatori di WordPress, a un certo punto potreste trovarvi a personalizzare o estendere l’editor visuale di WordPress. Ad esempio, potreste voler aggiungere un pulsante alla barra degli strumenti dell’editor visuale per consentire al vostro cliente di inserire facilmente una casella di testo o un pulsante di invito all’azione senza scrivere alcun codice HTML. In questo articolo vi mostreremo come creare un plugin TinyMCE in WordPress.

Tiny MCE toolbar in WordPress Visual Editor

Requisiti

Questo tutorial è destinato agli utenti avanzati. Se siete utenti principianti che vogliono solo estendere l’editor visivo, consultate il plugin TinyMCE Advanced o date un’occhiata a questi suggerimenti sull’uso dell’editor visivo di WordPress.

Per questo tutorial sono necessarie competenze di base di codifica e l’accesso a un’installazione di WordPress dove poterlo testare.

È una cattiva pratica sviluppare plugin su un sito web attivo. Un piccolo errore nel codice può rendere il sito inaccessibile. Ma se dovete farlo su un sito live, fate almeno un backup di WordPress.

Creare il primo plugin TinyMCE

Inizieremo creando un plugin WordPress per registrare il nostro pulsante personalizzato della barra degli strumenti TinyMCE. Una volta cliccato, questo pulsante consentirà all’utente di aggiungere un collegamento con una classe CSS personalizzata.

Il codice sorgente sarà fornito per intero alla fine di questo articolo, ma fino ad allora, creiamo il plugin passo dopo passo.

Per prima cosa, è necessario creare una cartella nella cartella wp-content/plugins della vostra installazione di WordPress. Nominate questa cartella tinymce-custom-link-class.

Da qui, inizieremo ad aggiungere il codice del plugin.

L’intestazione del plugin

Creare un nuovo file nella cartella del plugin appena creato e nominarlo tinymce-custom-link-class.php. Aggiungete questo codice al file e salvatelo.

/**
 * Plugin Name: TinyMCE Custom Link Class
 * Plugin URI: http://wpbeginner.com
 * Version: 1.0
 * Author: WPBeginner
 * Author URI: https://www.wpbeginner.com
 * Description: A simple TinyMCE Plugin to add a custom link class in the Visual Editor
 * License: GPL2
 */

Si tratta di un commento PHP che indica a WordPress il nome del plugin, l’autore e una descrizione.

Nell’area di amministrazione di WordPress, attivate il nuovo plugin andando su Plugin > Plugin installati e facendo clic su Attiva accanto al plugin TinyMCE Custom Link Class:

Installed plugin

Impostazione della classe di plugin

Se due plugin di WordPress hanno funzioni con lo stesso nome, si verificherebbe un errore. Per evitare questo problema, le nostre funzioni saranno racchiuse in una classe.

class TinyMCE_Custom_Link_Class {
	
	/**
	* Constructor. Called when the plugin is initialised.
	*/
	function __construct() {
		
	}

}

$tinymce_custom_link_class = new TinyMCE_Custom_Link_Class;

Questo crea la nostra classe PHP, insieme a un costrutto, che viene richiamato quando si raggiunge la riga $tinymce_custom_link_class = new TinyMCE_Custom_Link_Class;.

Qualsiasi funzione aggiunta all’interno di questa classe non dovrebbe entrare in conflitto con altri plugin di WordPress.

Iniziare a configurare il nostro plugin TinyMCE

Successivamente, dobbiamo dire a TinyMCE che vogliamo aggiungere il nostro pulsante personalizzato alla barra degli strumenti dell’editor visuale. Per farlo, possiamo utilizzare le azioni di WordPress, in particolare l’azione init.

Aggiungete il seguente codice all’interno della funzione __construct() del vostro plugin:

if ( is_admin() ) {
	add_action( 'init', array(  $this, 'setup_tinymce_plugin' ) );
}

Controlla se siamo nell’interfaccia di amministrazione di WordPress. In caso affermativo, chiede a WordPress di eseguire la funzione setup_tinymce_plugin all’interno della nostra classe, quando WordPress ha terminato la sua routine di caricamento iniziale.

Quindi, aggiungiamo la funzione setup_tinymce_plugin:

/**
* Check if the current user can edit Posts or Pages, and is using the Visual Editor
* If so, add some filters so we can register our plugin
*/
function setup_tinymce_plugin() {

// Check if the logged in WordPress User can edit Posts or Pages
// If not, don't register our TinyMCE plugin
	
if ( ! current_user_can( 'edit_posts' ) && ! current_user_can( 'edit_pages' ) ) {
	        return;
}

// Check if the logged in WordPress User has the Visual Editor enabled
// If not, don't register our TinyMCE plugin
if ( get_user_option( 'rich_editing' ) !== 'true' ) {
return;
}

// Setup some filters
add_filter( 'mce_external_plugins', array( &$this, 'add_tinymce_plugin' ) );
add_filter( 'mce_buttons', array( &$this, 'add_tinymce_toolbar_button' ) );
		
	}

Questa funzione controlla se l’utente WordPress attualmente connesso può modificare i post o le pagine. Se non può, non ha senso registrare il plugin TinyMCE per quell’utente, perché non vedrà mai l’editor visuale.

Controlliamo quindi se l’utente utilizza l’editor visuale, poiché alcuni utenti di WordPress lo disattivano tramite Utenti > Il tuo profilo. Anche in questo caso, se l’utente non sta utilizzando l’editor visuale, restituiamo (usciamo) la funzione, poiché non abbiamo bisogno di fare nient’altro.

Infine, aggiungiamo due filtri di WordPress – mce_external_plugins e mce_buttons, per richiamare le nostre funzioni che caricheranno il file Javascript richiesto per TinyMCE e aggiungeranno un pulsante alla barra degli strumenti di TinyMCE.

Registrazione del file Javascript e del pulsante nell’editor visuale

Procediamo con l’aggiunta della funzione add_tinymce_plugin:

/**
* Adds a TinyMCE plugin compatible JS file to the TinyMCE / Visual Editor instance
*
* @param array $plugin_array Array of registered TinyMCE Plugins
* @return array Modified array of registered TinyMCE Plugins
*/
function add_tinymce_plugin( $plugin_array ) {

$plugin_array['custom_link_class'] = plugin_dir_url( __FILE__ ) . 'tinymce-custom-link-class.js';
return $plugin_array;

}
    

Questa funzione dice a TinyMCE che deve caricare i file Javascript memorizzati nell’array $plugin_array. Questi file Javascript diranno a TinyMCE cosa fare.

Dobbiamo anche aggiungere del codice alla funzione add_tinymce_toolbar_button, per indicare a TinyMCE il pulsante che vogliamo aggiungere alla barra degli strumenti:


/**
* Adds a button to the TinyMCE / Visual Editor which the user can click
* to insert a link with a custom CSS class.
*
* @param array $buttons Array of registered TinyMCE Buttons
* @return array Modified array of registered TinyMCE Buttons
*/
function add_tinymce_toolbar_button( $buttons ) {

array_push( $buttons, '|', 'custom_link_class' );
return $buttons;
}

Questo aggiunge due elementi all’array dei pulsanti di TinyMCE: un separatore (|) e il nome programmatico del nostro pulsante(custom_link_class).

Salvare il plugin e poi modificare una pagina o un post per visualizzare l’editor visivo. È probabile che la barra degli strumenti non sia ancora visualizzata:

wordpress-tinymce-plugin-missing-toolbar

Non preoccupatevi: se utilizziamo la console dell’ispettore del nostro browser, vedremo che TinyMCE ha generato un errore 404 e un avviso che ci dice che non riesce a trovare il nostro file Javascript.

wordpress-tinymce-plugin-js-404

Questo è un bene: significa che abbiamo registrato con successo il nostro plugin personalizzato di TinyMCE e ora dobbiamo creare il file Javascript per dire a TinyMCE cosa fare.

Creare il plugin Javascript

Creare un nuovo file nella cartella wp-content/plugins/tinymce-custom-link-class e chiamarlo tinymce-custom-link-class.js. Aggiungere questo codice nel file js:

(function() {
	tinymce.PluginManager.add( 'custom_link_class', function( editor, url ) {
		
	});
})();

Questo richiama la classe TinyMCE Plugin Manager, che possiamo utilizzare per eseguire una serie di azioni relative ai plugin TinyMCE. In particolare, aggiungiamo il nostro plugin a TinyMCE utilizzando la funzione add.

Questa accetta due elementi: il nome del plugin(custom_link_class) e una funzione anonima.

Se avete familiarità con il concetto di funzioni nel codice, una funzione anonima è semplicemente una funzione senza nome. Per esempio, function foobar() { .. . } è una funzione che potremmo richiamare da qualche altra parte nel nostro codice usando foobar().

Con una funzione anonima, non possiamo richiamare quella funzione da qualche altra parte nel nostro codice: viene richiamata solo nel momento in cui viene invocata la funzione add().

Salvare il file Javascript e poi modificare una pagina o un post per visualizzare l’editor visuale. Se tutto ha funzionato, si vedrà la barra degli strumenti:

wordpress-tinymce-plugin-visual-editor-toolbar

Al momento, il nostro pulsante non è stato aggiunto alla barra degli strumenti. Questo perché abbiamo solo detto a TinyMCE che siamo un plugin personalizzato. Ora dobbiamo dire a TinyMCE cosa fare, cioè aggiungere un pulsante alla barra degli strumenti.

Aggiornate il file Javascript, sostituendo il codice esistente con il seguente:

(function() {
	tinymce.PluginManager.add( 'custom_link_class', function( editor, url ) {
		// Add Button to Visual Editor Toolbar
		editor.addButton('custom_link_class', {
			title: 'Insert Button Link',
			cmd: 'custom_link_class',
		});	
	});
})();

Si noti che la nostra funzione anonima ha due argomenti. Il primo è l’istanza dell’editor: questo è l’editor visuale TinyMCE. Allo stesso modo in cui possiamo chiamare varie funzioni sul PluginManager, possiamo anche chiamare varie funzioni sull’editor. In questo caso, chiamiamo la funzione addButton, per aggiungere un pulsante alla barra degli strumenti.

Salvare il file Javascript e tornare all’editor visuale. A prima vista, sembra che non sia cambiato nulla. Tuttavia, se si passa il cursore del mouse a destra dell’icona più a destra della riga superiore, si dovrebbe vedere apparire un tooltip:

wordpress-tinymce-plugin-button-noicon

Abbiamo aggiunto con successo un pulsante alla barra degli strumenti, ma ha bisogno di un’immagine. Aggiungete il seguente parametro alla funzione addButton, sotto la riga title::

immagine: url + '/icon.png',

url è l’URL del nostro plugin. Questo è utile se si vuole fare riferimento a un file di immagine all’interno della cartella del plugin, perché si può aggiungere il nome del file all’URL. In questo caso, avremo bisogno di un’immagine chiamata icon.png nella cartella del nostro plugin. Utilizzare l’icona sottostante:
icon

Ricaricare l’editor visuale e ora si vedrà il pulsante con l’icona:
wordpress-tinymce-plugin-button-icon

Definizione di un comando da eseguire

In questo momento, se si fa clic sul pulsante, non succede nulla. Aggiungiamo un comando a TinyMCE che indichi cosa fare quando si fa clic sul pulsante.

Nel nostro file Javascript, aggiungiamo il seguente codice sotto la fine della sezione editor.addButton:

// Add Command when Button Clicked
editor.addCommand('custom_link_class', function() {
	alert('Button clicked!');
});

Ricaricare l’editor visuale, fare clic sul pulsante e apparirà un avviso che confermerà che abbiamo appena fatto clic sul pulsante:

wordpress-tinymce-plugin-alert-button-clicked

Sostituiamo l’avviso con un prompt, chiedendo all’utente il collegamento che desidera avvolgere intorno al testo selezionato nell’editor visuale:

// Add Command when Button Clicked
editor.addCommand('custom_link_class', function() {
	// Check we have selected some text that we want to link
	var text = editor.selection.getContent({
		'format': 'html'
	});
	if ( text.length === 0 ) {
		alert( 'Please select some text to link.' );
		return;
	}

	// Ask the user to enter a URL
	var result = prompt('Enter the link');
	if ( !result ) {
		// User cancelled - exit
		return;
	}
	if (result.length === 0) {
		// User didn't enter a URL - exit
		return;
	}

	// Insert selected text back into editor, wrapping it in an anchor tag
	editor.execCommand('mceReplaceContent', false, '<a class="button" href="' + result + '">' + text + '</a>');
});

Questo blocco di codice esegue alcune azioni.

Innanzitutto, si controlla se l’utente ha selezionato del testo da collegare nell’Editor visuale. In caso contrario, viene visualizzato un avviso che invita a selezionare il testo da collegare.

wordpress-tinymce-plugin-alert-select-text

Successivamente, chiediamo all’utente di inserire un collegamento, verificando nuovamente se lo ha fatto. Se hanno annullato o non hanno inserito nulla, non facciamo nient’altro.

wordpress-tinymce-plugin-prompt-url

Infine, eseguiamo la funzione execCommand sull’editor TinyMCE, in particolare l’azione mceReplaceContent. Questa azione sostituisce il testo selezionato con il nostro codice HTML, che consiste in un link di ancoraggio con class=”button”, utilizzando il testo selezionato dall’utente.

Se tutto ha funzionato, si vedrà che il testo selezionato è ora collegato nelle viste Visual Editor e Text, con la classe impostata su button:

wordpress-tinymce-plugin-link-visual

wordpress-tinymce-plugin-link-html

Sommario

Abbiamo creato con successo un plugin per WordPress che aggiunge un pulsante all’editor visivo TinyMCE di WordPress. Questo tutorial ha anche trattato alcune delle basi dell’API TinyMCE e dei filtri WordPress disponibili per le integrazioni TinyMCE.

Abbiamo aggiunto del codice in modo che quando un utente fa clic sul nostro pulsante personalizzato, gli viene richiesto di selezionare del testo nell’editor visuale, che può poi essere collegato a un URL di sua scelta. Infine, il nostro plugin sostituisce il testo selezionato con una versione collegata che contiene una classe CSS personalizzata chiamata button.

Speriamo che questo tutorial vi abbia aiutato a imparare come creare un plugin TinyMCE per WordPress. Potete anche consultare la nostra guida su come creare un plugin WordPress specifico per un sito.

Se questo articolo vi è piaciuto, iscrivetevi al nostro canale YouTube per i video tutorial di WordPress. Potete trovarci anche su Twitter e Facebook.

Divulgazione: I nostri contenuti sono sostenuti dai lettori. Ciò significa che se cliccate su alcuni dei nostri link, potremmo guadagnare una commissione. Vedi come WPBeginner è finanziato , perché è importante e come puoi sostenerci. Ecco il nostro processo editoriale .

Avatar

Editorial Staff at WPBeginner is a team of WordPress experts led by Syed Balkhi with over 16 years of experience in WordPress, Web Hosting, eCommerce, SEO, and Marketing. Started in 2009, WPBeginner is now the largest free WordPress resource site in the industry and is often referred to as the Wikipedia for WordPress.

Il kit di strumenti WordPress definitivo

Ottenete l'accesso gratuito al nostro kit di strumenti - una raccolta di prodotti e risorse relative a WordPress che ogni professionista dovrebbe avere!

Reader Interactions

7 commentiLascia una risposta

  1. Syed Balkhi

    Hey WPBeginner readers,
    Did you know you can win exciting prizes by commenting on WPBeginner?
    Every month, our top blog commenters will win HUGE rewards, including premium WordPress plugin licenses and cash prizes.
    You can get more details about the contest from here.
    Start sharing your thoughts below to stand a chance to win!

  2. Hubertus

    Wonderful, just that what I needet.
    Thank you verry much.

  3. rich

    Hi, I am getting the following error:

    Deprecated TinyMCE API call: .onNodeChange.add(..)

  4. Joel

    Brilliant article – I had to search forever to find something this simple and easy to understand. For someone completely new to this, it was very annoying how every single tutorial would conveniently leave out the directory to create this plugin in. Thanks so much!

  5. Friso

    Good article, I used it in my own plugin. Quick tip tough, you don’t have to use an object by refence anymore in PHP, so instead of &$this, you can do just $this. Since objects are passed by reference in default

  6. Michael

    Sorry, but i get always a error message

    Warning: call_user_func_array() expects parameter 1 to be a valid callback, first array member is not a valid class name or object in C:\xampp\htdocs\wordpress\wp-includes\class-wp-hook.php on line 298

    Can you tell me, whats wrong?

  7. Wita

    You guys always awesome, nice tutorial :D

Lascia una risposta

Grazie per aver scelto di lasciare un commento. Tenga presente che tutti i commenti sono moderati in base alle nostre politica dei commenti e il suo indirizzo e-mail NON sarà pubblicato. Si prega di NON utilizzare parole chiave nel campo del nome. Avremo una conversazione personale e significativa.