Cum să modifici structura permalink pentru custom post type și taxonomiile sale?
Aceasta este o repostare a unei întrebări anterioare, dar aș dori să intru în mai multe detalii acum pentru a putea rezolva complet problema.
Așadar, din nou, pentru postările (normale) modificarea permalink-ului este la fel de simplă ca accesarea Setări > Permalink și schimbarea acestuia în orice doriți, cum ar fi popularul %category%/%postname%.html
. Totul funcționează. Dacă ar fi fost la fel de ușor și pentru tipurile de postări personalizate și taxonomiile lor.
Iată ce vreau să realizez.
- http://mywordpress.com/portfolio.html - Afișează toate postările din toate categoriile.
- http://mywordpress.com/portfolio/music/ - Afișează toate postările din această categorie.
- http://mywordpress.com/portfolio/music/trance/ - Afișează toate postările din această (sub)categorie.
- http://mywordpress.com/portfolio/music/trance/Tiesto.html - Afișează postarea.
Până acum am realizat următoarele:
- Mai întâi am creat un
custom_post_type
numit project și otaxonomy
project_category. - Am creat o pagină Portfolio și i-am dat un Template de Pagină care va lista toate postările cu
post_type = project
. Cum pot adăuga .html la permalink-ul paginilor? Acum face legătura către http://mywordpress.com/portfolio în timp ce eu vreau http://mywordpress.com/portfolio.html. Acest lucru ar trebui să rezolve prima problemă. - Apoi lucrurile devin complicate, pentru că nu știm dinainte câte subcategorii sunt, poate nu există deloc. Deci structura pe care o căutăm este
portfolio/(CALEA CATEGORIEI DE LA PĂRINTE LA COPIL)/post.html
. Sunt încă blocat în acest punct. Cred că ar trebui cumva să obțin ultima categorie adăugată la cale și să o transmit către project_category, care ar trebui să ducă la un fișier taxonomy.php unde o pot procesa corespunzător. - Nu m-am ocupat nici de acest aspect, dar ar trebui să aibă legătură cu
%postname%.html
la sfârșitul a ceva.
Sper că problema mea este clară și că există dezvoltatori curajoși care mă vor ajuta să rezolv această problemă care m-a ținut ocupat deja patru zile ÎNTREGI!
Cred că am găsit o soluție. Nu știu dacă aceasta este cea mai bună metodă pentru a realiza acest lucru, dar momentan este singura care pare să funcționeze.
add_filter('rewrite_rules_array', 'mmp_rewrite_rules');
function mmp_rewrite_rules($rules) {
$newRules = array();
$newRules['portfolio/(.+)/(.+?).html$'] = 'index.php?project=$matches[2]';
$newRules['portfolio/(.+)/?$'] = 'index.php?project_category=$matches[1]';
return array_merge($newRules, $rules);
}
add_filter('request', 'mmp_rewrite_request');
function mmp_rewrite_request($vars) {
if (isset($vars['project_category'])) {
if (strpos($vars['project_category'], '/') !== false) {
$categories = explode('/', $vars['project_category']);
$vars['project_category'] = $categories[count($categories) - 1];
}
}
return $vars;
}

Filtrul de cerere este o modalitate bună de a filtra dacă solicităm o categorie (de fapt un termen) și un articol. Acesta permite adăugarea unei singure reguli de rescriere și obținerea paginii articolului, indiferent dacă articolul se află într-o categorie, o subcategorie sau deloc.

După ce mi-am bătut capul ore întregi, am găsit acest plugin foarte util.
https://wordpress.org/plugins/custom-post-type-permalinks/
Mai jos este captura de ecran cu opțiunile pe care le oferă.

2 Metode Diferite:
*Vezi notele de la sfârșitul acestui articol.
de exemplu, dorești să ai o structură de permalinkuri ca aceasta:
/CATEGORIE_PRINCIPALA/SUBCATEGORIE_2/Alta_SUBCATEGORIE/articolul-meu
În primul rând, poate fi necesar să setezi permalinkurile la /%category%/%postname%. Apoi...
METODA 1:
creează categorii STANDARD (CATEGORIE_PRINCIPALA
, SUBCATEGORIE_1
, și așa mai departe..
) și înregistrează POSTUL CUSTOM, incluzând acest parametru:
'taxonomies' => array('category'..)
și folosește aceste coduri pentru a schimba permalinkurile: https://wordpress.stackexchange.com/a/195643/33667
Apoi, după publicarea unui POST CUSTOM (dacă este atașat unei categorii), URL-ul va fi:
example.com/CATEGORIE_PRINCIPALA/SUBCATEGORIE_1/articolul-meu
METODA 2:
(p.s. această metodă nu este recomandată dacă intenționezi să publici sute sau mii de articole)
înregistrează POSTUL CUSTOM (numit CATEGORIE_PRINCIPALA
), incluzând acești parametri:
"supports" => array('page-attributes'......
"hierarchical" => true,
apoi, publică postări custom astfel:
(adică publică mai multe postări custom, numite SUBCATEGORIE_2, SUBCATEGORIE_1..
. După aceea, când publici un alt articol, alege SUBCATEGORIE_2
ca părinte.
p.s.
1) Dacă ești începător, revizuiește: Înregistrarea POSTULUI CUSTOM și Înregistrarea POSTULUI CUSTOM cu TAXONOMIE
2) dacă vei avea nevoie de funcționalitate de căutare pentru nivelurile subordonate, folosește interogare de căutare personalizată
