@toscho dejó un comentario a esta respuesta que me hizo pensar de nuevo. ¿Cuánta confianza deberíamos tener en el ámbito global, especialmente con respecto a las publicaciones globales $post
?
¿Y qué? Todos pueden sobrescribir la variable global antes de que se ejecute su cheque. Ese es el punto de las variables globales: acceso global.
$post
por ejemplo, seguramente es uno de los globales que se modifica principalmente dentro del tema o por complementos. Sin embargo, también es el más utilizado globalmente en otras aplicaciones dentro de una plantilla determinada, por ejemplo, para configurar publicaciones relacionadas.
Al responder (y comentar) varias publicaciones con problemas específicos causados por el uso de consultas personalizadas , realmente se destaca que la mayoría de los problemas se deben a que las consultas personalizadas no se restablecen (las consultas personalizadas alteran los globales establecidos por la consulta principal).
A partir de esto, es evidente que $post
no es confiable. Cualquier código mal escrito que haga uso de una consulta personalizada puede alterar el $post
global, lo que a su vez romperá algo (como publicaciones relacionadas).
Solo un puñado de desarrolladores de WordPress están realmente bien informados sobre el funcionamiento interno de core y saben qué evitar y qué no. La mayor población de usuarios no tiene idea de cómo funciona el núcleo de WordPress.
Simplemente descargan un tema e instalan complementos para hacer lo que se necesita o incluso simplemente copian el código de un tutorial. Digamos que instalan un complemento mal escrito que rompe sus publicaciones relacionadas en su única publicación, ¿cómo sabrán qué causó eso? ¿Serán capaces de resolverlo ellos mismos o serán la centésima persona escribiendo un correo electrónico al autor del tema sobre este problema o publicando una pregunta en este sitio?
Mi pregunta: ¿cómo puede protegerse contra los problemas causados por otro código importado cuando un elemento global no $post
es tan confiable? ¿Deberíamos utilizar un global como $post
en absoluto? Cuales son las alternativas?
Solo para compartir mi mente aquí antes de concluir: he pensado (y también he visto en algunos temas y complementos) usar wp_reset_postdata()
o wp_reset_query()
antes de usar $post
, para asegurarme de que el global se restablezca a la consulta principal $post
. Pero, ¿por qué debería inflar mi código en mi tema porque alguien más no codificó correctamente su complemento? Y si alguien restableció correctamente su consulta personalizada, esta operación se ejecuta una segunda vez innecesaria, lo que no es bueno.
El segundo método en el que pensé es hacer uso de $wp_query
y luego usar sus métodos, algo así $wp_query->post
.
Cualquier idea sobre esto será apreciada.