Använda funktioner i stället för globaler: get_post_field
Eftersom PHP har fortsatt att gå framåt och WordPress (och dess utvecklarekonomi) arbetar för att börja använda fler av de mer moderna funktionerna, är en av de saker vi fortfarande ser hända användningen av globala inom WordPress.
Till viss del är det oundvikligt: Betydande delar av applikationen byggdes med hjälp av globals när det var den anläggning som var en primär funktion; andra delar har dock gått framåt genom att tillhandahålla klasser eller funktioner som hindrar oss från att behöva göra det.
Exempel: get_post_fieldär ett gediget alternativ till att använda det $postglobala som ger mycket av samma information på ett lite modernare (och utan tvekan säkrare) sätt att läsa data.
För många är det vanligt att använda något i stil med följande :
<?php
/**
* Retrieves the slug for the current post via the current post's
* post_name property.
*
* @return string the slug of the post.
*/
function getPostSlug(): string
{
global $post;
return $post->post_name;
}
Det är inte ovanligt att se något som get_the_title(get_the_ID());genomgående kod, vilket är bra, men det finns fortfarande tillfällen då vi ser kod skriven som kommer åt vissa aspekter av det aktuella inlägget.
Och jag ifrågasätter hur nödvändig den praktiken egentligen ges get_post_fieldfunktionen. Från kodreferensen:
Hämta data från ett inläggsfält baserat på inläggs-ID.
Exempel på postfältet kommer att vara ’post_type’, ’post_status’, ’post_content’, etc och baserat på postobjektegenskapen eller nyckelnamn.
Ett liknande exempel på den här funktionen skulle vara get_user_byfunktionen där du skickar en specifik sträng till funktionen som du vill hämta information om samt ett ID (eller hela postobjektet, men när ID:t räcker, varför inte?).
Skillnaden här är att du kommer att hämta värdet på det begärda fältet eller en tom sträng (snarare än ett fel eller null eller falskt) när begäran misslyckas. Det betyder att vi skulle behöva skriva en villkorlig eller en skyddsklausul för att hantera ett sådant fall.
Så en fullständig användning av denna funktion och koden kan kräva ett par funktioner :
<?php
/**
* Generates a boolean value based on the presence of a post slug.
*
* @return bool True if there is a slug; otherwise, false.
*/
function hasPostSlug(): bool
{
return ('' === getPostSlug());
}
/**
* Retrieves the slug for the current post via the get_post_field
* API function.
*
* @return string the slug of the post.
*/
function getPostSlug(): string
{
return get_post_field('post_name', get_the_ID());
}
Det hela kan kopplas ihop så här:
<?php
if (hasPostSlug()) {
echo getPostSlug();
}
Poängen med att dela den här typen av kod är att hjälpa till att dela några av de alternativ vi har till globala variabler för att också dela API:er som finns men som kan vara underutnyttjade.
