È possibile avere URL dinamici in WordPress?
So che il titolo può sembrare un po' confuso, ma quello che sto cercando è qualcosa di possibile in Symfony o Ruby on Rails. Ho una pagina con questo URL: http://mydomain.com/job/
. Ora voglio questa struttura di URL http://mydomain.com/job/php-developer/45
, http://mydomain.com/job/java-developer/46
. I parametri dopo /job/
sono dinamici e non corrispondono a nessun post o pagina, ma fanno riferimento a una pagina job
.
È possibile fare questo in WordPress?
DOMANDA AGGIORNATA:
Ok, seguendo la risposta di @Gioia ho aggiornato il mio codice.
Ecco il mio codice:
add_filter('query_vars', 'add_query_vars');
function add_query_vars($aVars) {
$aVars[] = "job_title"; // Aggiunge job_title alle variabili di query
$aVars[] = "job_id"; // Aggiunge job_id alle variabili di query
return $aVars;
}
add_action( 'init', 'add_rules' );
function add_rules() {
add_rewrite_rule('^/job/([^/]*)/([^/]*)/?','index.php?page_id=13338&job_title=$matches[1]&job_id=$matches[2]','top');
}
Ora questo codice mi restituisce una pagina 404 quando provo con questo URL http://mydomain.com/job/php-dev/45
. Ma quando provo con questo URL http://mydomain.com/index.php?page_id=13338&job_title=php-dev&job_id=45
funziona.

Non sono completamente sicuro di capire cosa intendi con il fatto che i parametri rientrano in un lavoro di pagina, ma se intendi che diversi contenuti vengono caricati sulla stessa pagina utilizzando javascript/ajax, potresti usare https://github.com/browserstate/history.js/ per generare l'URL corrispondente per ogni stato. Difficile dire di più su come potresti implementarlo senza sapere di più su ciò che stai cercando di fare.
AGGIORNAMENTO
Penso che dovresti usare regole di riscrittura personalizzate. Questo è ciò che WordPress utilizza per creare gli URL eleganti e ha un'API per aggiungere le tue.
Per prima cosa devi aggiungere i tag che devi tracciare, nel tuo caso title e job_id. In realtà probabilmente dovresti cambiare title in qualcosa come job_title, non sono completamente sicuro che title possa creare un problema, ma dato che è qualcosa in WordPress, è meglio andare sul sicuro.
Ho usato il seguente codice, devi aggiungerlo al tuo functions.php, nel tuo tema.
add_filter('query_vars', 'add_query_vars');
function add_query_vars($aVars) {
$aVars[] = "job_title";
$aVars[] = "job_id";
return $aVars;
}
Maggiori informazioni: http://codex.wordpress.org/Rewrite_API/add_rewrite_tag
Poi aggiungi la regola di riscrittura, sempre in functions.php:
add_action( 'init', 'add_rules' );
function add_rules() {
add_rewrite_rule('^job/([^/]*)/([^/]*)/?','index.php?page_id=12&job_title=$matches[1]&job_id=$matches[2]','top');
}
Dovresti sostituire page_id con l'id della pagina dei lavori Maggiori informazioni: http://codex.wordpress.org/Rewrite_API/add_rewrite_rule.
Dopo aver salvato il file, devi andare su impostazioni -> permalinks e semplicemente salvare senza cambiare nulla. Questo assicurerà che le tue impostazioni vengano caricate correttamente.
Puoi installare il plugin rewrite inspector per vedere tutte le regole di riscrittura applicate e verificare che le tue siano presenti. https://wordpress.org/plugins/rewrite-rules-inspector/
Puoi installare il plugin debug bar per ispezionare la pagina e vedere quale regola di riscrittura viene applicata alla pagina: https://wordpress.org/plugins/debug-bar/
E qui hai più informazioni sulle regole di riscrittura in generale: http://www.addedbytes.com/articles/for-beginners/url-rewriting-for-beginners/
AGGIORNAMENTO 2
Per recuperare i parametri:
if (isset($wp_query->query_vars['job_title'])) {
$job_title = urldecode($wp_query->query_vars['job_title']);?>
<?php }

Il mio obiettivo è ottenere questo URL http://mydomain.com/job/?title=php-developer&job_id=45
, ma per rendere questo URL più SEO friendly, vorrei qualcosa come questo http://mydomain.com/job/php-developer/45

Ciao, grazie per la tua risposta. Ho provato il tuo codice, ma restituisce una pagina 404, per favore controlla le mie modifiche sopra nella domanda.

Ciao, ho appena provato il codice e ha funzionato per me. Prima di tutto, verifica di aver cambiato l'ID della pagina presente nel codice (?page_id=12) con l'ID della pagina dei lavori (puoi vedere qual è l'ID della pagina quando sei nella modalità modifica, fa parte dell'URL: post.php?post=6&action=edit, dove 6 è l'ID della pagina). Assicurati anche che dopo ogni modifica tu vada alla pagina delle impostazioni dei permalink e salvi.

Ho cambiato l'ID della pagina con il mio, se accedo a questo URL index.php?page_id=13338&job_title=$matches[1]&job_id=$matches[2]
funziona, ma con l'URL personalizzato no. Devo aggiungere add_rewrite_tag
? O fare qualche modifica all'htaccess?

Giusto per essere sicuri, sei andato nelle impostazioni dei permalink e hai salvato?

Sì, ho salvato i permalink, la mia struttura dei permalink è in questo modo /%postname%/

Continuiamo questa discussione nella chat.
