Aggiungere una Classe CSS al Link nell'Editor TinyMCE

7 nov 2014, 01:39:26
Visualizzazioni: 28.4K
Voti: 9

Cercando una soluzione, ho trovato il plugin che permette di avere un menu a tendina degli stili CSS già presenti nel foglio di stile. Quello che voglio è permettere all'editor di aggiungere Classi CSS da una casella di testo. Considerando questa immagine:

Finestra di dialogo del link nell'editor TinyMCE

Quello che sto cercando idealmente è un modo per ottenere un'altra casella di testo sotto Titolo chiamata Classe. La libertà di digitare una classe CSS è necessaria per altre funzionalità all'interno del sito. Qualche idea su come posso realizzarlo?

Grazie mille!

0
Tutte le risposte alla domanda 2
5
22

Un'opzione è aggiungere una classe al menu Styleselect in MCE. Adattato dalla pagina Codex "TinyMCE Custom Styles" è necessario prima aggiungere lo style select all'editor:

// Funzione di callback per inserire 'styleselect' nell'array $buttons
function my_mce_buttons_2( $buttons ) {
    array_unshift( $buttons, 'styleselect' );
    return $buttons;
}
// Registriamo la nostra callback al filtro appropriato
add_filter('mce_buttons_2', 'my_mce_buttons_2');

Questo aggiungerà il nuovo menu a tendina all'editor. Poi crei i tuoi stili personalizzati:

// Funzione di callback per filtrare le impostazioni MCE
function my_mce_before_init_insert_formats( $init_array ) {  
    // Definiamo l'array style_formats
    $style_formats = array(  
        // Ogni elemento dell'array è un formato con le proprie impostazioni
        array(  
            'title' => 'La Mia Classe Personalizzata per Link',  
            'selector' => 'a',  
            'classes' => 'my-custom-link-class'             
        )
    );  
    // Inseriamo l'array, CODIFICATO IN JSON, in 'style_formats'
    $init_array['style_formats'] = json_encode( $style_formats );  

    return $init_array;  

} 
// Colleghiamo la callback a 'tiny_mce_before_init' 
add_filter( 'tiny_mce_before_init', 'my_mce_before_init_insert_formats' );

A partire da WordPress 3.9 che includeva un aggiornamento a TinyMCE 4.0, lo style select è molto più robusto e include quella regola selector che significa che puoi definire stili che possono essere applicati solo ai link. È piuttosto utile.

Questa soluzione significa che puoi pre-definire le classi di cui hai bisogno e assicurarti che non ci siano mai errori di battitura o altri problemi.

Come nota il Codex, questo è meglio combinato con un buon file editor-style.css che applicherà i tuoi stili direttamente nell'editor.

7 nov 2014 17:43:19
Commenti

Ciao mrwweb. Grazie per la tua risposta, anche se non è esattamente quello che stavo cercando. Non intendo selezionare una classe da una lista predefinita di classi. Invece, ho solo bisogno di permettere all'editor di digitare un nome di classe. In pratica, ho utilizzato il plugin Lime Modal di CodeCanyon, e questo richiede che il link di attivazione utilizzi un nome di classe che sia uguale al nome univoco del modal.

maGz maGz
9 nov 2014 00:57:29

Questo è molto interessante, mi piace questo metodo, ma c'è un modo per aggiungere la nuova opzione insieme agli altri elementi del menu a discesa (ad esempio paragrafo, heading 1, ecc.).

JacobTheDev JacobTheDev
2 dic 2014 22:10:39

Non sono sicuro, @rev. Una cosa che mi piace è che questa strategia generalmente ti permette di separare gli elementi HTML semantici dagli stili CSS basati su classi (che si spera siano ancora semantici). Non ho tempo per farlo ora, ma prova a fare var_dump() dell'$init_array qui sopra e vedi cosa c'è dentro. Ricorda che l'aggiornamento a TinyMCE 4.0 in WordPress 3.9 ha reso molti tutorial e documentazione esistenti errati. Controlla le date quando fai ricerche.

mrwweb mrwweb
3 dic 2014 00:34:42

Ah, capisco il vantaggio di mantenerlo separato. Esito solo un po' nell'aggiungere un intero nuovo menu a tendina solo per aggiungere una nuova classe, eh eh. Darò un'occhiata al tuo suggerimento, grazie.

JacobTheDev JacobTheDev
3 dic 2014 00:41:57

Ti capisco. Quando faccio questo rimuovo il formatselect e passo completamente a styleselect per tutti gli elementi a blocchi e gli stili di testo.

mrwweb mrwweb
3 dic 2014 02:27:48
2

Sono riuscito a risolvere questo problema aggiungendo il plugin WP Edit al mio sito. Ha un pulsante Advanced Link che mi permette (o a un editor) di inserire manualmente un nome di classe.

10 nov 2014 02:03:02
Commenti

Sviluppatore di WP Edit qui. Grazie per aver condiviso che il plugin ti è stato utile. Fammi sapere se hai domande sull'utilizzo.

josh josh
10 nov 2014 02:13:01

Ehi grazie Josh! Ho appena iniziato a usarlo, ti farò sapere. Finora, tutto bene!

maGz maGz
10 nov 2014 02:16:13