add_rewrite_rule() non funziona

27 gen 2015, 19:42:44
Visualizzazioni: 22.8K
Voti: 2

Ho bisogno di passare il riferimento di una proprietà dall'ultima parte di un URL per cercare una voce nel database, ad esempio,

http://example.com/cottage-details/G638/

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

http://example.com/cottage-details/?propref=G638

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?

0
Tutte le risposte alla domanda 1
13

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.

27 gen 2015 21:28:48
Commenti

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 Badger
28 gen 2015 11:51:13

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 cybmeta
28 gen 2015 11:53:48

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

Badger Badger
28 gen 2015 12:01:08

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

Badger Badger
28 gen 2015 12:02:37

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 Badger
28 gen 2015 12:21:30

.htaccess non è coinvolto in questo. Ho testato nuovamente e funziona.

cybmeta cybmeta
28 gen 2015 13:00:30

Beh, non funziona sulla mia installazione!

Badger Badger
28 gen 2015 15:19:06

Cos'è cottage-details? Una pagina o un articolo? Qual è il suo ID?

cybmeta cybmeta
28 gen 2015 16:26:16

Scusa, non l'avevo visto. È una pagina, l'ID è 2.

Badger Badger
30 gen 2015 19:31:18

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 cybmeta
14 feb 2015 14:33:06

Grazie, sono riuscito a risolverlo utilizzando pagename invece di p.

Badger Badger
14 feb 2015 20:13:05

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 cybmeta
14 feb 2015 21:07:12

Non posso ringraziarti abbastanza, alla fine ha funzionato per me. Il trucco è anche quello di aggiornare SEMPRE la cache dei permalink

Mr Megamind Mr Megamind
22 feb 2019 18:15:01
Mostra i restanti 8 commenti