We zullen een plug-in bouwen om te kijken naar de beschikbare filters en hooks om de kolomkolommen van het beheerderspaneel te wijzigen. Voeg ze toe, verwijder ze en vul ze met inhoud.
Als ik denk aan de ontwikkeling van WordPress, zijn de meest voorkomende dingen die ik te binnen schiet de functionaliteit van het thema en de plug-in en de implementatie om een eenvoudig idee te laten werken en eruit te zien zoals jij dat wilt. Met een backend-pagina en enkele of veel instellingen hier en daar.
De flexibiliteit van WordPress API gaat veel verder dan wat u misschien al bekend was.
Voordat we iets gaan doen, moeten we begrijpen wat we gaan bereiken, wat ons uiteindelijke resultaat zal zijn. We gaan een plug-in bouwen die de postkolommen van het beheerderspaneel en hun inhoud gaat beheren. Om een plug-in te bouwen, hebben we een idee nodig dat aan onze behoeften voldoet. Dus voor deze zelfstudie gaat onze plug-in de functionaliteit van posts iets veranderen in een zeer eenvoudige prijs- en valuta-beheerinterface. Om nog specifieker te zijn, gaan we:
En dat is het, in een notendop, alles waar deze tutorial over gaat. Nogmaals, we hebben het over de implementatie hiervan in de beheerpagina's van het beheerderspaneel. Als onderdeel van het plan wordt geïmpliceerd dat je weet hoe een eenvoudige WordPress-plug-in wordt gemaakt en werkt, maar toch ga ik vermelden dat we een map gaan maken in de map met plug-ins van WordPress met de naam van producta en een bestand erin productA.php. Ik denk dat het nu voor de hand ligt dat onze plug-in een naam heeft Product A
, Ik denk dat dit een goede naam is voor een eenvoudige plug-in met de bovenstaande functies voor de doeleinden van deze tutorial.
Dit is een leuk eenvoudig onderdeel, het creëren van de eerste meest noodzakelijke onderdelen van de plug-in, namelijk de dingen die het identificeren aan WordPress als een plug-in en het bestand in volgorde uitvoert zodat onze plug-in goed werkt. Dus we gaan door en creëren onze Naam invoegen
, inpluggen Omschrijving
, Schrijver
naam en plugin Versie
header-waarden die bovenaan de broncode van het plug-in-bestand worden geplaatst, net als in het volgende voorbeeld:
Stap 3 Implementeren van vereiste acties en filters
Het eerste dat we gaan doen is de meta-box-functionaliteit toevoegen in onze plug-in. We willen een op maat gemaakte metabox toevoegen op onze pagina met bewerkingspagina's, ergens bovenaan de rechterzijbalk. Om dit te doen, moeten we een actie (of hook) maken waarvan we de functionaliteit wat later zullen verzorgen, maar laten we eerst zien hoe de haak in deze stap eerst wordt genoemd en geïmplementeerd:
De Meta Box Hook
functie pA_admin_init () add_meta_box ('pA_metaid', __ ('quantity / price', 'pA_textdomain'), 'pA_inner_custom_box', 'post', 'side', 'high'); add_action ('admin_init', 'pA_admin_init');Eerst voegen we een nieuwe actie onder aan ons bestand toe die we gaan gebruiken voor een eerste parameter, de actietag van
admin_init
om deze functie aan te roepen wanneer een gebruiker het beheerdersgedeelte opent. De tweede parameter is de callback-functienaam die moet worden geïmplementeerd wanneer de haak is geactiveerd. We gaan deze functie noemenpA_admin_init
en het lijkt op het bovenstaande.De
pA_admin_init
functie bevat de methode die de metabox creëert die we nodig hebben, gegenereerd door de functieadd_meta_box
met de volgende variabelen:
pA_metaid
- voor een unieke identificatie van de meta-box__ ('hoeveelheid / prijs', 'pA_textdomain')
- een tekenreeks die de titel van de metabox vertegenwoordigt'PA_inner_custom_box'
- de callback-functie'post'
- een tekenreeks die het berichttype vertegenwoordigt (omdat we bezig zijn met berichten, gaan we de tekenreekswaarde instellen op 'post
''kant'
- een tekenreeks die de schermpositie vertegenwoordigt van waar we onze metabox willen hebben, kunnen we gebruiken 'normaal
','gevorderd
'of'kant
'. Wij gebruiken 'kant
'zoals we willen dat het aan de rechterkant van onze inhoud wordt weergegeven'High'
- de positie tussen de andere metabox-elementen van de zijde van de pagina-inhoudDit zou zo ongeveer het zijn voor de eerste stap van de meta-box-actie.
Op een gegeven moment moeten de gegevens in de metabox worden opgeslagen. Om deze op te slaan, moeten we nog een haakje toevoegen aan de lijst, dit keer met een andere, specifieke tag als eerste parameter.
add_action ('save_post', 'pA_save_postdata');
Het bovenstaande voorbeeld implementeert de broodnodige haak. Zoals u kunt zien, is de tag-parameter die in dit geval wordt gebruikt save_post
om het punt te bereiken waarop het bericht wordt verzonden, worden alle formulierelementen naar PHP verzonden en in de database opgeslagen, zodat we onze gegevens precies kunnen opslaan wanneer het formulier wordt ingediend en WordPress het verwerkt. De callback-functie die al het werk doet, wordt genoemd pA_save_postdata
, we zullen deze functie iets later in de tutorial creëren wanneer we voor alle aspecten van de metabox zullen zorgen.
Omdat we proberen extra kolommen te maken in onze lijst met postpagina's, moeten we de rijen vullen met de gegevens van die nieuwe kolommen. Om dit te doen gebruiken we de volgende code:
add_action ('manage_posts_custom_column', 'pA_manage_posts_custom_column', 10, 2);
De gebruikte tag is manage_posts_custom_column
en de callback-functie pA_manage_posts_custom_column
, functie die we in enkele ogenblikken gaan bouwen.
Last but not least willen we enkele kolommen toevoegen en verwijderen uit de berichtenpaginalijst. Om dit te doen, moeten we de bestaande filteren en verwijderen of toevoegen zoals we dat wensen door een filter aan te roepen zoals in het volgende voorbeeld:
add_filter ('manage_posts_columns', 'pA_manage_posts_columns');
Het filter heeft, net als de acties, hoofdparameters die we gebruiken, één is de tag, in dit geval een string met de naam van 'Manage_posts_columns'
en een callback-functie, ook als een string maar met de naam van 'PA_manage_posts_columns'
. We bouwen en gebruiken deze functie in een van de volgende stappen.
Omdat we een metabox willen maken en we al de hooks en functies hebben ingesteld om een callback-methode te krijgen die deze genereert, moeten we de code ervoor schrijven.
Eerst gaan we kijken naar de pA_inner_custom_box
functie. Deze functie heeft zeer eenvoudige code die een formulier met gegevens genereert en beheert. Ten eerste zijn er 3 variabelen $ pA_price
, $ pA_quantity
, en $ pA_currency
om de waarden van onze 3 elementen die we willen invoegen in de metatag en berichtenlijst te bewaren. Om dit te doen, halen we ze uit de aangepaste velden waar we ze volgende gaan bewaren in de save_post
actie. Vervolgens maken we de HTML-formuliervelden die we gaan gebruiken om de gegevens te plaatsen wanneer het bericht wordt bijgewerkt of gepubliceerd, opnieuw met behulp van de save_post
callback-functie actie. Al deze code is hier volledig beschikbaar:
functie pA_inner_custom_box () global $ post; $ pA_price = get_post_meta ($ post-> ID, 'pA_price', true); $ pA_quantity = get_post_meta ($ post-> ID, 'pA_quantity', true); $ pA_currency = get_post_meta ($ post-> ID, 'pA_currency', true); ?>
| |
valuta: | type = "radio" name = "pA-currency" value = "USD" /> USD / type = "radio" name = "pA-currency" value = "GBP" /> GBP / type = "radio" name = "pA-currency" value = "EUR" /> EUR |
Nu, ten eerste, waarom gebruiken we aangepaste velden? Voor eenvoudig beheer en voor toekomstige gemakkelijk sorteren, filteren in de query voor berichten. Ten tweede gebruiken we twee tekstvakken voor elk van de prijs- en groottewaarden en keuzerondjes met USD-, GBP- en EURO-opties voor de valutawaarden. Elk van deze formulierelementen krijgt de waarden van de variabelen die we eerder hebben gevuld met waarden uit specifieke aangepaste velden.
Dat is het voor dit deel, wanneer de gebruiker een bericht bijwerkt of publiceert, worden deze waarden verzonden naar de volgende callback-functie van onze zelfstudie.
Het tweede en zeer cruciale onderdeel van de metabox-functionaliteit is het opslaan van de gegevens die we indienen. Aan het begin van de tutorial hebben we een functie geïmplementeerd die de post-ingediende gegevens beheert. Nu gaan we kijken hoe de callback-functie werkt.
Ten eerste omdat we een manier nodig hebben om de post te identificeren, moeten we de globale variabele opnemen $ bericht
om de ID-waarde van de momenteel ingezonden post te krijgen. Vervolgens zullen we controleren of een verborgen variabele die we hebben gemaakt als een formulierelement al dan niet is ingediend. Als dit is ingediend, halen we de waarden van aangepaste velden uit de database op voor elk element waarin we zijn geïnteresseerd: prijs, hoeveelheid en valuta. We zullen de gebruiken get_post_meta
functie om de aangepaste veldmetasleutelwaarden te verkrijgen met behulp van de $ Post-> ID
variabele waarde als een identifier en de meta key-naam waarin we geïnteresseerd zijn. We hebben deze waarden nodig om de vorige waarde-parameter in ons volgende stuk code in te stellen van deze functie die de data-update afhandelt.
De gegevens worden opgeslagen als aangepaste velden onder een specifieke metakey-naam pA_quantity
voor kwantiteit, pA_price
voor prijs en pAcurrency
voor valutawaarden. De nieuwe gegevens worden geëxtraheerd uit de $ _POST
variabele die ingezonden gegevens bevat.
function pA_save_postdata () global $ post; if ($ _POST ['pA-hidd'] == 'true') $ pA_price = get_post_meta ($ post-> ID, 'pA_price', true); $ pA_quantity = get_post_meta ($ post-> ID, 'pA_quantity', true); $ pA_currency = get_post_meta ($ post-> ID, 'pA_currency', true); update_post_meta ($ post-> ID, 'pA_quantity', $ _POST ['pA-quantity'], $ pA_quantity); update_post_meta ($ post-> ID, 'pA_price', $ _POST ['pA-prijs'], $ pA_price); update_post_meta ($ post-> ID, 'pA_currency', $ _POST ['pA-currency'], $ pA_currency);
Hiermee is de metabox-implementatie in onze plug-in voltooid.
Eindelijk hebben we het grootste deel van deze tutorial bereikt, nou ja, op zijn minst een van de hoofdonderdelen. Ik zeg de hoofdonderdelen omdat dit volgende ding is waar de tutorial over gaat, maar het kan niet functioneren zonder alle andere delen die eerder zijn gedaan. We gaan nu kijken hoe u nieuwe berichtkolommen kunt verwijderen en toevoegen aan de berichtenpagina in het beheerdersdashboard.
Omdat we extra waarden hebben die speciaal aan de post zijn toegevoegd, zoals prijs, valuta en aantal, willen we in dit deel extra kolommen op de berichtenpagina met deze namen en de bijbehorende waarden. Laten we de zaken een beetje op orde brengen, ten eerste willen we de auteur, tags en opmerkingen uit de kolommen verwijderen. Voor het doel van deze tutorial willen we leren hoe dit te doen en we hebben die kolommen niet nodig, omdat we ons als de posts-pagina behandelt een product met dingen als prijs en hoeveelheid.
functie pA_manage_posts_columns ($ columns) global $ wp_query; niet ingesteld ($ kolommen ['auteur'], $ kolommen ['tags'], $ kolommen ['reacties']); $ totaal = 0; foreach ($ wp_query-> berichten als $ post) $ total + = get_post_meta ($ post-> ID, 'pA_price', true) * get_post_meta ($ post-> ID, 'pA_quantity', true); $ columns = array_merge ($ columns, array ('price' => __ ('price'), 'currency' => __ ('currency'), 'quantity' => __ ('quantity'), 'featured_image' => __ ('Afbeelding'), 'totaal' => __ ('Totaal:'. $ Totaal))); return $ kolommen;
Ziet er eenvoudig genoeg uit, toch? Ik praat natuurlijk over de bovenstaande callback-functie voor de manage_posts_columns
filtertag die het beheer van postkolommen afhandelt, net zoals de naam zegt. Er zijn maar een paar regels code, maar dit deel is eigenlijk ingewikkelder dan welk ander deel dan ook in deze tutorial (en die delen zijn niet zo moeilijk, dus deze moet ook niet zo moeilijk te begrijpen zijn).
Ten eerste heeft de callback-functie van het eerder genoemde filter een parameter die alle kolommen erin bevat als een array. We stellen deze parameter onder de naam in $ columns
zodat we het in enkele ogenblikken kunnen gebruiken. Vervolgens moeten we een globale variabele integreren in de functie, namelijk $ wp_query
. We gaan dit ook binnenkort gebruiken.
Sinds de $ columns
parameter is een ordening die alle kolommen van de berichtenpagina bevat, alles wat we in dit geval moeten doen is de arrayparameters verwijderen die we willen. Om dit te doen, gebruiken we gewoon de ongezet
PHP-functie en we scheiden de arraynamen die we willen verwijderen met komma's. Gemakkelijk.
Omdat we prijs en hoeveelheid gebruiken als waarden waarmee we dynamisch werken, willen we een totaal van die waarden maken in een speciale extra rij die we in een moment zullen toevoegen. Om dit te berekenen, moeten we de waarden van alle prijzen en hoeveelheden van elk bericht extraheren, vermenigvuldigen en de resultaten optellen. Het resultaat is een totaal van alle artikelwaarden van berichten, vermenigvuldigd met hun aantal. De som hiervan willen we plaatsen in de titel van de kolom wanneer we de kolom toevoegen aan het volgende deel. Dus we halen de waarden van de aangepaste velden voor prijs en hoeveelheid van elk bericht op met behulp van de get_post_meta
functie, en maak een totaal met een verhoogd $ totale
variabel. Om de loop te maken met onze vereiste gegevens, zullen we de geïntegreerde gebruiken $ wp_query
globale variabele.
Om kolommen toe te voegen, gebruiken we de aanpak die we hebben gebruikt om ze alleen op een andere manier te verwijderen, namelijk niet de ongezet
functie voor verwijderen maar de array_merge
PHP-functie voor het toevoegen van de nieuwe kolommen. De kolommen worden als arrays in deze volgorde en onder deze namen toegevoegd: prijs, valuta, hoeveelheid, aanbevolen afbeelding en totaal.
Het enige wat nu nog te doen is, is het $ columns
variabele en de callback-functie doet zijn magie. Het eindresultaat is iets dat ervoor moet zorgen dat de pagina met de titels van de head table er als volgt uitziet:
De laatste stap van deze zelfstudie gaat over de aangepaste kolomwaarden. Nadat we de kolommen eerder hebben gemaakt, moeten we de waarden van die prijzen, valuta enzovoort laten zien. In de berichtenlijst moeten we de bijbehorende waarden van de aangepaste waarden correct aan de lijst toevoegen. Om dit te doen gaan we een eerder geïmplementeerde hook gebruiken die de callback-functie heeft met de naam van pA_manage_posts_custom_column
. De functie heeft twee parameters, een kolomparameter met het naamplaatje van de kolom waarin we ons bevinden, gebruikt door ons om te identificeren waar we zijn, en de post-ID als een tweede parameter.
Eerst hebben we een schakelvoorwaarde nodig om de $ kolom
variabele voor welk type bericht we zijn. Natuurlijk zijn we alleen geïnteresseerd in onze op maat gemaakte kolommen, dus we plaatsen de cases alleen voor die waarden.
Deze drie kolomtypen die we hebben gemaakt, hebben een gemeenschappelijk gegevenstype metatags, een eenvoudige tekenreeks die een aangepaste kolom is die we kunnen krijgen door de get_post_meta
functie met de juiste variabelen, preciezer $ post_id
voor het identificeren van de post, meta-sleutel voor het identificeren van het aangepaste veld en een Booleaanse variabele ingesteld op true voor het verkrijgen van de gegevens als een geëchood string of als een array.
Er is een extra kolom die we hebben toegevoegd en die een beetje anders is en die voorheen niet echt werd genoemd. Ik heb het over de featured_image
kolom die de HTML-tag van de gekenmerkte afbeelding laat zien vanaf het bericht in de rij van het huidige bericht. Om de afgebeelde afbeelding te krijgen, gebruiken we de get_post_thumbnail
functioneer met de post-ID als een identifier en een maatreeks.
Een laatste kolomwaarde is het totaal. Het totaal van elke post wordt berekend door de aangepaste velden te extraheren met dezelfde methode als hiervoor (get_post_meta
functie) van prijs en hoeveelheid en vermenigvuldigen. Het totaal is het resultaat waarnaar we op zoek zijn.
functie pA_manage_posts_custom_column ($ column, $ post_id) switch ($ column) case 'price': $ pA_val = get_post_meta ($ post_id, 'pA_price', true); breken; case 'currency': $ pA_val = get_post_meta ($ post_id, 'pA_currency', true); breken; case 'quantity': $ pA_val = get_post_meta ($ post_id, 'pA_quantity', true); breken; case 'featured_image': if (has_post_thumbnail ()) $ pA_val = get_the_post_thumbnail ($ post_id, 'thumbnail'); breken; case 'total': $ pA_price = get_post_meta ($ post_id, 'pA_price', true); $ pA_quantity = get_post_meta ($ post_id, 'pA_quantity', true); $ pA_val = $ pA_price * $ pA_quantity; breken;
Het bovenstaande voorbeeld is de manier waarop de functie die we eerder hebben besproken, moet worden geïmplementeerd om correct te werken. U kunt de bovenstaande code controleren om dit gedeelte van de zelfstudie te begrijpen. Als een visueel resultaat kreeg de Hallo World-post een paar waarden voor prijs, valuta en hoeveelheid en werd een willekeurig printscherm geüpload als een uitgelichte afbeelding. Met onze plug-in geïnstalleerd ziet de admin pagina van de berichten er als volgt uit:
WordPress wordt steeds krachtiger en flexibeler met veel nieuwe functies en mogelijkheden die we niet alleen hadden, maar we beseffen misschien niet eens hoe nuttig ze zijn. Deze zelfstudie heeft als doel u te helpen begrijpen hoe u kolommen gemakkelijk kunt beheren voor berichten in het beheerdersgedeelte. Je kunt ervoor kiezen om deze informatie te gebruiken zoals je wilt voor elk project dat je zou kunnen bedenken dat het nuttig zou maken. Denk aan de mogelijkheden die u kunt creëren met deze eenvoudige stappen!
Wat zijn enkele andere onderschatte WordPress-functies waarvan je denkt dat mensen deze vaak over het hoofd zien? Laat het ons weten in de comments!