Lägg till en anpassad vy på skärmen Alla inlägg
TL;DR: Jag kommer att arbeta på en serie som tittar på hur man uppnår en användbar uppgift med taxonomier, troliga kategorier, och sedan omstrukturera den till ett objektorienterat plugin som kommer att fungera som ett verktygsplugin för taxonomier, i allmänhet .
En kort historik över OOP-inlägg
För en tid sedan gjorde jag en lång serie om principerna för objektorienterad programmering (och försökte dela en anständig mängd om hur man uppnår vissa saker inom WordPress-sammanhang).
Jag har också skrivit ett gäng artiklar om hela paradigmet genom åren för de som är intresserade av att komma ikapp några av dessa artiklar.
Och jag skulle vara försumlig om jag inte berättade att en god vän till mig bokstavligen har skrivit en bok om ämnet också.
Och därför, eftersom jag har funderat på olika ämnen att skriva om (efter att ha tagit en visserligen längre ledighet än jag planerat), tänkte att det kan vara värt att prata om praktiska saker vi kan göra med vanliga API:er och krokar och sedan refaktorera det till en typ av verktygsplugin.
Lägg till en anpassad vy
För det arbete jag ska dela med mig av i den här demon använder jag följande:
- Lokalt med svänghjul med en
https://sandbox.localdomän - TablePlus för databasåtkomst
- Visual Studio Code som min IDE
- Och WDS PHP-kodningsstandarder för all PHP som du kommer att se.
Om du vill följa med vad jag har på gång, använd allt ovanstående (jag vet inte om jag kommer att dela allt men om du ser skärmdumpar och kodsnuttar så vet du var det kommer ifrån ).
Med det, här är en kort utvikning viewsi WordPress (och det är inte som Views i betydelsen MVC eller MVVM ).
WordPress-vyer
När detta skrivs verkar det inte finnas ett tydligt, kortfattat uttalande om vad en WordPress-vy är. När det gäller den tillgängliga kroken har vi views_edit-post.
Så om vi tar just den kroken och vad den gör, kanske något sådant här skulle räcka:
En WordPress-vy är en sida där vi kan se alla inlägg som överensstämmer med en uppsättning specificerade kriterier.
Utanför lådan inkluderar detta kriterium vanligtvis inlägg som:
- Publicerad,
- utkast,
- Skräp,
- Schemalagd,
- Och så vidare.
Men vad händer om du har ett annat inlägg som har några andra kriterier som du vill filtrera efter? Visst, du kan filtrera efter rullgardinsmenyn som finns på skärmen (säg efter kategori), och det är bra, men vad händer om du vill använda ett anpassat kriterium för [någon given anledning]?
Till exempel, vad händer om du inte vill behöva klicka dig igenom ett visst element, sedan filtrera och sedan se inläggen? Istället vill du se en länk till kriterierna, antalet inlägg som passar kriterierna och sedan filtrera efter dem?
Det är här möjligheten att redigera vyer kommer in i bilden.
Och för detta inläggs syften kommer jag att täcka hur man introducerar ett nytt ankare högst upp på sidan som kommer att lista ut antalet inlägg för en viss kategori.
Vad är vår syn?
I det här fallet kommer vi att använda Uncategorized eftersom en standardinstallation redan har ett okategoriserat inlägg tillgängligt och vi kan enkelt justera vissa ändringar kring detta.
För att göra detta kommer vi att skriva en mu-pluginså att den kommer att placeras i mu-pluginskatalogen. Om din installation inte har en, lägg till katalogen och lägg sedan add-custom-view.phptill i katalogen:
Därifrån kan den ursprungliga plugin-filen se ut ungefär så här:
Till en början gör vi följande:
- Ange ett namnutrymme,
- Lägga till ett filter,
- Ställ sedan in funktionen som kommer att acceptera standarduppsättningen av
$viewsoch returnera arrayen av$viewsefter att de har ändrats.
Så vad behöver vi göra härifrån?
Uppsättningen krav
För att uppnå det vi vill måste vi kunna:
- Ange namnet på kategorin,
- Lägg till länken till kategorin tillsammans med antalet inlägg med den kategorin till listan över visningar,
- Möjligheten att avgöra om vi är på kategorisidan för att utforma listan korrekt
- Möjligheten att filtrera efter inläggstyp,
- Och ett sätt att testa det.
Allt ovanstående kommer att täckas i kod senare i artikeln men det femte steget kräver att du manuellt skapar en kategori så att vi enkelt kan testa om resten av koden fungerar.
Så fortsätt och gör det. Kategorien kan heta vad som helst (jag använde Sample Category). När det är klart, låt oss skriva kod från resten av plugin-programmet.
Bestäm vår syn
Först ska jag dela en funktion som kommer att avgöra vilken sida vi är på och som kommer att göra en av två saker:
- Om vi är på en sida som har samma frågesträngsparameter för ID:t för vår kategori, kommer jag att ange ett klassnamn; annars returnerar vi en tom sträng.
För att göra detta bör funktionen:
- Acceptera ett kategorinamn,
- Initiera en variabel för attribut,
- Jämför frågesträngsvariablerna
- Bestäm om kategorinamnet och kategori-ID är samma,
- Och returnera rätt värde, om inte.
Så här ser min funktion ut:
Detta skulle också kunna förenklas med en ternär operator, men för att hålla den så läsbar som möjligt låter jag den vara som den är tills vidare.
Bestäm kategorinamnet
Denna speciella funktion är faktiskt väldigt enkel och även om vi är vana vid att ta emot input från användare i mycket av det vi gör, kommer vi att hårdkoda detta värde.
För att göra detta kommer vi helt enkelt att lagra detta i en variabel som skickas genom resten av koden.
Du såg variabeln som tidigare skickats in i ovanstående funktion och kommer att se denna användas i den slutliga versionen av källkoden också.
Hämta resultat av inlägg med kategorin
För detta måste vi göra två saker:
- Hämta alla
object_idposter som har ID för denna kategori, - Filtrera bort innehållet som inte är för dessa inlägg.
Det finns ett par saker jag vill nämna här: Först kommer vi att använda get_cat_IDfunktionen som WordPress tillhandahåller. Detta hämtar kategorins ID baserat på det inkommande namnet.
För det andra använder jag två funktioner – varav en är en loop – för att undersöka poststatusen för ett element. Detta är inte det mest effektiva sättet att göra detta. Istället skulle vi kunna använda en mer elegant fråga för att bara hämta inlägg; Men den första upprepningen av detta är tänkt att visa hur man inte bara gör detta från grunden, utan också för en publik som kanske inte är lika bekväm med andra aspekter av att skriva kod.
Med det, här är hur vi får alla poster i WordPress som är markerade som Okategoriserade.
Och med det tar vi resultaten och skickar dem till den här funktionen som kommer att returnera antalet element som bara är inlägg.
Med det har vi det mesta vi behöver för att börja sätta ihop vårt utsiktsankare.
Skapa ett vyankare
Nu när vi har alla funktioner som behövs för att generera ett vyankare måste vi sätta ihop dem i stället för sprintfför säker strängformatering.
Målet är att skapa ett ankare som:
- Ser ut som resten av ankarna,
- Visar antalet inlägg,
- Är fet när du tittar på nämnda inlägg.
För att göra detta måste vi bygga länken och lägga till de korrekta frågesträngsargumenten. Det betyder att vi skapar en länk till edit.phpmed argument för:
- kategorins ID,
- inläggets typ av inlägg,
- och alla inlägg som har denna kategori.
Därefter måste vi inkludera:
- några attribut för att utforma länken,
- namnet på kategorin,
- och bara innehållet i inlägget
post_type.
För att göra detta kan vi använda följande funktion:
Detta gör flera saker:
- Accepterar standarduppsättningen
$viewsfrån WordPress, - Lägger till vårt anpassade ankare som beskrivs ovan,
- Trycker in den i
$viewsarrayen, - Returnerar den till WordPress för att rendera.
Och det är allt!
Testar den
För att testa detta, ladda upp din webbläsare och du bör se en ny Okategoriserad länk bredvid resten av ankarna som Alla, Publicerade, Mina, Papperskorgen, Schemalagda, etc.
Efter det ändrar du en inläggskategori och tar bort Okategoriserade och besöker sedan eller uppdaterar sidan Alla inlägg så ser du att länken är aktiv och utformad, beroende på hur du ser den, och den inkluderar antalet inlägg som är kategoriserade som sådan också.
Nu till GitHub
Jag har laddat den första iterationen av denna plugin till GitHub så att du kan ladda ner den och placera den i din mu-pluginskatalog för testning.
I kommande inlägg skulle jag vilja börja med att ändra detta till ett objektorienterat paradigm så det är de ändringar som kommer till plugin och innehållet som kommer i framtida inlägg.






