Du borde vara bekant med anpassade fält i WordPress. Vi använder dem på ett inlägg eller en sida för att lägga till extra data. I WordPress sparas bilagor också som inlägg, så anpassade fält är tillgängliga för dem också.
Idag ser vi hur vi kan lägga till några anpassade fält så att bilagor kan ha mer information än bara standarddata.
Först och främst kommer vi att skapa ett plugin för att hantera de anpassade fälten för bilagor. Det kommer att få en uppsättning alternativ, baka dem så att de blir en del av formuläret när vi redigerar en bilaga och lagrar dem i databasen.
För detta kommer vi att använda två WordPress krokar:
attachment_fields_to_edit
att hantera redigeringsformuläretattachment_fields_to_save
för att spara de anpassade fältenJag kommer att skicka snabbt på den här delen eftersom det inte är huvudsyftet med denna handledning.
Skapa en ny mapp i plugin-katalogen (wp-content / plugins / media-fält / till exempel) och sätta en fil (namngiven plugin.php) inuti. Låt oss också sätta en fil som heter custom_media_fields.php som kommer att hålla våra alternativ.
Detta är vad din plugin.php filen ska se ut först:
/ * Plugin Name: Wptuts + Anpassade Mediafält Plugin URI: Beskrivning: Skapa bifogade anpassade fält Version: 0.1 Författare: Guillaume Voisin Författare URI: http://wp.tutsplus.com/author/guillaumevoisin Licens: GPL2 * / require_once (plugin_dir_path __FILE__). '/Custom_media_fields.php'); Klass Wptuts_Custom_Media_Fields private $ media_fields = array (); funktion __construct ($ fields) allmän funktion applyFilter ($ form_fields, $ post = null) funktion saveFields ($ post, $ attachment) $ cmf = nya Wptuts_Custom_Media_Fields ($ attchments_options);
Detta är basen som vi kommer att fylla i följande avsnitt. För nu, låt oss definiera vår uppsättning alternativ.
I den andra filen, låt oss lägga till några alternativ för att förbättra bilagans redigeringsformulär. Vi kommer att överväga, för denna handledning, alternativ att förbättra bilder. Till exempel lägger vi till upphovsrätts-, författarbeskrivningar, vattenstämpel, betygsättning och bildfält.
$ themename = "twentytwelve"; $ attchments_options = array ('image_copyright' => array ('label' => __ ('Bild upphovsrätt', $ themename), 'input' => 'text', 'helps' => __ ('Om din bild är skyddad av upphovsrätten ', $ themename),' application '=>' image ',' exclusions '=> array (' ljud ',' video '),' required '=> true,' error_text '=> __ krävs ', $ themename)),' image_author_desc '=> array (' label '=> __ (' Bildförfattningsbeskrivning ', $ themename),' input '=>' textarea ',' application '=>' image ' 'exclusions' => array ('ljud', 'video'),), 'image_watermark' => array ('label' => __ ('bild vattenstämpel', $ themename), 'input' => 'checkbox' 'image'stars' => array ('label' => __ ('Image rating', $ themename), ' input '=>' radio ',' options '=> array (' 0 '=> 0,' 1 '=> 1,' 2 '=> 2,' 3 '=> 3,' 4 '=> 4) , 'application' => 'bild', 'uteslutningar' => array ('ljud', 'video')), 'image_disposition' => array ('label' => __ spelling ', $ themename),' input '=>' välj ',' options '=> array (' portrait '=> __ (' portrtait ', $ themename),' landscape '=> __ themename)), 'application' => 'image', 'exclusions' => array ('ljud', 'video')));
Det är i grunden en associativ grupp som innehåller dessa parametrar:
märka
- Fältnamnet som kommer att visasinmatning
- ingångstypen (tex text, välj, radio, ...)hjälper
- information som hjälper användaren att fylla i fältetAnsökan
- vilken tilläggsmime-typ som ska tillämpasuteslutningar
- vilken bekräftelse mime typ att uteslutanödvändig
- är fältet nödvändigt? (standard falsk
)ERROR_TEXT
- valfritt fält för att beskriva felet (om det behövs är inställt på Sann
)alternativ
- valfritt fält för radio och valda typershow_in_modal
- om fältet ska visas i modal eller ej (standard Sann
)show_in_edit
- huruvida fältet ska visas i klassiskt redigeringsvy eller inte (standard Sann
)extra_rows
- ytterligare rader för att visa innehåll (inom samma "tr
"taggen)tr
- ytterligare rader ("tr
"taggen)De högljudda alternativen representerar alternativ som vi manuellt kommer att hantera medan andra är standard som WordPress kommer att behandla automatiskt.
När vi hanterar bilder ställer vi in Ansökan
parameter till "bild
". Det kommer faktiskt att gälla alla typer av bilder vars mime-typ börjar med"bild
" som image / jpeg
, image / png
och så vidare. Du kan utesluta gif
mime-typen genom att ställa in den i exkluderingsfältet till exempel.
Nu är våra alternativ inställda, låt oss gräva in i krokarna.
Som nämnts tidigare behandlar vi två krokar.
Vi binder våra två funktioner till de krokarna i konstruktormetoden.
funktion __construct ($ fält) $ this-> media_fields = $ fält; add_filter ('attachment_fields_to_edit', array ($ this, 'applyFilter'), 11, 2); add_filter ('attachment_fields_to_save', array ($ this, 'saveFields'), 11, 2);
Låt oss nu se dessa krokar i detalj.
attachment_fields_to_edit
Den har två parametrar:
$ form_fields
- En uppsättning fält som finns i bilagans redigeringsformulär$ post
- Objekt som representerar själva bilaganVi kommer att använda $ form_fields
parameter för att slå samman våra egna fält och kontrollera var och en av dem mot bifogningskrav (t.ex. mime-typ).
public function applyFilter ($ form_fields, $ post = null) // Om vårt fält array inte är tomt om (! tomt ($ this-> media_fields)) // Vi tittar på vår uppsättning alternativ föreach ($ this-> media_fields som $ field => $ värden) // Om fältet matchar den aktuella bilagans mime-typ // och inte är en av uteslutningarna om (preg_match ("/". $ values ['application']. "/", $ post-> post_mime_type) &&! in_array ($ post-> post_mime_type, $ values ['exclusions'])) // Vi får det redan sparade fältmeta-värdet $ meta = get_post_meta ($ post-> ID, '_'. $ fält, sant); // Definiera ingångstypen till "text" som standard $ värden ['input'] = 'text'; // Och ställ det till fältet innan du bygger det $ values ['value'] = $ meta; // Vi lägger till vårt fält i $ form_fields array $ form_fields [$ field] = $ värden; // Vi returnerar de färdiga $ form_fields array return $ form_fields;
I det här steget borde du ha ditt redigeringsformulär för bilagan förbättrad med de nya fälten vi har lagt till. Men de kommer att se ut som textingångar. Vi måste nu överväga olika typer av ingångar (radio, kryssruta, etc ...).
Så låt oss redigera vår funktion för att hantera detta. Ersätt $ värden ['input'] = 'text';
med följande kod:
växla ($ värden ['input']) standard: case 'text': $ values ['input'] = 'text'; ha sönder; case 'textarea': $ values ['input'] = 'textarea'; ha sönder; case 'select': // Välj typ existerar inte, så vi kommer att skapa html manuellt // För detta måste vi ange inmatningstypen till 'html' $ values ['input'] = 'html'; // Skapa väljelementet med rätt namn (matchar det som wordpress skapar för egna fält) $ html = ''; // Ange html-innehållet $ värden ['html'] = $ html; ha sönder; fallet "kryssrutan": // Typ av kryssrutan finns inte heller $ värden ['input'] = 'html'; // Ange kryssrutan markerad eller inte om ($ meta == 'på') $ checked = 'checked = "checked"'; annars $ checked = "; $ html = ' $ v) om ($ meta == $ k) $ checked = 'checked = "checked"'; annars $ checked = "; $ html. = '
'; $ I ++; $ värden ['html'] = $ html; ha sönder;
Nu kan vi bygga vanliga HTML-element. Låt oss kolla in vårt bifogade redigeringsformulär. Det borde se ut så här:
De anpassade fälten, beroende på om du ställer in sina modala alternativ till sant eller inte, kommer också att visas i medieformen när du redigerar ett inlägg.
Anpassade fält i modalNu visas våra fält i vår bilaga redigeringsform, vi måste spara dem i databasen. För detta ska vi använda den andra kroken.
attachment_fields_to_save
Denna krok har också två parametrar:
$ post
- array
vilket representerar den bifogade enheten$ fäste
- innehåller alla fält bifogade bilaganNu, låt oss fylla funktionen saveFields
vi lämnade i föregående avsnitt.
funktion saveFields ($ post, $ attachment) // Om vårt fält array inte är tomt om (! tomt ($ this-> media_fields)) // Browser dessa fält föreach ($ this-> media_fields som $ field => $ värden) // Om det här fältet har skickats in (finns i variabeln $ attachment) om (isset ($ attachment [$ field]) // Om inmatat fält är tomt // Vi lägger till fel i postobjektet med parametern "error_text" vi ställer in i alternativen om (strlen (trim ($ attachment [$ field]) == 0) $ post ['fel'] [$ fält] ['errors'] [] = __ värden ['error_text']); // Annars uppdaterar vi det anpassade fältet other update_post_meta ($ post ['ID'], '_'. $ Fält, $ attachment [$ field]); // Annars raderar vi den om den redan existerade delete_post_meta ($ post ['ID'], $ field); returnera $ post;
Ok, nu sparas våra anpassade fält i databasen och kommer att vara tillgängliga för fronten.
objekt
i den första och en array
i den andra.update_post_meta
kommer att skapa meta om den inte existerar._
"så att de inte kommer att listas i metaboxerna på anpassade fält på postredigeringssidor.Från version 3.5 verkar det som om fel fortfarande inte visas på bilagningsredigeringsformulär. Jag försökte undersöka kärnkoden, och trots att den borde ha blivit fixad (http://core.trac.wordpress.org/ticket/13810) verkar det inte.
För ajax spara processen är det säkert att det inte är gjort ännu som nämnts i ajax-actions.php
fil:
$ errors = $ post ['errors']; // @Todo returnera mig och visa mig!
Så just nu kommer fel inte att fungera ordentligt, men koden är klar så att när de buggar fixas, kommer det att fungera.
Om du vill använda de anpassade fälten i dina mallar behöver du bara hämta postmetas på samma sätt som du skulle för regelbundna inlägg. Glöm inte att lägga till "_
"prefix till de anpassade fälten" -tangenterna.
Du kan till exempel göra så här:
eko "
Det finns flera förbättringspunkter beroende på dina behov:
Tveka inte med att dela med dig av dina idéer om hur du förbättrar det här pluginet och vad du kan förvänta dig av sådan funktionalitet.