In deel 1 en deel 2 van onze zelfstudieseries met meta-boxsjablonen hebben we geleerd hoe u een veldarray maakt om door te lussen en een aangepaste metabox maakt met uw standaardvelden. Laten we nu een beetje JavaScript toevoegen voor een paar mooie, maar zeer nuttige velden.
Elk van de velden die we in deze tutorial behandelen, vereist jQuery en de gebruikersinterface van jQuery. Gelukkig maakt WordPress het super eenvoudig om deze mee te gebruiken wp_enqueue_script
, en vanaf 3.3 worden alle interacties en widgets van jQuery UI gebundeld met WordPress.
Omdat we werken aan een pagina die al jQuery in wachtrij plaatst, kunnen we dit overslaan, maar we zullen de jQuery UI Datepicker wel nodig hebben. We moeten ook ons eigen stylesheet maken, omdat de benodigde CSS nog niet in WordPress is gebundeld, hoewel ze dat wel doen.
if (is_admin ()) wp_enqueue_script ('jquery-ui-datepicker'); wp_enqueue_style ('jquery-ui-custom', get_template_directory_uri (). '/ css / jquery-ui-custom.css');
We hoeven deze alleen in de admin te laden, en niet aan de voorkant van de site, dus wikkel de functies in een voorwaardelijke. De eerste functie roept de datepicker aan en laadt ook de jQuery UI Core. De tweede functie roept ons jQuery-ui-custom.css-stylesheet uit de css-map van het thema. Voor het voorbeeld van de stylesheet in de download aan het begin van deze zelfstudie zijn geen afbeeldingen vereist. U kunt ook uw eigen jQuery UI-thema maken.
Laten we nu kijken naar het array-item dat we aan ons moeten toevoegen $ custom_meta_fields
array die we in Deel 1 zijn gestart.
array ('label' => 'Date', 'desc' => 'Een beschrijving voor het veld', 'id' => $ prefix.'date ',' type '=>' date ')
Deze array is bijna identiek aan ons tekstitem. Het heeft een hoofdlabel, een beschrijving, een uniek ID en het datumtype is gedefinieerd. We gaan hier in ons voorbeeld gewoon een basisimplementatie van de datumkiezer gebruiken, maar als u uw gebruik van de datumkiezer wilt verbeteren, kunt u ook andere informatie aan de array toevoegen, zoals het gewenste formaat, lokalisatie en datumbereik om er een paar te noemen. Dan zou je die informatie kunnen gebruiken in de volgende scriptbeller die we aan de kop van de pagina moeten toevoegen:
add_action (admin_head ',' add_custom_scripts); function add_custom_scripts () global $ custom_meta_fields, $ post; $ output = ''Dit bit moet buiten de. Worden toegevoegd
$ custom_meta_fields
array en buiten deshow_custom_meta_box
callback-functie om de datumkiezer te initialiseren op alle velden met de klasse van "datepicker".// datum zaak 'datum': echo '
'$ Veld [ 'desc'].''; breken;Deze code wordt na de laatste "pauze" toegevoegd in onze metabox-switch.
Soms moet je een nummer verzamelen dat is ingesteld op een exact bereik of een veelvoud van 5. De jQuery UI-schuifregelaar is hiervoor ideaal omdat je het gemakkelijk kunt slepen en schuiven naar het nummer dat je wilt invoeren.
wp_enqueue_script ( 'jquery-ui-slider');
Zorg ervoor dat u het js-bestand belt door dit toe te voegen aan uw is_admin () ingepakte rijbewijzen.
array ('label' => 'Schuifregelaar', 'desc' => 'Een beschrijving voor het veld', 'id' => $ prefix.'slider ',' type '=>' schuifregelaar ',' min '= > '0', 'max' => '100', 'stap' => '5')
Nogmaals, we voegen dit toe aan onze $ custom_meta_fields
array en er zijn een paar speciale toevoegingen.
if ($ field ['type'] == 'slider') $ value = get_post_meta ($ post-> ID, $ field ['id'], true); if ($ value == ") $ value = $ field ['min']; $ output. = 'jQuery (" #'. $ field ['id'] .'- slider ") .slider (value: ' . $ value. ', min:'. $ field ['min']. ', max:'. $ field ['max']. ', step:'. $ field ['step']. ', slide: function (event, ui) jQuery ("# '. $ field [' id '].'") .val (ui.value);); ';
Voeg dit stukje code toe aan de lus in de add_custom_scripts
functie die we hebben gemaakt in het laatste veldtype. Hiermee wordt het aangepaste jQuery toegevoegd dat we nodig hebben voor het instellen van de schuifregelaar.
// slider case 'slider': $ value = $ meta! = "? $ meta: '0'; echo '
'$ Veld [ 'desc'].''; breken;
Nogmaals, we gebruiken alleen een tekstveld om de waarde van de schuifregelaar te ontvangen.
Sinds de introductie van Post-miniaturen, is het instellen van een afbeelding met een aangepast metaveld niet iets dat we veel doen, maar elke keer dat er een moment komt dat je een andere afbeelding dan de miniatuur van de post moet instellen, vooral wanneer je een plug-in die er rekening mee houdt dat het thema van de gebruiker mogelijk geen ondersteuning biedt voor het plaatsen van thumbnails.
Dit veld voegt de mogelijkheid toe om een afbeelding te uploaden of een afbeelding te selecteren bij het uploaden van de media, een voorbeeld van de afbeelding weer te geven en de ID op te slaan voor maximale gebruiksmogelijkheden.
Als u onze knop wilt activeren om de media-uploader te activeren, moeten we hier een javascript voor gebruiken.
jQuery (functie (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 ('class'); id = classes.replace (/(.*?) wp-image- /, "); formfield.val (id); preview.attr ('src' , imgurl); tb_remove (); return false;); jQuery ('. custom_clear_image_button'). klik (functie () var defaultImage = jQuery (this) .parent (). siblings ('. custom_default_image'). tekst (); jQuery (this) .parent (). siblings ('. custom_upload_image'). val ("); jQuery (this) .parent (). siblings ('. custom_preview_image'). attr ('src', defaultImage) ; return false;););
Plaats deze in een aangepast js-bestand en plaats het in je in wachtrijen geplaatste is_admin ().
wp_enqueue_script ('custom-js', get_template_directory_uri (). '/ js / custom-js.js');
De eerste functie vindt de knop die we binnenkort gaan maken met de klasse "custom_upload_image_button" "en maakt een paar verschillende dingen op klik voor.
De tweede functie vertelt de link die we classificeren als "custom_clear_image_button" om zowel de waarde van het formulierveld te wissen als de preview te resetten naar onze standaard afbeelding.
array ('naam' => 'Afbeelding', 'desc' => 'Een beschrijving voor het veld', 'id' => $ prefix.'image ',' type '=>' afbeelding ')
We hebben alleen de basisinformatie voor dit veld nodig.
// image case 'image': $ image = get_template_directory_uri (). '/ images / image.png'; echo ''$ Imago.''; if ($ meta) $ image = wp_get_attachment_image_src ($ meta, 'medium'); $ afbeelding = $ afbeelding [0]; echo '
Verwijder afbeelding
'$ Veld [ 'desc'].''; breken;
We hebben hier een paar dingen aan de hand, maar met de manier waarop we het javascript hebben geschreven, zou dit vrij goed moeten werken, ongeacht hoeveel beeldvelden je toevoegt.
Wanneer u echt gebruik gaat maken van aangepaste metavelden om verschillende soorten gegevens voor een bericht op te slaan, zult u uiteindelijk tegenkomen dat meerdere instanties van hetzelfde veld nodig zijn. Met behulp van een beetje javascript kunt u eenvoudig een veld zo vaak dupliceren als u nodig hebt en zelfs sorteren met slepen en neerzetten. Er zijn veel manieren waarop we deze functionaliteit kunnen gebruiken, maar voor ons voorbeeld gebruiken we gewoon een basistekstinvoer.
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 ('naam', functie (index, naam) naam teruggeven .replace (/ (\ d +) /, functie (fullMatch, n) return Number (n) + 1;);) field.insertAfter (fieldLocation, jQuery (this) .closest ('td')) return false ;); jQuery ('. repeatable-remove'). click (function () jQuery (this) .parent (). remove (); return false;); jQuery ('. custom_repeatable'). sortable ( opacity: 0.6, revert: true, cursor: 'move', handle: '.sort');
U kunt dit javascript toevoegen aan de aangepaste js die u al in de laatste stap hebt gemaakt.
De eerste functie zoekt naar de knop Toevoegen en voegt een nieuwe lege veldrij toe aan het einde van de lijst met velden. Dit is generiek opgezet, zodat u zoveel van deze herhaalbare velden kunt hebben als u nodig heeft.
De volgende functie geeft elke verwijderknop de mogelijkheid om die rij te verwijderen wanneer erop wordt geklikt.
Ten slotte stellen we de lijsten in om te sorteren en definiëren we een handle zodat u de rijen kunt slepen en neerzetten. Het is niet nodig om de sorteerbare interactie van jQuery UI in wachtrij te plaatsen, omdat deze al wordt gebruikt op de bewerkingspagina.
array ('label' => 'Herhaalbaar', 'desc' => 'Een beschrijving voor het veld.', 'id' => $ prefix.'repeatable ',' type '=>' herhaalbaar ')
Er is niets bijzonders aan dit veld in de array voor ons voorbeeld. U kunt hier echter behoorlijk gek worden en opties toevoegen voor wat voor soort velden in de herhaalbare lijst worden gebruikt.
// herhaalbaar geval 'herhaalbaar': echo '+
Dit veld vereist een lus als er een metawaarde is opgeslagen en geen lus als dat niet het geval is.
.$ i
integer om ervoor te zorgen dat een nieuw nummer aan de naamarray wordt toegevoegd.Als je tot nu toe alle drie de delen van deze serie hebt gevolgd, zou je laatste doos eruit moeten zien als de hier afgebeelde:
We hebben echt alleen het oppervlak bekrast van wat er kan worden gedaan met deze methode voor het bouwen van een herbruikbare aangepaste metabox-sjabloon. Hoe meer u aan uw sjabloon toevoegt, hoe eenvoudiger het is om het neer te zetten in het project waaraan u werkt, om de tijd die u aan codering besteedt sneller te maken en om het proces te stroomlijnen met schone, consistente code.