@toscho ha lasciato un commento a questa risposta che mi ha fatto riflettere di nuovo. Quanta fiducia dovremmo avere nell'ambito globale, specialmente per quanto riguarda i post globali $post
?
E allora? La variabile globale può essere sovrascritta da tutti prima dell'esecuzione del controllo. Questo è il punto delle variabili globali: accesso globale.
$post
per esempio è sicuramente uno dei globi che viene per lo più modificato o all'interno del tema stesso o dai plugin. Tuttavia, è anche il più usato a livello globale in altre applicazioni all'interno di un determinato modello, ad esempio per configurare post correlati.
Dal rispondere (e commentare) diversi post con problemi specifici causati dall'uso di query personalizzate , si nota che la maggior parte dei problemi è causata dal fatto che le query personalizzate non vengono ripristinate (le query personalizzate alterano i globi impostati dalla query principale).
Da ciò, è evidente che $post
non è affidabile. Qualsiasi pezzo di codice scritto male che utilizza una query personalizzata può alterare il $post
globale, che a sua volta romperà qualcosa (come i post correlati).
Solo una manciata di sviluppatori di WordPress è in realtà abbastanza ben informato sul funzionamento interno del core e sa cosa evitare e cosa no. La maggior parte degli utenti non ha idea di come funzioni il core di WordPress.
Semplicemente scaricano un tema e installano i plugin per fare ciò che è necessario o anche semplicemente copiare il codice da un tutorial. Supponiamo che installino un plug-in mal scritto che interrompe i loro post correlati sul loro singolo post, come potranno sapere cosa l'ha causato? Saranno in grado di risolverli da soli o saranno la centesima persona a scrivere un'e-mail all'autore del tema su questo problema o a pubblicare una domanda su questo sito?
La mia domanda: come è possibile proteggersi da tali problemi causati da altri codici importati quando un like globale $post
è così inaffidabile? Dovremmo usare un global come $post
tutti? Quali sono le alternative?
Solo per condividere la mia mente qui prima di concludere: ho pensato (e visto anche in alcuni temi e plugin) di utilizzare wp_reset_postdata()
o wp_reset_query()
prima di fare uso $post
, per assicurarmi che il globale sia ripristinato alla query principale $post
. Ma perché dovrei gonfiare il mio codice nel mio tema perché qualcun altro non ha codificato correttamente il suo plugin? E se qualcuno ha reimpostato correttamente la propria query personalizzata, questa operazione viene eseguita una seconda volta non necessaria, il che non va bene.
Il secondo metodo a cui ho pensato è usare $wp_query
e quindi usare i suoi metodi, qualcosa del genere $wp_query->post
.
Qualsiasi pensiero su questo sarà apprezzato.