Pagina modello pagina personalizzata basata su riscrittura URL

Vi siete mai chiesti delle riscritture URL personalizzate di WordPress? Qui avevo a che fare con un problema interessante. Volevo aggiungere una regola di riscrittura su un permalink e volevo utilizzare un modello personalizzato per la regola di riscrittura. Tuttavia, questo non è un post esaustivo su come fare le regole di riscrittura, c'è un ottimo tutorial dettagliato su questo se vuoi saperne di più.


Obbiettivo:

  1. Aggiungi una regola di riscrittura su un tipo di annuncio personalizzato permalink
  2. Utilizzare un modello di pagina basato sulla regola di riscrittura

Qui abbiamo un film tipo di post. La struttura del permalink è film / film-name. Voglio aggiungere un fotografie e video endpoint a quell'URL, quindi la struttura sarà film / film-name / foto e film / film-name / video. Come puoi immaginare, voglio mostrare tutte le foto e i video su una pagina separata da quel film e voglio usare un modello di pagina separato per realizzare questo.


1. Registrare l'URL personalizzato

 function prefix_movie_rewrite_rule () add_rewrite_rule ('movie / ([^ /] +) / photos', 'index.php? movie = $ corrisponde a [1] & photos = yes', 'top'); add_rewrite_rule ('movie / ([^ /] +) / videos', 'index.php? movie = $ corrisponde a [1] & videos = yes', 'top');  add_action ('init', 'prefix_movie_rewrite_rule');

Da questo add_rewrite_rule funzione, stiamo aggiungendo due regole di riscrittura personalizzate all'URL e impostando due variabili di interrogazione all'URL. Non sto usando add_rewrite_endpoint perché non voglio aggiungere questo endpoint ad ogni permalink che ho. Ma aggiungendo questa regola di riscrittura non funzioneranno e WordPress li rifiuterà perché non riconosce quei vars di query che abbiamo aggiunto tramite la nostra funzione di regola di riscrittura. Dobbiamo dire a WordPress di essere modesto su queste query vars.


2. Registrati Query Vars

 funzione prefix_register_query_var ($ vars) $ vars [] = 'foto'; $ vars [] = 'video'; restituire $ vars;  add_filter ('query_vars', 'prefix_register_query_var');

Ora, come abbiamo aggiunto quelle query vars a WordPress, li riconoscerà e possiamo trarne vantaggio. Ma se vai all'URL film / film-name / foto, lo vedrai comunque single-movie.php o single.php i modelli si prendono cura di questi URL. Se vedi l'errore 404 per il nostro URL personalizzato, non preoccuparti, salva di nuovo i permalink.


3. Imposta il modello

 function prefix_url_rewrite_templates () if (get_query_var ('photos') && is_singular ('movie')) add_filter ('template_include', function () return get_template_directory (). '/single-movie-image.php';) ;  if (get_query_var ('videos') && is_singular ('movie')) add_filter ('template_include', function () return get_template_directory (). '/single-movie-video.php';);  add_action ('template_redirect', 'prefix_url_rewrite_templates');

Qui stiamo dicendo che, se c'è una query var fotografie o video ed è un singolo film pagina, stiamo impostando il modello come single-movie-image.php e single-movie-video.php rispettivamente.

Così, single-movie-image.php è responsabile per film / film-name / foto query e single-movie-video.php è responsabile per film / film-name / video query. Semplice eh?

Nota: Nella sezione di impostazione del modello di pagina, stiamo usando le funzioni anonime PHP. Quindi, questo codice richiede il minimo supporto per PHP 5.3.0 o potresti usare i filtri alla vecchia maniera. Una cosa da ricordare con l'uso di funzioni anonime è che non è possibile annullare la registrazione di un filtro o di un'azione come si farebbe normalmente. Ma è un modo semplice per associare un'azione / un filtro senza dare un nome alla funzione.