Uso de funciones en lugar de globales: get_post_field
A medida que PHP ha seguido avanzando y WordPress (y su economía de desarrolladores) trabaja para comenzar a usar más funciones modernas, una de las cosas que todavía vemos que sucede es el uso de globales dentro de WordPress.
Hasta cierto punto, es inevitable: partes significativas de la aplicación se construyeron usando globales cuando esa era la característica principal; sin embargo, otras partes han avanzado al proporcionar clases o funciones que evitan que tengamos que hacer eso.
Caso en cuestión: get_post_fieldes una alternativa sólida al uso de $postglobal que proporciona gran parte de la misma información en una forma un poco más moderna (y posiblemente más segura) de leer los datos.
Para muchos, usar algo como lo siguiente es una práctica común:
<?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;
}
No es raro ver algo así get_the_title(get_the_ID());en todo el código, lo cual es bueno, pero todavía hay momentos en los que vemos código escrito que accede a ciertos aspectos de la publicación actual.
Y cuestiono hasta qué punto es necesaria esa práctica realmente dada la get_post_fieldfunción. De la referencia del código:
Recupere datos de un campo de publicación según el ID de la publicación.
Los ejemplos del campo de publicación serán, ‘post_type’, ‘post_status’, ‘post_content’, etc. y se basarán en la propiedad del objeto de publicación o los nombres clave.
Un ejemplo similar a esta función sería la get_user_byfunción en la que pasa una cadena específica a la función para la que desea recuperar información, así como una identificación (o el objeto de publicación completo, pero cuando la identificación es suficiente, ¿por qué no?).
La diferencia aquí es que recuperará el valor del campo solicitado o una cadena vacía (en lugar de un error, nulo o falso) cuando la solicitud falla. Esto significa que necesitaríamos escribir una cláusula condicional o de guardia para manejar tal caso.
Entonces, un caso de uso completo de esta función y el código pueden requerir un par de funciones :
<?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());
}
Todo eso se puede unir así:
<?php
if (hasPostSlug()) {
echo getPostSlug();
}
El objetivo de compartir este tipo de código es ayudar a compartir algunas de las alternativas que tenemos a las variables globales para compartir también las API que existen pero que pueden estar infrautilizadas.
