U moet bekend zijn met aangepaste velden in WordPress. We gebruiken ze op een post of een pagina om extra gegevens toe te voegen. In WordPress worden bijlagen ook als berichten opgeslagen, dus ook aangepaste velden zijn beschikbaar voor deze berichten.
Vandaag zullen we zien hoe we enkele aangepaste velden kunnen toevoegen, zodat bijlagen meer informatie kunnen bevatten dan alleen de standaardgegevens.
Allereerst gaan we een plug-in maken om de aangepaste velden van de bijlagen af te handelen. Het krijgt een reeks opties, bak ze zodat ze deel gaan uitmaken van het formulier wanneer we een bijlage bewerken en opslaan in de database.
Hiervoor gebruiken we twee WordPress-hooks:
attachment_fields_to_edit
om het bewerkingsformulier af te handelenattachment_fields_to_save
om de aangepaste velden op te slaanIk zal dit deel snel doorgeven omdat het niet het hoofddoel van deze tutorial is.
Maak een nieuwe map in de map met plug-ins (wp-content / plugins / media-velden / bijvoorbeeld) en zet een bestand (genaamd plugin.php) binnen. Laten we ook een bestand met de naam custom_media_fields.php die onze opties zal houden.
Dit is wat jouw plugin.php bestand moet er in het begin uitzien:
/ * Plugin Naam: Wptuts + Aangepaste media velden Plugin URI: Beschrijving: Maak bijlagen aangepaste velden Versie: 0.1 Auteur: Guillaume Voisin Auteur URI: http://wp.tutsplus.com/author/guillaumevoisin Licentie: GPL2 * / require_once (plugin_dir_path ( __FILE__). '/Custom_media_fields.php'); Klasse Wptuts_Custom_Media_Fields private $ media_fields = array (); functie __construct ($ velden) openbare functie applyFilter ($ form_fields, $ post = null) functie saveFields ($ post, $ bijlage) $ cmf = nieuw Wptuts_Custom_Media_Fields ($ attchments_options);
Dit is de basis die we in de volgende secties invullen. Laten we voorlopig onze reeks opties definiëren.
Laten we in het andere bestand enkele opties toevoegen om het formulier voor het bewerken van bijlagen te verbeteren. We zullen voor deze tutorial overwegen om de afbeeldingen te verbeteren. We voegen bijvoorbeeld de velden auteursrecht, auteur, watermerk, beoordeling en afbeeldingsplaatsing toe.
$ themename = "twentytwelve"; $ attchments_options = array ('image_copyright' => array ('label' => __ ('Image copyright', $ themename), 'input' => 'text', 'helps' => __ ('Als je afbeelding is beveiligd by copyrights ', $ themename),' application '=>' image ',' exclusions '=> array (' audio ',' video '),' required '=> true,' error_text '=> __ (' Auteursrechtveld vereist ', $ themename)),' image_author_desc '=> array (' label '=> __ (' Afbeelding auteur ', $ themename),' input '=>' textarea ',' application '=>' image ', 'exclusions' => array ('audio', 'video'),), 'image_watermark' => array ('label' => __ ('Image watermark', $ themename), 'input' => 'checkbox', 'toepassing' => 'afbeelding', 'uitsluitingen' => array ('audio', 'video')), 'image_stars' => array ('label' => __ ('Afbeeldingwaardering', $ themename), ' invoer '=>' radio ',' options '=> array (' 0 '=> 0,' 1 '=> 1,' 2 '=> 2,' 3 '=> 3,' 4 '=> 4) , 'application' => 'image', 'exclusions' => array ('audio', 'video')), 'image_disposition' => array ('label' => __ ('Afbeelding di sposition ', $ themename),' input '=>' select ',' options '=> array (' portrait '=> __ (' portrtait ', $ themename),' landscape '=> __ (' landscape ', $ themename)), 'application' => 'image', 'exclusions' => array ('audio', 'video')));
Het is in feite een associatieve array die deze parameters bevat:
label
- de veldnaam die wordt weergegeveninvoer
- het invoertype (bijvoorbeeld tekst, select, radio, ...)helpt
- informatie om de gebruiker te helpen bij het invullen van het veldtoepassing
- welk tafereel mime-type toepastuitsluitingen
- welk tafereel mime-type uit te sluitenverplicht
- is het veld vereist? (standaard vals
)error_text
- optioneel veld om de fout te beschrijven (indien nodig is ingesteld op waar
)opties
- optioneel veld voor radio- en selectietypenshow_in_modal
- of het veld in modaal moet worden getoond of niet (standaard waar
)show_in_edit
- of het veld getoond moet worden in de klassieke bewerkingsweergave of niet (standaard waar
)extra_rows
- extra rijen om inhoud weer te geven (binnen dezelfde "tr
" label)tr
- extra rijen ("tr
" label)De highlitghted-opties vertegenwoordigen opties waarmee we handmatig omgaan, terwijl andere opties standaard zijn en WordPress automatisch zal verwerken.
Omdat we te maken hebben met afbeeldingen, hebben we de toepassing
parameter naar "beeld
". Het zal eigenlijk van toepassing zijn op alle soorten afbeeldingen waarvan het mime-type begint met"beeld
" zoals image / jpeg
, image / png
enzovoorts. Je zou het kunnen uitsluiten gif
mime-type door deze bijvoorbeeld in het uitsluitingsveld in te stellen.
Nu zijn onze opties ingesteld, laten we in de haken graven.
Zoals eerder vermeld, zullen we twee haken behandelen.
We binden onze twee functies aan die haken in de constructormethode.
function __construct ($ fields) $ this-> media_fields = $ velden; add_filter ('attachment_fields_to_edit', array ($ this, 'applyFilter'), 11, 2); add_filter ('attachment_fields_to_save', array ($ this, 'saveFields'), 11, 2);
Laten we nu die haken in detail bekijken.
attachment_fields_to_edit
Het heeft twee parameters:
$ form_fields
- Een reeks velden in het formulier voor het bewerken van bijlagen$ bericht
- Object dat de bijlage zelf vertegenwoordigtWe zullen de gebruiken $ form_fields
parameter om onze eigen velden samen te voegen en elk ervan te controleren aan de hand van bijlage-eisen (mime-type bijvoorbeeld).
openbare functie applyFilter ($ form_fields, $ post = null) // Als onze veldenarray niet leeg is (! empty ($ this-> media_fields)) // We bladeren door onze set met opties voor elk ($ this-> media_fields als $ field => $ values) // Als het veld overeenkomt met de huidige bijlage mime type // en niet een van de uitzonderingen is als (preg_match ("/". $ values ['application']. "/", $ post-> post_mime_type) &&! in_array ($ post-> post_mime_type, $ values ['exclusions'])) // We krijgen de al opgeslagen meta-waarde van het veld $ meta = get_post_meta ($ post-> ID, '_'. $ field, true); // Definieer het invoertype standaard in 'tekst' $ values ['input'] = 'text'; // En stel het in op het veld voordat u het bouwt $ values ['value'] = $ meta; // We voegen ons veld toe aan de $ form_fields array $ form_fields [$ field] = $ values; // We retourneren de voltooide $ form_fields array return $ form_fields;
Bij deze stap moet uw bewerkingsformulier voor bijlagen worden uitgebreid met de nieuwe velden die we hebben toegevoegd. Maar ze zien eruit als tekstinvoer. We moeten nu verschillende soorten inputs overwegen (radio, checkbox, enz ...).
Dus laten we onze functie bewerken om hiermee om te gaan. Vervang de $ values ['input'] = 'text';
met de volgende code:
switch ($ values ['input']) default: case 'text': $ values ['input'] = 'text'; breken; case 'textarea': $ values ['input'] = 'textarea'; breken; case 'select': // Select type bestaat niet, dus we zullen de html handmatig aanmaken // Hiervoor moeten we het invoertype instellen op 'html' $ values ['input'] = 'html'; // Maak het select element met de juiste naam (komt overeen met degene die wordpress creëert voor aangepaste velden) $ html = ''; // Stel de html-inhoud $ waarden ['html'] = $ html; breken; case 'checkbox': // Checkbox type bestaat niet $ waarden ['input'] = 'html'; // Schakel het selectievakje in of niet ($ meta == 'on') $ checked = 'checked = "checked"'; else $ checked = "; $ html = ''; $ values ['html'] = $ html; break; case 'radio': // radiotype bestaat niet $ values ['input'] = 'html'; $ html =" ; if (! empty ($ values ['options'])) $ i = 0; foreach ($ values ['options'] als $ k => $ v) if ($ meta == $ k) $ checked = 'checked = "checked"'; else $ checked = "; $ html. = '
'; $ I ++; $ waarden ['html'] = $ html; breken;
Nu kunnen we veelgebruikte HTML-elementen bouwen. Laten we eens kijken naar ons formulier voor het bewerken van bijlagen. Het zou er precies zo uit moeten zien:
De aangepaste velden, afhankelijk van of u hun modale opties hebt ingesteld op true of niet, worden ook weergegeven in het media-modale formulier wanneer u een bericht bewerkt.
Aangepaste velden in modaalNu worden onze velden weergegeven in ons formulier voor het bewerken van bijlagen, we moeten ze opslaan in de database. Hiervoor gaan we de tweede haak gebruiken.
attachment_fields_to_save
Deze haak heeft ook twee parameters:
$ bericht
- rangschikking
die de bijlage-entiteit vertegenwoordigt$ attachment
- bevat alle velden die zijn gekoppeld aan de bijlageLaten we nu de functie vullen saveFields
we vertrokken in het vorige gedeelte.
function saveFields ($ post, $ bijlage) // Als onze veldenarray niet leeg is (! empty ($ this-> media_fields)) // Browser die velden voor elke ($ this-> media_velden als $ field => $ waarden) // Als dit veld is ingediend (aanwezig in de $ bijlage-variabele) if (isset ($ bijlage [$ -veld])) // Als het verzonden veld leeg is // We voegen fouten toe aan het berichtobject met de parameter "error_text" die we in de opties if hebben ingesteld (strlen (trim ($ attachment [$ field])) == 0) $ post ['errors'] [$ field] ['errors'] [] = __ ($ waarden ['error_text']); // Anders updaten we het aangepaste veld anders update_post_meta ($ post ['ID'], '_'. $ Field, $ attachment [$ field]); // Anders verwijderen we het als het al anders bestond delete_post_meta ($ post ['ID'], $ field); return $ post;
OK, nu worden onze aangepaste velden opgeslagen in de database en zijn ze beschikbaar voor de front-end.
voorwerp
in de eerste en een rangschikking
in de tweede.update_post_meta
maakt de meta als deze niet bestaat._
"zodat ze niet worden vermeld in de metaboxen voor aangepaste velden op pagina's voor het bewerken van berichten.Vanaf versie 3.5 lijkt het erop dat fouten nog steeds niet verschijnen op bijgevoegde attachment-formulieren. Ik heb geprobeerd de kerncode te onderzoeken, en ondanks het feit dat het gecorrigeerd had moeten zijn (http://core.trac.wordpress.org/ticket/13810), lijkt het niet.
Voor het ajax-opslagproces is het zeker dat het nog niet klaar is zoals vermeld in de ajax-actions.php
het dossier:
$ errors = $ post ['errors']; // @todo retourneert me en geeft mij weer!
Dus op dit moment gaan fouten niet goed, maar de code is klaar, zodat wanneer die bugs verholpen zijn, het zal werken.
Als u deze aangepaste velden in uw sjablonen wilt gebruiken, moet u post-metas op dezelfde manier ophalen als voor gewone berichten. Vergeet niet om de "_
"voorvoegsel aan de aangepaste velden" -toetsen.
Je zou bijvoorbeeld zo kunnen doen:
echo "
Er zijn verschillende verbeterpunten afhankelijk van uw behoeften:
Aarzel niet om uw ideeën over het verbeteren van deze plug-in met ons te delen en wat u van dergelijke functionaliteit zou verwachten.