În Partea 1 și Partea 2 din seria noastră de instrucțiuni pentru șabloanele personalizate, am învățat cum să creăm un câmp de câmpuri care să treacă prin buclă și să creeze o casetă de metade personalizată cu câmpurile standard. Acum, hai sa aruncam un pic de JavaScript pentru unele domenii fanteziste, dar extrem de utile.
Fiecare dintre câmpurile pe care le acoperim în acest tutorial va necesita jQuery și jQuery UI. Din fericire, WordPress o face extrem de ușor să le folosească wp_enqueue_script
, și începând cu 3.3, toate interacțiunile și widget-urile jQuery UI sunt asociate cu WordPress.
Deoarece lucrăm la o pagină care deja enumeră jQuery, putem să o ignorăm, dar va trebui să luăm jQuery UI Datepicker. De asemenea, va trebui să creați o foaie de stil proprie, deoarece CSS-ul necesar nu vine încă în WordPress - deși ei lucrează că.
dacă este_admin ()) wp_enqueue_script ('jquery-ui-datepicker'); wp_enqueue_style ('jquery-ui-personalizat', get_template_directory_uri (). '/ css / jquery-ui-custom.css');
Trebuie doar să le încărcăm în admin și nu pe partea frontală a site-ului, astfel încât să înfășurăm funcțiile într-o condiție. Prima funcție cheamă datepicker și va încărca și jQuery UI Core. A doua funcție va numi foaia de stil jquery-ui-custom.css din dosarul css al temei. Foaia de stiluri de exemplu inclusă în descărcare de la începutul acestui tutorial nu necesită imagini. De asemenea, vă puteți crea propria temă de interfață jQuery.
Acum, să ne uităm la elementul de matrice pe care trebuie să-l adăugăm $ custom_meta_fields
am inceput in partea 1.
array ('label' => 'Date', 'desc' => 'O descriere a câmpului', 'id' => $ prefix.'date ',' type '=>' date ')
Această matrice este aproape identică cu elementul nostru de text. Are o etichetă principală, o descriere, un id unic și tipul de dată este definit. Vom merge doar cu o implementare de bază a selectorului de date în exemplul nostru aici, dar dacă trebuie să vă păstrați gradul de utilizare a selectorului de date, puteți adăuga și alte informații în matrice, cum ar fi formatul preferat, localizarea , și intervalul de date pentru a numi câteva. Apoi, puteți utiliza acele informații în următorul apelant de script pe care trebuie să-l adăugăm la capul paginii:
ADD_ACTION ( 'admin_head', 'add_custom_scripts'); funcția add_custom_scripts () global $ custom_meta_fields, $ post; $ output = ''Acest bit trebuie adăugat în afara
$ custom_meta_fields
și în exteriorshow_custom_meta_box
funcția de apel invers pentru a inițializa selectorul de date pentru toate câmpurile cu clasa "datepicker".// date date 'date': echo '
'$ Câmpul [ 'desc'].'„; pauză;Acest cod va fi adăugat după ultima "pauză;" în comutatorul nostru de meta-box.
Uneori trebuie să colectați un număr care este setat la un interval exact sau trebuie să fie multipli de 5. Glisorul jQuery UI este grozav pentru acest lucru deoarece ușurează mutarea și glisarea la numărul pe care doriți să-l introduceți.
wp_enqueue_script ( 'jquery-ui-slider');
Asigurați-vă că apelați fișierul js adăugând acest lucru la is_admin () enqueues wrapped.
array ('label' => 'Slider', 'desc' => 'O descriere pentru câmp.', 'id' => > '0', 'max' => '100', 'pas' => '5')
Din nou, adăugăm asta la adresa noastră $ custom_meta_fields
matrice și există câteva adăugiri speciale.
dacă $ field ['type'] == 'slider') $ value = get_post_meta ($ post-> ID, câmp $ ['id'], true); dacă $ value == ") $ value = $ field ['min']; $ output; = 'jQuery (" # ". $ field [' id ' . $ '[' max '].', pas: '. $ field [' step '].', slide: funcția (eveniment, ui) jQuery ("#". $ field ['id']. ") .val (ui.value);); ';
Adăugați acest bit de cod la bucla din add_custom_scripts
funcția pe care am creat-o în ultimul tip de câmp. Aceasta va adăuga jQuery personalizat de care avem nevoie pentru setarea cursorului.
// slider case slider: $ value = $ meta! = "? $ meta: '0'; echo '
'$ Câmpul [ 'desc'].'„; pauză;
Din nou, folosim doar un câmp de text pentru a primi valoarea cursorului.
De la introducerea Post Thumbnails, setarea unei imagini cu un câmp meta personalizat nu este ceva ce facem foarte mult, dar de fiecare dată când vine vorba de o vreme când trebuie să setați o altă imagine decât miniatură post, plugin care ia în considerare faptul că tema utilizatorului ar putea să nu accepte miniaturi postate.
Acest câmp va adăuga capacitatea de a încărca o imagine sau de a selecta unul din încărcarea suportului media, va afișa o previzualizare a imaginii și va salva ID-ul pentru opțiunile de utilizare maxime.
Pentru a obține butonul nostru pentru a declanșa încărcarea de conținut media, va trebui să le legăm cu un pic de javascript.
jQuery (funcția (jQuery) jQuery ('. custom_upload_image_button') faceți clic pe (funcția () formfield = jQuery (this) .siblings ('custom_upload_image'); ; tb_show ("," media-upload.php? type = image & TB_iframe = true "); window.send_to_editor = function (html) imgurl = jQuery ('img', html) ('img', html) .attr ('class'); id = classes.replace (/(.*?) wp-image- /, ") , imgurl); tb_remove (); return false;); jQuery ('. custom_clear_image_button') faceți clic pe (funcția () var defaultImage = jQuery (this) ('. custom_preview_image'). attr ('src', implicitImage). () .parent () ; return false;););
Puneți-le într-un fișier js js personalizat și enqueue-l în is_admin () enqueues wrapped.
wp_enqueue_script ('custom-js', get_template_directory_uri (). / js / custom-js.js ');
Prima funcție găsește butonul pe care o vom crea curând cu clasa "custom_upload_image_button" "și preformează câteva lucruri diferite pe clic.
A doua funcție spune legătura pe care o vom clasifica ca "custom_clear_image_button" pentru a șterge atât valoarea câmpului formularului, cât și pentru a reseta imaginea la imaginea prestabilită.
array ('name' => 'Image', 'desc' => 'O descriere a câmpului', 'id' => $ prefix.'image ',' type '=>' image ')
Avem nevoie doar de informațiile de bază pentru acest domeniu.
// imagine 'imagine': $ image = get_template_directory_uri (). '/ images / image.png'; echo "'$ Imagine.'„; dacă ($ meta) $ image = wp_get_attachment_image_src ($ meta, 'mediu'); $ imagine = $ imagine [0]; echo '
Eliminați imaginea
'$ Câmpul [ 'desc'].'„; pauză;
Avem câteva lucruri care se întâmplă aici, dar cu modul în care am scris javascriptul, ar trebui să funcționeze destul de bine, indiferent de câmpurile de imagine pe care le adăugați.
Când intrați într-adevăr în utilizarea câmpurilor meta personalizate pentru a stoca diferite tipuri de date pentru o postare, veți ajunge în cele din urmă în necesitatea de a avea mai multe instanțe din același câmp. Folosind un pic de javascript, puteți să copiați cu ușurință un câmp de câte ori aveți nevoie și chiar să le sortați cu drag și drop. Există o mulțime de moduri în care putem folosi această funcție, dar pentru exemplul nostru vom folosi doar o intrare de bază a textului.
jQuery ('. repeatable-add') faceți clic pe (funcția () field = jQuery (this) .closest (' ("nume", funcție (index, nume)) return (nume) ()) return () () () () () () () ; () jQuery ('.priorit_repeatable'). () jQuery (' opacitate: 0,6, revert: true, cursor: 'muta', mâner: '.sort');
Puteți adăuga acest javascript la java personalizat pe care l-ați creat deja în ultima etapă.
Prima funcție caută butonul de adăugare și adaugă un nou câmp de câmp gol la sfârșitul listei de câmpuri. Acest lucru este setat generic, astfel încât să puteți avea cât mai multe dintre aceste câmpuri repetabile de care aveți nevoie.
Următoarea funcție oferă fiecărui buton de ștergere posibilitatea de a elimina acel rând când acesta este apăsat.
În cele din urmă, am setat listele pentru a fi grupate și pentru a defini un mâner, astfel încât să puteți glisa și fixa rândurile. Nu este nevoie să înlăturați interacțiunea jQuery UI, deoarece este deja utilizată în pagina de postări de editare.
array ('label' => 'Repetabil', 'desc' => 'O descriere a câmpului.', 'id' => $ prefix.'repeatable ',' type '=>' repeatable ')
Nu există nimic special în acest câmp în matrice pentru exemplul nostru. Cu toate acestea, ați putea obține destul de nebun aici și adăugați opțiuni pentru ce fel de câmpuri sunt utilizate în lista repetabilă.
// caz repetabil "repetabil": echo '+
Acest câmp necesită o buclă dacă există o valoare meta salvată și nici o buclă dacă nu există.
.$ i
întreg pentru a vă asigura că un număr nou este adăugat la matricea de nume.Dacă ați urmat împreună cu toate cele trei părți ale acestei serii până acum, cutia dvs. finală ar trebui să arate ca cea prezentată aici:
De fapt, am zgâriat doar suprafața a ceea ce se poate face cu această metodă de construire a unui șablon de meta box personalizat. Cu cât adăugați mai mult în șablonul dvs., cu atât este mai ușor să renunțați la proiectul pe care lucrați pentru a face timpul să cheltuiți mai rapid codificarea și să simplificați procesul cu un cod curat și consistent.