add_rewrite_rule() nu funcționează

27 ian. 2015, 19:42:44
Vizualizări: 22.8K
Voturi: 2

Trebuie să transmit o referință de proprietate din ultima parte a unui URL pentru a căuta o intrare în baza de date, de exemplu,

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

Trebuie să transmit G638 într-un array pentru plugin-ul meu. Ceea ce am mai jos apelează pagina cottage-details, dar elimină ultima parte a URL-ului și afișează o pagină goală, în loc să afișeze informațiile pe care doresc să le preiau de pe server. Dacă folosesc

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

funcționează perfect.

/**
 * Tag-uri de rescriere pentru plugin
 */
function dcc_rewrite_tags() {
    add_rewrite_tag('%propref%', '([^&]+)');
}

add_action('init', 'dcc_rewrite_tags', 10, 0);

/**
 * Reguli de rescriere pentru plugin
 */
function dcc_rewrite_rules() {
    add_rewrite_rule('^[^/]*/([^/]*)/?','index.php?p=2&propref=$matches[1]','top');
}

add_action('init', 'dcc_rewrite_rules', 10, 0);

Ce se întâmplă?

0
Toate răspunsurile la întrebare 1
13

Regula ta de rescriere este destul de largă și va genera cel mai probabil multe conflicte.

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');
}

Apoi poți accesa variabila de interogare propref astfel:

$propref = get_query_var( 'propref' );

Și nu uita să reîncarci regulile de rescriere; poți face acest lucru mergând la Setări -> Legături permanente și dând clic pe butonul de salvare.

Notă: am schimbat variabila de interogare p în page_id deoarece, după cum ai menționat în comentarii, folosești o pagină, nu un articol standard.

27 ian. 2015 21:28:48
Comentarii

Da, asta e una dintre multele combinații pe care le-am încercat. Nici asta nu funcționează. Am descărcat acest plugin: https://wordpress.org/plugins/monkeyman-rewrite-analyzer/ și arată că regula este corectă și totul ar trebui să fie în regulă, dar din nu știu ce motiv, nu merge.

Badger Badger
28 ian. 2015 11:51:13

Aici funcționează. Poți fi mai specific despre "nu merge"? Primești vreo eroare HTTP? Nu poți obține variabila de interogare propref? Altă problemă?

cybmeta cybmeta
28 ian. 2015 11:53:48

Un vardump() al array-ului arată că este gol viz: array(2) { ["propref"]=> string(0) "" ["brand"]=> string(2) "ZZ" }

Badger Badger
28 ian. 2015 12:01:08

Cred că problema este că nu o apelez corect, folosesc $values['propref'] = get_query_var( "propref" );

Badger Badger
28 ian. 2015 12:02:37

WordPress ar trebui să scrie regula în .htaccess? Nu sunt alte reguli în afară de cele implicite. Sunt sigur că rescrierea este corectă, pare că Apache nu o implementează.

Badger Badger
28 ian. 2015 12:21:30

.htaccess nu este implicat în asta. Am testat din nou și funcționează.

cybmeta cybmeta
28 ian. 2015 13:00:30

Ei bine, nu funcționează pe instalarea mea!

Badger Badger
28 ian. 2015 15:19:06

Ce este cottage-details? o pagină sau un articol? Care este ID-ul său?

cybmeta cybmeta
28 ian. 2015 16:26:16

Îmi pare rău, nu am văzut asta. Este o pagină, ID-ul este 2.

Badger Badger
30 ian. 2015 19:31:18

Dacă este o pagină, regula de rescriere trebuie să folosească page_id în loc de p. Vezi documentația WP Query. Am editat răspunsul.

cybmeta cybmeta
14 feb. 2015 14:33:06

Mulțumesc, am reușit să rezolv folosind pagename în loc de p.

Badger Badger
14 feb. 2015 20:13:05

Excelent. page_id sau pagename vor funcționa, ideea este că trebuie să interoghezi o pagină, nu un articol obișnuit. Dacă acest răspuns ți-a rezolvat problema, te rog să îl marchezi ca acceptat.

cybmeta cybmeta
14 feb. 2015 21:07:12

Nu pot să-ți mulțumesc suficient, în sfârșit a funcționat pentru mine. Cheia este să reîmprospătezi mereu cache-ul de permalinkuri

Mr Megamind Mr Megamind
22 feb. 2019 18:15:01
Arată celelalte 8 comentarii