add_rewrite_rule() non funziona
Ho bisogno di passare il riferimento di una proprietà dall'ultima parte di un URL per cercare una voce nel database, ad esempio,
Ho bisogno di passare G638 in un array per il mio plugin. Quello che ho qui sotto sta chiamando la pagina cottage-details, ma rimuove l'ultima parte dell'URL e mostra una pagina vuota, invece delle informazioni che desidero recuperare dal server. Se uso
funziona perfettamente.
/**
* Tag di riscrittura per il plugin
*/
function dcc_rewrite_tags() {
add_rewrite_tag('%propref%', '([^&]+)');
}
add_action('init', 'dcc_rewrite_tags', 10, 0);
/**
* Regole di riscrittura per il plugin
*/
function dcc_rewrite_rules() {
add_rewrite_rule('^[^/]*/([^/]*)/?','index.php?p=2&propref=$matches[1]','top');
}
add_action('init', 'dcc_rewrite_rules', 10, 0);
Cosa sta succedendo?
La tua regola di riscrittura è piuttosto ampia e molto probabilmente genererà molti conflitti.
add_action('init', 'dcc_rewrite_tags');
function dcc_rewrite_tags() {
add_rewrite_tag('%propref%', '([^&]+)');
}
add_action('init', 'dcc_rewrite_rules');
function dcc_rewrite_rules() {
add_rewrite_rule('^cottage-details/(.+)/?$','index.php?page_id=2&propref=$matches[1]','top');
}
Quindi puoi accedere alla variabile di query propref in questo modo:
$propref = get_query_var( 'propref' );
E ricorda di ripulire le regole di riscrittura; puoi farlo andando su Impostazioni -> Permalink e cliccando sul pulsante Salva.
Nota: ho cambiato la variabile di query p in page_id perché, come hai detto nei commenti, stai usando una pagina, non un post standard.
Sì, questa è una delle tante combinazioni che ho provato. Non funziona neanche. Ho scaricato questo plugin: https://wordpress.org/plugins/monkeyman-rewrite-analyzer/ e mostra che la regola è corretta e tutto dovrebbe funzionare, ma per qualche motivo non è così.
Badger
Qui funziona. Puoi essere più specifico su "non funziona"? Ricevi un errore HTTP? Non riesci a ottenere la query var propref? Qualche altro problema?
cybmeta
Un vardump() dell'array mostra che è vuoto ovvero:
array(2) { ["propref"]=> string(0) "" ["brand"]=> string(2) "ZZ" }
Badger
Penso solo di non chiamarlo correttamente, sto usando $values['propref'] = get_query_var( "propref" );
Badger
WordPress dovrebbe scrivere la regola in .htaccess? Perché non ci sono regole aggiuntive oltre a quelle di default. Sono sicuro che la riscrittura sia corretta, è come se non venisse effettivamente implementata da Apache.
Badger
Se si tratta di una pagina, la regola di riscrittura deve utilizzare page_id invece di p. Consulta la documentazione di WP Query. Ho modificato la risposta.
cybmeta
Ottimo. page_id o pagename funzioneranno, il punto chiave è che devi interrogare una pagina, non un post standard. Se questa risposta risolve il tuo problema, per favore, segnala come accettata.
cybmeta