Nella parte 1 e nella parte 2 della nostra serie di tutorial sui modelli di meta box personalizzati, abbiamo imparato come creare un array di campi per scorrere e creare una meta box personalizzata con i campi standard. Ora inseriamo un po 'di JavaScript per alcuni campi fantasiosi ma estremamente utili.
Ciascuno dei campi che tratteremo in questo tutorial richiederà jQuery e l'interfaccia utente jQuery. Fortunatamente, WordPress rende super facile utilizzarli wp_enqueue_script
, e al punto 3.3, tutte le interazioni e i widget dell'interfaccia utente jQuery sono forniti in bundle con WordPress.
Dato che stiamo lavorando su una pagina che accoda già jQuery, possiamo saltarla, ma avremo bisogno di ottenere il jQuery UI Datepicker. Avremo anche bisogno di creare il nostro foglio di stile in quanto il CSS necessario non viene ancora fornito in bundle in WordPress, anche se lo stanno elaborando.
if (is_admin ()) wp_enqueue_script ('jquery-ui-datepicker'); wp_enqueue_style ('jquery-ui-custom', get_template_directory_uri (). '/ css / jquery-ui-custom.css');
Dobbiamo solo caricarli nell'amministratore e non nella parte anteriore del sito, quindi racchiudere le funzioni in modo condizionale. La prima funzione chiama datepicker e caricherà anche l'interfaccia utente jQuery Core. La seconda funzione chiamerà il nostro foglio di stile jquery-ui-custom.css dalla cartella css del tema. Il foglio di stile di esempio incluso nel download all'inizio di questo tutorial non richiede immagini. Puoi anche creare il tuo tema dell'interfaccia utente jQuery.
Ora diamo un'occhiata all'elemento dell'array che dobbiamo aggiungere al nostro $ custom_meta_fields
array che abbiamo iniziato nella prima parte.
array ('label' => 'Date', 'desc' => 'Una descrizione per il campo.', 'id' => $ prefix.'date ',' type '=>' date ')
Questo array è quasi identico al nostro elemento di testo. Ha un'etichetta principale, una descrizione, un ID univoco e il tipo di data è definito. Stiamo andando semplicemente con un'implementazione di base del selezionatore di date nel nostro esempio qui, ma se hai bisogno di rendere più veloce l'uso del selettore di date, potresti anche aggiungere altre informazioni all'array come il formato preferito, la localizzazione e intervallo di date per citarne alcuni. Quindi è possibile utilizzare tali informazioni nel seguente call call da aggiungere alla parte superiore della pagina:
add_action ( 'admin_head', 'add_custom_scripts'); function add_custom_scripts () global $ custom_meta_fields, $ post; $ output = ''Questo bit deve essere aggiunto al di fuori del
$ custom_meta_fields
array e al di fuori delshow_custom_meta_box
funzione di callback per inizializzare il selettore di date su tutti i campi con la classe di "datepicker".// data case 'date': echo '
'$ Campo [ 'desc'].''; rompere;Questo codice verrà aggiunto dopo l'ultima "interruzione" nel nostro cambio di meta casella.
A volte è necessario raccogliere un numero impostato su un intervallo esatto o che deve essere un multiplo di 5. Il cursore dell'interfaccia utente jQuery è ottimo per questo perché consente di trascinare e scorrere facilmente il numero che si desidera immettere.
wp_enqueue_script ( 'jquery-ui-cursore');
Assicurati di chiamare il file js aggiungendolo ai tuoi enqueues avvolti con is_admin ().
array ('label' => 'Slider', 'desc' => 'Una descrizione per il campo.', 'id' => $ prefix.'slider ',' type '=>' slider ',' min '= > '0', 'max' => '100', 'step' => '5')
Ancora una volta, stiamo aggiungendo questo al nostro $ custom_meta_fields
array e ci sono alcune aggiunte speciali.
if ($ field ['type'] == 'slider') $ value = get_post_meta ($ post-> ID, $ campo ['id'], vero); if ($ value == ") $ value = $ campo ['min']; $ output. = 'jQuery (" #'. $ campo ['id'] .'- slider ") .slider (valore: ' . $ value. ', min:'. $ campo ['min']. ', max:'. $ campo ['max']. ', passo:'. $ campo ['passo']. ', diapositiva: function (event, ui) jQuery ("# '. $ campo [' id '].'") .val (valore ui.);); ';
Aggiungi questo bit di codice al loop nel add_custom_scripts
funzione che abbiamo creato nell'ultimo tipo di campo. Questo aggiungerà il jQuery personalizzato di cui abbiamo bisogno per impostare il cursore.
// slider case 'slider': $ value = $ meta! = "? $ meta: '0'; echo '
'$ Campo [ 'desc'].''; rompere;
Di nuovo, stiamo solo usando un campo di testo per ricevere il valore del cursore.
Dall'introduzione di Post Thumbnails, l'impostazione di un'immagine con un meta campo personalizzato non è qualcosa che facciamo molto, ma ogni tanto arriva un momento in cui è necessario impostare un'immagine diversa dalla miniatura del post, specialmente quando si costruisce un plug-in che tiene conto del fatto che il tema dell'utente potrebbe non supportare le miniature dei post.
Questo campo aggiungerà la possibilità di caricare un'immagine o selezionarne una dal caricamento multimediale, visualizzare un'anteprima dell'immagine e salvare l'ID per le opzioni di utilizzo massimo.
Per fare in modo che il nostro pulsante attivi l'uploader multimediale, dovremo legarci con un po 'di javascript.
jQuery (function (jQuery) jQuery ('. custom_upload_image_button'). click (function () formfield = jQuery (this) .siblings ('. custom_upload_image'); preview = jQuery (this) .siblings ('. custom_preview_image') ; tb_show (", 'media-upload.php? type = image & TB_iframe = true'); window.send_to_editor = function (html) imgurl = jQuery ('img', html) .attr ('src'); classes = jQuery ('img', html) .attr ('classe'); id = classes.replace (/(.*?) wp-image- /, "); formfield.val (id); preview.attr ('src' , imgurl); tb_remove (); restituisce false;); jQuery ('. custom_clear_image_button'). click (function () var defaultImage = jQuery (this) .parent (). siblings ('. custom_default_image'). text (); jQuery (this) .parent (). siblings ('. custom_upload_image'). val ("); jQuery (this) .parent (). siblings ('. custom_preview_image'). attr ('src', defaultImage) ; return false;););
Metti questi in un file js personalizzato e accodalo nei tuoi enqueues wrapper is_admin ().
wp_enqueue_script ('custom-js', get_template_directory_uri (). '/ js / custom-js.js');
La prima funzione trova il pulsante che creeremo presto con la classe di "custom_upload_image_button" "e preforma alcune cose diverse al clic.
La seconda funzione dice al link che classificheremo come "custom_clear_image_button" per cancellare sia il valore del campo modulo che resettare l'anteprima alla nostra immagine predefinita.
array ('name' => 'Image', 'desc' => 'Una descrizione per il campo.', 'id' => $ prefix.'image ',' type '=>' image ')
Abbiamo solo bisogno delle informazioni di base per questo campo.
// image case 'image': $ image = get_template_directory_uri (). '/ images / image.png'; eco ''$ Image.''; if ($ meta) $ image = wp_get_attachment_image_src ($ meta, 'medium'); $ image = $ image [0]; eco '
Rimuovi immagine
'$ Campo [ 'desc'].''; rompere;
Abbiamo alcune cose da fare qui, ma con il modo in cui abbiamo scritto il javascript, questo dovrebbe funzionare abbastanza bene, non importa quanti campi immagine aggiungi.
Quando inizi a utilizzare i meta campi personalizzati per archiviare vari tipi di dati per un post, alla fine ti imbatterai nella necessità di disporre di più istanze dello stesso campo. Usando un po 'di javascript, puoi facilmente duplicare un campo tutte le volte che ti serve, e persino ordinarlo con il drag and drop. Ci sono molti modi in cui possiamo usare questa funzionalità, ma per il nostro esempio utilizzeremo semplicemente un input di testo di base.
jQuery ('. repeatable-add'). click (function () field = jQuery (this) .closest ('td'). find ('. custom_repeatable li: last'). clone (true); fieldLocation = jQuery ( this) .closest ('td'). find ('. custom_repeatable li: last'); jQuery ('input', field) .val ("). attr ('name', function (index, name) nome di ritorno .replace (/ (\ d +) /, function (fullMatch, n) return Number (n) + 1;);) field.insertAfter (fieldLocation, jQuery (this) .closest ('td')) restituisce false ;); jQuery ('. repeatable-remove'). click (function () jQuery (this) .parent (). remove (); return false;); jQuery ('. custom_repeatable'). sortable ( opacità: 0.6, revert: true, cursor: 'move', handle: '.sort');
Puoi aggiungere questo javascript ai js personalizzati che hai già creato nell'ultimo passaggio.
La prima funzione cerca il pulsante aggiungi e aggiunge una nuova riga di campo vuota alla fine dell'elenco di campi. Questo è impostato in modo generico in modo da poter avere tanti di questi campi ripetibili di cui hai bisogno.
La prossima funzione dà a ciascun pulsante di rimozione la possibilità di rimuovere quella riga quando viene cliccato.
Infine, impostiamo gli elenchi su ordinabili e definiamo un handle in modo da poter trascinare e rilasciare le righe. Non è necessario accodare l'interazione ordinabile dell'interfaccia jQuery perché è già in uso nella pagina di modifica.
array ('label' => 'Ripetibile', 'desc' => 'Una descrizione per il campo.', 'id' => $ prefix.'repeatable ',' type '=>' ripetibile ')
Non c'è niente di speciale in questo campo nell'array per il nostro esempio. Tuttavia, potresti diventare piuttosto pazzo qui e aggiungere opzioni per quale tipo di campi sono usati nell'elenco ripetibile.
// caso ripetibile 'ripetibile': eco '+
Questo campo richiede un ciclo se c'è un valore meta salvato e nessun ciclo se non c'è.
.$ i
intero per assicurarsi che un nuovo numero venga aggiunto alla matrice del nome.Se hai seguito tutte e tre le parti di questa serie fino ad ora, la tua casella finale dovrebbe assomigliare a quella qui raffigurata:
In realtà, abbiamo solo scalfito la superficie di ciò che può essere fatto con questo metodo di creazione di un modello di meta box personalizzato riutilizzabile. Più si aggiunge al modello, più è facile trasferirlo in qualsiasi progetto a cui si sta lavorando per rendere più veloce la codifica e ottimizzare il processo con codice pulito e coerente.