Come funziona il routing su wordpress?


13

Come funziona il routing core di wp? Sto facendo fatica a capire ... In MVC, il tuo URL assomiglia a mycontroller / myaction associato a MyController-> myaction ()

In drupal, è index.php? Q = mycustomerpath / hello che può essere mappato su qualsiasi funzione che ti piace che restituisce un contenuto "a tema" nel layout del tema.

Ma in wp, non ho idea di come vengano fatte le cose ... è? P = 1 quindi? Product = 1 ... Ho cercato la documentazione del flusso di routing ma non riesco a trovarne (google restituisce solo articoli su misura percorsi) .. voglio capire prima i fondamenti del core routing ..


scavando nel codice, vedo su ogni richiesta che chiama query_posts? perché mai è necessario interrogare i post ogni volta? non ci sono casi in cui in realtà non vuoi visualizzare post ??
Sì,

1
I contenuti vengono salvati come post in WP. Quindi, quando devi mostrare i contenuti devi interrogarli
Sisir,

Vorrei suggerire di leggere "il ciclo" che è il concetto che devi capire per sapere come funziona WordPress. Essenziale "il ciclo" mostra una serie di post che è il risultato di query_posts. Per le richieste di URL non amministrativi, WP è progettato per mostrare solo post e richiede una programmazione personalizzata per mostrare qualcosa oltre a un post. Le richieste di URL di amministrazione sono diverse e queste non usano "il ciclo" e mostrano cose non post.

ok ma questo approccio è un po 'strano e non molto flessibile tbh
sì,

dire che voglio visualizzare un modulo di contatto .. devo inserire il mio HTML in un tipo di contenuto della pagina? Sto ancora cercando di trovare dove mettere la logica per l'invio del modulo ... (nel tema page.php? Approccio molto brutto)
yeahman

Risposte:


20

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.


Capisco che tutto dovrebbe essere rappresentato in un post (tramite tipi di post personalizzati ecc.) Molto simile ai tipi personalizzati in drupal 6 ... ma influisce sulle prestazioni con una singola tabella di post per memorizzare ogni singolo contenuto del sito? drupal 7 lo ha risolto introducendo il tipo di entità in modo da non dover creare un tipo personalizzato e archiviare tutto nella tabella dei nodi ma nella propria tabella delle entità che può ancora sfruttare il framework drupal. Spero che wordpress introduca tale approccio in futuro. grazie per la spiegazione dettagliata.
Sì,

immagino che se voglio mappare un url su una mia funzione / tema, il router wp sarebbe d'aiuto?
Sì,

Di solito non è necessario aggiungere un sistema di routing completo. Ci sono modi più semplici. La base di WordPress è visualizzare i contenuti generati dall'utente, che sono tutti memorizzati nella tabella dei post. Se desideri visualizzare contenuti non generati dall'utente, generalmente lo fai nel tema o in un plug-in. Esistono centinaia (migliaia) di hook e filtri di azione e altri modi in cui il codice ha la precedenza su varie parti del processo mentre viene generata la pagina. E con cose come gli shortcode, inserire HTML personalizzato nel contenuto è relativamente semplice.
Otto,

come faccio ad aggiungere html / php personalizzati a un tipo di post che ho creato? senza avere la modifica del single.php del tema o creare un single-mycustompost.php (non un approccio molto portatile)
yeahman

6
dopo più di 1 anno di lavoro con wordpress ora ... non ne sono ancora convinto ... il framework non è elegante e abbastanza brutto ... Funziona come un semplice blog ma se vuoi sviluppare altri tipi di siti web. è una specie di hacking di wordpress per fare qualcosa che non doveva fare.
Sì,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.