Utilizzo delle funzioni al posto dei globali: get_post_field
Poiché PHP ha continuato ad andare avanti e WordPress (e la sua economia degli sviluppatori) lavora per iniziare a utilizzare più delle funzionalità più moderne, una delle cose che vediamo ancora accadere è l’uso dei globali all’interno di WordPress.
In una certa misura, è inevitabile: parti significative dell’applicazione sono state create utilizzando globali quando quella era la funzione che era una caratteristica principale; altre parti, tuttavia, sono andate avanti fornendo classi o funzioni che ci impediscono di doverlo fare.
Caso in questione: get_post_fieldè una solida alternativa all’utilizzo del $postglobale che fornisce gran parte delle stesse informazioni in un modo leggermente più moderno (e probabilmente più sicuro) di leggere i dati.
Per molti, usare qualcosa come il seguente è una pratica comune:
<?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;
}
Non è raro vedere qualcosa di simile get_the_title(get_the_ID());in tutto il codice, il che è positivo, ma ci sono ancora momenti in cui vediamo codice scritto che accede ad alcuni aspetti del post corrente.
E mi chiedo quanto sia davvero necessaria quella pratica per la get_post_fieldfunzione. Dal codice di riferimento:
Recupera i dati da un campo post in base all’ID post.
Esempi del campo post saranno ‘post_type’, ‘post_status’, ‘post_content’, ecc. e basati sulla proprietà dell’oggetto post o sui nomi delle chiavi.
Un esempio simile a questa funzione sarebbe la get_user_byfunzione in cui si passa una stringa specifica alla funzione per la quale si desidera recuperare informazioni, nonché un ID (o l’oggetto post completo, ma quando l’ID è sufficiente, perché no?).
La differenza qui è che recupererai il valore del campo richiesto o una stringa vuota (piuttosto che un errore o null o false) quando la richiesta non riesce. Ciò significa che dovremmo scrivere una clausola condizionale o di guardia per gestire un caso del genere.
Quindi un caso d’uso completo di questa funzione e del codice potrebbe richiedere un paio di funzioni :
<?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());
}
Tutto ciò può essere legato insieme in questo modo:
<?php
if (hasPostSlug()) {
echo getPostSlug();
}
Lo scopo della condivisione di questo tipo di codice è aiutare a condividere alcune delle alternative che abbiamo alle variabili globali per condividere anche le API esistenti ma che potrebbero essere sottoutilizzate.
