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ì.

Qui funziona. Puoi essere più specifico su "non funziona"? Ricevi un errore HTTP? Non riesci a ottenere la query var propref
? Qualche altro problema?

Un vardump() dell'array mostra che è vuoto ovvero:
array(2) { ["propref"]=> string(0) "" ["brand"]=> string(2) "ZZ" }

Penso solo di non chiamarlo correttamente, sto usando $values['propref'] = get_query_var( "propref" );

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.

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.

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.
