Ar trebui să fiți familiarizați cu câmpurile personalizate din WordPress. Le folosim într-o postare sau într-o pagină pentru a adăuga date suplimentare. În WordPress, atașamentele sunt, de asemenea, salvate ca postări, astfel încât și câmpurile personalizate sunt disponibile pentru ele.
Astăzi vom vedea cum putem adăuga câteva câmpuri personalizate, astfel încât atașamentele să poată purta mai multe informații decât doar datele implicite.
Mai întâi de toate, vom crea un plugin pentru a gestiona câmpurile personalizate ale atașamentelor. Acesta va primi un set de opțiuni, le va coace, astfel încât acestea să devină parte a formularului atunci când vom edita un atașament și le vom salva în baza de date.
Pentru aceasta, vom folosi două cârlige WordPress:
attachment_fields_to_edit
pentru a gestiona formularul de editareattachment_fields_to_save
pentru a salva câmpurile personalizateVoi trece repede în această parte deoarece nu este scopul principal al acestui tutorial.
Creați un folder nou în directorul de pluginuri (wp-content / plugins / media-domenii / de exemplu) și a pus un fișier (numit plugin.php) interior. Să punem, de asemenea, un fișier numit custom_media_fields.php care ne vor păstra opțiunile.
Asta e ceea ce ai plugin.php fișierul ar trebui să arate ca la început:
/ * Nume Plugin: Wptuts + Custom Media Fields Plugin URI: Descriere: Creare câmpuri atașate personalizate Versiune: 0.1 Autor: Guillaume Voisin Autor URI: http://wp.tutsplus.com/author/guillaumevoisin Licență: GPL2 * / require_once (plugin_dir_path __FILE__). '/ Custom_media_fields.php'); Clasa Wptuts_Custom_Media_Fields private $ media_fields = array (); funcția __construct ($ fields) funcția publică applyFilter ($ form_fields, $ post = null) funcția saveFields ($ post, $ attachment) $ cmf = noi Wptuts_Custom_Media_Fields ($ attchments_options);
Aceasta este baza pe care o vom ocupa în următoarele secțiuni. Pentru moment, să definim setul nostru de opțiuni.
În celălalt fișier, să adăugăm câteva opțiuni pentru îmbunătățirea formularului de editare a atașamentului. Vom lua în considerare, pentru acest tutorial, opțiuni de îmbunătățire a imaginilor. De exemplu, vom adăuga câmpurile privind drepturile de autor, descrierea autorului, filigranul, evaluarea și imaginea.
$ numele = "twentytwelve"; $ attchments_options = array ('image_copyright' => array ('etichetă' => __ (' ("audio", "video"), "obligatoriu" => true, "error_text" => __ ("Drept de autor", $ themename) , "image_author_desc" => array ('label' => __ ('descrierea autorului imaginii', $ themename) 'excluderi' => array ('audio', 'video'), 'image_watermark' => array ('label' => __ ('Watermark'; 'image' => 'imagine', 'excluderi' => array ('audio', 'video')), 'image_stars' => array de intrare '=>' radio ',' opțiuni '=> array (' 0 '=> 0,' 1 '=> 1, , 'application' => 'image', 'excludions' => array ('audio', 'video')), 'image_disposition' => array ('portret' => __ ('portratait', 'themename'), 'peisaj' => __ ('peisaj', numele ")," aplicație "=>" imagine "," excluderi "=> array (" audio "," video ")));
Este în esență o matrice asociativă care conține acești parametri:
eticheta
- numele câmpului care va fi afișatintrare
- tipul de intrare (de exemplu, text, selectați, radio, ...)ajută
- informații pentru a ajuta utilizatorul să completeze câmpulcerere
- care tip mime attchment să se apliceexcluderi
- care tip de mime atribuire pentru a excludenecesar
- este domeniul necesar? (Mod implicit fals
)ERROR_TEXT
- câmp opțional pentru a descrie eroarea (dacă este necesar este setată la Adevărat
)Opțiuni
- câmp opțional pentru radio și selectați tipurishow_in_modal
- dacă doriți să afișați câmpul în modal sau nu (implicit Adevărat
)show_in_edit
- dacă doriți să afișați câmpul în vizualizarea clasică de editare sau nu (implicit Adevărat
)extra_rows
- rânduri suplimentare pentru afișarea conținutului (în cadrul aceluiași "tr
" etichetă)tr
- rânduri suplimentare ("tr
" etichetă)Opțiunile cu luminozitate ridicată reprezintă opțiuni pe care le vom rezolva manual, în timp ce altele sunt cele implicite WordPress va procesa automat.
Pe măsură ce avem de-a face cu imagini, setăm cerere
parametru pentru a "imagine
"Se va aplica de fapt tuturor tipurilor de imagini al căror tip de mime începe cu"imagine
" precum image / jpeg
, image / png
si asa mai departe. Ai putea exclude gif
tip mime prin setarea în câmpul de excluderi, de exemplu.
Acum, opțiunile noastre sunt stabilite, să săpăm în cârlige.
Așa cum am menționat mai devreme, vom aborda două cârlige.
Legăm cele două funcții ale acestor cârlige în metoda constructorului.
funcția __construct (câmpuri $) $ this-> media_fields = $ fields; add_filter ('attachment_fields_to_edit', array ($ this, 'applyFilter'), 11, 2); add_filter ('attachment_fields_to_save', array ($ this, 'saveFields'), 11, 2);
Acum, să vedem aceste cârlige în detaliu.
attachment_fields_to_edit
Are doi parametri:
$ form_fields
- O serie de câmpuri conținute în formularul de modificare a fișierului atașat$ postare
- Obiect care reprezintă atașamentul în sineVom folosi $ form_fields
parametru pentru a fuziona propriile câmpuri și a verifica fiecare dintre ele împotriva cerințelor atașamentului (de exemplu, tipul de mime).
functie publica applyFilter ($ form_fields, $ post = null) // Daca campurile noastre nu sunt goale daca (! empty ($ this-> media_fields)) // Răsfoim setul de opțiuni foreach ($ this-> media_fields ca $ field => $ values) // Dacă câmpul se potrivește cu atașamentul curent tip mime // și nu este unul dintre excluderile if (preg_match ("/". $ values ['application'] "/", $ ($ post-> post_mime_type) &&! in_array ($ post-> post_mime_type, $ values ['excludes'])) // Avem valoarea meta de câmp deja salvată $ meta = get_post_meta ($ post-> ID, '_'. $ field, true); // Definiți tipul de intrare la 'text' în mod implicit $ values ['input'] = 'text'; // și setați-l la câmp înainte de al construi $ values ['value'] = $ meta; // Adăugăm câmpul nostru în câmpul $ form_fields $ form_fields [$ field] = $ valori; // Returăm returnarea matricei $ form_fields completate $ form_fields;
La acest pas, trebuie să aveți formatul de editare a atașamentului îmbunătățit cu noile câmpuri pe care le-am adăugat. Dar ele vor arata ca intrarile de text. Acum trebuie să luăm în considerare diferite tipuri de intrări (radio, casetă de selectare etc.).
Deci, să ne editați funcția pentru a face față acestei situații. Inlocuieste $ valori ['input'] = 'text';
cu următorul cod:
comutator ($ valori ['input']) implicit: caz 'text': $ values ['input'] = 'text'; pauză; cazul 'textarea': $ values ['input'] = 'textarea'; pauză; caz selectați: // Selectează tipul nu există, așa că vom crea html manual // Pentru aceasta, trebuie să setăm tipul de intrare în 'html' $ values ['input'] = 'html'; // Creați elementul de selectare cu numele corect (se potrivește cu cel creat de wordpress pentru câmpurile personalizate) $ html = '„; // Setați conținutul html $ values ['html'] = $ html; pauză; caseta "case": // Tipul căsuței de validare nu există nici $ valori ['input'] = 'html'; // Setați caseta de selectare bifată sau nu dacă ($ meta == 'on') $ checked = 'checked =' checked ''; altfel $ checked = "; $ html = '
„; $ I ++; valori $ ['html'] = $ html; pauză;
Acum, putem construi elemente HTML comune. Să verificăm formularul de modificare a atasamentului. Ar trebui să arate exact așa:
Câmpurile personalizate, în funcție de alegerea opțiunilor modale la adevărat sau nu, vor apărea și în forma modală media atunci când editați o postare.
Câmpuri personalizate în modalAcum câmpurile noastre sunt afișate în formularul de editare a atasamentelor, trebuie să le salvăm în baza de date. Pentru aceasta, vom folosi al doilea cârlig.
attachment_fields_to_save
Acest cârlig are de asemenea doi parametri:
$ postare
- mulțime
care reprezintă entitatea de atașamentatașament $
- conține toate câmpurile atașate postului de atașamentAcum, să umplem funcția saveFields
am plecat în secțiunea anterioară.
($ this-> media_fields)) // Browser acele câmpuri foreach ($ this-> media_fields ca $ field => $ ($ this => media_fields) valori) // Dacă acest câmp a fost trimis (este prezent în variabila atașament $) dacă (isset ($ attachment [$ field])) // Dacă câmpul trimis este gol // Adăugăm erori la obiectul post cu parametrul "error_text" pe care l-am setat în opțiuni dacă (strlen (trim ($ attachment [$ field])) == 0 $ post ['errors'] [$ field] valori ['error_text']); // În caz contrar actualizăm alt câmp personalizat update_post_meta ($ post ['ID'], '_'. $ Field, $ attachment [$ field]); // În caz contrar, îl ștergem dacă există deja altceva delete_post_meta ($ post ['ID'], câmp $); returnați $ post;
Ok, acum câmpurile noastre personalizate sunt salvate în baza de date și vor fi disponibile pentru front-end.
obiect
în primul și an mulțime
în cel de-al doilea.update_post_meta
va crea meta dacă nu există._
"astfel încât să nu fie afișate în metaboxurile câmpurilor personalizate din paginile de editare postate.Încă de la versiunea 3.5, se pare că erorile încă nu apar în formularele de modificare a fișierelor atașate. Am încercat să investighez codul de bază și, în ciuda faptului că ar fi trebuit să fie fixat (http://core.trac.wordpress.org/ticket/13810), nu pare.
Pentru procesul de salvare ajax, este sigur că nu sa făcut încă așa cum se menționează în ajax-actions.php
fişier:
$ eroare = $ post ['erori']; // @todo mă întoarce și mă afișează!
Deci, chiar acum, erorile nu vor funcționa corect, dar codul se face astfel încât atunci când aceste bug-uri sunt fixe, va funcționa.
Pentru a utiliza acele câmpuri personalizate în șabloanele dvs., trebuie doar să preluați metazele postărilor la fel ca și pentru postările obișnuite. Nu uitați să adăugați mesajul "_
"prefixul tastelor câmpurilor personalizate".
De exemplu, ați putea face acest lucru:
ecou "
Există câteva puncte de îmbunătățire în funcție de nevoile dvs.:
Nu ezitați să vă împărtășiți ideile dvs. despre cum să îmbunătățiți acest plugin și ce vă așteptați de la o astfel de funcție.