In WordPress, gli URL non si associano ai percorsi. Associano alle query del database.
Quando si utilizza WordPress in modalità permalink "predefinita", nella query dell'URL principale è presente una serie di variabili, come? P = 1 o? Page = 234 e così via. C'è anche? S = search e molti altri.
Se usi i permalink "graziosi", viene creato un grande insieme di regole chiamato "regole di riscrittura" che mappa direttamente vari pattern URL su questo stesso set di parametri URL. Quindi un URL come / 2014/04/12 / example verrebbe mappato su? Year = 2014 & month = 04 & day = 12 & postname = example o simili. Quindi, anche in questi casi vale quanto segue dopo aver eseguito questa mappatura.
Queste variabili controllano essenzialmente l'istanza principale della classe WP_Query. La classe WP_Query contiene tutte le informazioni che compongono la query del database per ottenere i "post" dal database. I vari parametri passati in esso controllano il tipo di query che genera e quali dati ottiene.
Vedi, tutto ciò che può essere visualizzato da WordPress è essenzialmente un "post". Un blog è una serie di post in ordine inverso basato sul tempo. Una "pagina" è un post statico con un nome definito. Un "tipo di post personalizzato" è esattamente quello che sembra, un "post" con un tipo personalizzato che definisci. Tutte le query principali per visualizzare qualsiasi cosa in WordPress stanno ottenendo alcuni sottoinsiemi di post dalla tabella wp_posts.
WP_Query è ciò che fa. E i parametri dell'URL vengono inviati direttamente nella query principale e utilizzati lì.
Il tema determina quindi quale modello utilizzare in base a ciò che viene restituito dalla query. Se hai richiesto / categoria / esempio, allora diventa? Nome_categoria = esempio, il che significa che l'array $ wp_query-> query_vars principale otterrà tali informazioni e WP_Query estrarrà gli ultimi post X per la categoria "esempio", e imposterà il suo flag is_category su true.
Il template-loader verrà eseguito dopo questo, vedere che is_category () restituisce true e decide di scegliere il modello di categoria, quindi cercherà categoria-esempio.php e tornerà a categoria.php e così via, secondo il modello Gerarchia.
Quindi, la domanda se vuoi cambiare il modo in cui funzionano gli URL è semplice: vuoi cambiare gli URL o a cosa sono associati? Poiché gli URL non sono associati a funzioni, sono associati a parametri che controllano la query. Se vuoi che l'URL modifichi la query principale, allora è un processo leggermente diverso rispetto a se desideri che un URL speciale esegua del tutto un altro codice speciale.
E per rispondere alla tua domanda specifica nei commenti: "non ci sono casi in cui in realtà non vuoi visualizzare post?" No non c'è. Tutto è un post. Tutto il contenuto è archiviato nei post. Se vuoi archiviare contenuti altrove ed essere diverso, puoi farlo, ma è più difficile perché, onestamente, di solito non è necessario. Se disponi di contenuti speciali, crea un tipo di post personalizzato, archivia i tuoi contenuti come post con quel tipo e associa ad esso un pattern URL. Facile.