Obiectiv
Un URL vizibil de:
/products/building-automation/details/productSKU
Ar trebui să indice către pagina reală WordPress de:
/products/details/?SKU=productSKU
Cod
public function setup_frontend() {
add_rewrite_rule(
'products/(building-automation|lighting-controls)/details/([^/]*)',
'products/details/?SKU=$matches[2]',
'top'
);
// Other code logic...
}
Din câte îmi dau seama, pagina $matches
indică porțiunile din regex care se află în ()
, , deci în exemplu, $matches[1]
ar fi building-automation
, , și $matches[2]
ar fi productSKU
.
Am încercat de mai multe ori să șterg regulile. Aceasta este apelată din interiorul unei clase, dar nu pare să fie aceasta problema. Atașez funcția la init
eveniment.
Ce se întâmplă
Primesc 404
șablon. Ce fac greșit?
Editați
Se pare că a doua parte a parametrului TREBUIE să fie index.php
. Din moment ce încercam să arăt către products/...
, , s-a stricat. Așa că am actualizat la acest lucru:
add_rewrite_rule(
'products/(building-automation|lighting-controls)/details/([^/]*)',
'?pagename=products/details&SKU=$matches[2]',
'top'
);
Nu funcționează și indică spre pagina și șablonul corect. Cu toate acestea, se poate vedea că $matches
parte continuă să nu ajungă la destinație. De fapt, $_GET['SKU']
este de a veni prin intermediul ca '$matches[2]'
.
Prima problemă este că arată spre ceva ce nu începe cu index.php
. Trebuie să arate spre index.php?stuff
, , din păcate. Dar puteți folosi în continuare numele paginii, așa cum se arată mai jos.
add_rewrite_rule(
'products/(building-automation|lighting-controls)/details/([^/]*)',
'index.php?pagename=products/details&SKU=$matches[2]',
'top'
);
În al doilea rând, trebuie să vă înregistrați șirul de interogare, care este SKU
. Adăugați acest lucru:
add_filter( 'query_vars', 'product_details_rewrite_filter' );
function product_details_rewrite_filter( $query_vars ){
$query_vars[] = 'SKU';
return $query_vars;
}
Veți avea în continuare o problemă. $_GET['SKU']
va fi $matches[2]
, , nu RIBU1C
. Pentru a remedia acest lucru, schimbați $matches[2]
în $2
. Atunci va funcționa:
add_rewrite_rule(
'products/(building-automation|lighting-controls)/details/([^/]*)',
'index.php?pagename=products/details&SKU=$2',
'top'
);
Nu funcționează în acest fel… Încercați să obțineți ceva imposibil cu acest cod. Regulile de rescriere în wordpress funcționează cu rutarea index.php, dar nu și cu căile externe. Deci,
products/(building-automation|lighting-controls)/details/([^/]*)
ar trebui să fie „traductibil” în limba „wordpress” (ceva de genul)
index.php?post_type=products&category=$matches[1]&scu=$matches[1]
notificare, scu
ar trebui, de asemenea, să fie definit ca var suplimentar.
editare 1:Lucrul (cred) pe care încercați să îl realizați este într-adevăr seamănă cu un model de regulă htaccess, în acest caz puteți folosi mod_rewrite_rules
filter (filtrează conținutul care merge în .htaccess) pentru a-l schimba după cum vă place.
editare 2:Advertisment – puteți utiliza, de asemenea, plugin-ul meu de bara de depanare numit debug bar rewrite rules pentru a depana practic aceste date. Observație: (în prezent nu suportă lista de reguli prin add_rewrite_rule, așa că puteți doar inspecta vizual regula, și să vedeți dacă se potrivește cu așteptările dvs.).
- Da, mi-am dat seama încet-încet că trebuie să arate către
index.php
. Ar fi frumos dacă nu ar fi așa. De fapt, ar fi perfect dacă aș putea specifica o adresă URL către un șablon de pagină, fără a avea nevoie de o „pagină WordPress” reală în backend. Ah, bine. Marchez răspunsul lui Benedick ca fiind cel corect, pentru că a răspuns înaintea ta și am spus ceva similar, dar am dat upvoted. Mulțumesc, amice. – > .
1) Încearcă să actualizezi permalink-urile.
Mergeți la Dashboard->Setting->Permalinks-> butonul „Save changes” (Salvează modificările).
2) Adăugați o acțiune la funcția dvs.
add_action('init', 'setup_frontend');
function setup_frontend() {
add_rewrite_rule(
'products/(building-automation|lighting-controls)/details/([^/]*)',
'products/details/?SKU=$matches[2]',
'top'
);
// Other code logic...
}
- Folosești add_action pentru funcția ta? – > .
index.php
. Cu toate acestea, parametrulterm
parte a răspunsului tău nu este corectă, cred. Mi-am editat întrebarea cu noul șir parțial funcțional, ați putea să vă uitați? – > Por Andy Mercer.