@toscho ha dejado un comentario en este respuesta que me hizo pensar otra vez. ¿Cuánta confianza deberíamos tener en el ámbito global, especialmente con respecto a las publicaciones globales como $post
?
¿Y qué? La variable global se puede sobrescribir de todos antes de que se ejecute su comprobación. Ese es el punto de las variables globales: acceso global.
$post
por ejemplo es seguramente una de las globales que se modifica principalmente dentro del tema en sí 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 destaca que la mayoría de los problemas se deben a que las consultas personalizadas no se restablecen (las consultas personalizadas cambian los globales establecidos por la consulta principal).
A partir de esto, es evidente que $post
no es confiable. Cualquier fragmento de código mal escrito que haga uso de una consulta personalizada puede alterar el $post
global, que a su vez romperá algo (como publicaciones relacionadas).
Solo un puñado de desarrolladores de WordPress son lo suficientemente conocedores del funcionamiento interno del núcleo 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. Supongamos que instalan un complemento mal escrito que rompe sus publicaciones relacionadas en su única publicación, ¿cómo sabrán qué causó eso? ¿Podrán resolverlo ellos mismos o serán la centésima persona que escribe un correo electrónico al autor del tema sobre este problema o publica una pregunta en este sitio?
Mi pregunta: ¿Cómo puede protegerse contra los problemas causados por otro código importado cuando un $post
como global es tan poco confiable? ¿Deberíamos estar usando un global como $post
? ¿Cuáles son las alternativas?
Solo para compartir mi mente aquí antes de concluir: he pensado (y visto en algunos temas y complementos, también) usando wp_reset_postdata()
o wp_reset_query()
antes de usar $post
, para asegurar que global se está restableciendo al $post
de la consulta principal. 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 cual 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í como $wp_query->post
.
Cualquier comentario sobre esto será apreciado.