Elimină baza taxonomiei sau termenul din URL
Știu că există multe postări pe această temă aici, dar NICI UNA nu a răspuns la problema mea.
Lucrez cu o temă personalizată care are un tip de categorie personalizat (numit messagetypes). Am creat o categorie numită media. Această temă este configurată astfel încât să pot adăuga un element de meniu care, atunci când este apăsat, afișează toate elementele etichetate ca media, dar URL-ul paginii este mysite.com/messagetypes/media. Vreau să elimin "messagetypes" din URL și să am doar mysite.com/media.
Cea mai apropiată soluție pe care am obținut-o este când adaug în fișierul funcțiilor categoriei personalizate, unde
register_taxonomy( 'messagetypes', ...
este apelat cu
'rewrite' => array( 'slug' => ''),
Când fac asta, obțin rezultatul dorit pentru această pagină, dar toate celelalte linkuri ale paginilor nu mai funcționează (folosind permalinkuri).
Am încercat și să adaug în array-ul rewrite
'with_front' => false
dar nici asta nu a funcționat.
Orice ajutor sau sugestie ar fi minunat. Am pierdut prea multe ore cu asta și începe să mă enerveze.
Mulțumesc.

Când fac asta, obțin rezultatul dorit de pe această pagină, dar toate celelalte linkuri ale paginilor nu mai funcționează (folosind permalink-uri.)
Deoarece, pur și simplu, WordPress nu are habar că ceri o pagină. Face exact ce i-ai spus să facă;
Pentru toate URL-urile care arată ca
http://example.com/X
, caută postări cu tipul de mesajX
.
De aceea ai nevoie de 'identifier' acolo; pentru a putea distinge diferența dintre cererile pentru pagini, arhive, categorii...
Dacă chiar vrei această funcționalitate, adăugarea regulilor verbose de rescriere la începutul hărții de rescriere ar fi soluția;
add_rewrite_rule( 'media/?$', 'index.php?messagetypes=media', 'top' );
Dacă ai multe tipuri de mesaje, poate ai nevoie să te conectezi la crearea și ștergerea termenilor și să actualizezi și să resetezi dinamic regulile de rescriere.
Altfel, repetă exemplul pentru fiecare termen din functions.php
, apoi reset-ul permalink-urilor (vizitează doar pagina de opțiuni permalink în admin).
Un ultim lucru, readuci apelul register_taxonomy
'la normal' adică lasă-l fără argumentul rewrite
, și folosește filtrul term_link
pentru a schimba noi permalink-ul personalizat;
function __custom_messagetypes_link( $link, $term, $taxonomy )
{
if ( $taxonomy !== 'messagetypes' )
return $link;
return str_replace( 'messagetypes/', '', $link );
}
add_filter( 'term_link', '__custom_messagetypes_link', 10, 3 );
