Eliminarea slug-ului din URL-ul taxonomiei
Mă întreb cum pot elimina slug-urile din anumite URL-uri. Folosesc un tip de postare personalizată numit exhibitors și câteva taxonomii pentru a defini acești expozanți (de exemplu: featured-guests, publishers etc.):
În prezent am acest URL: http://thisurl.com/exhibitor_filters/featured-guests/
Aș dori să obțin acest format: http://thisurl.com/featured-guests/
M-am jucat cu opțiunile rewrite / slug în WordPress, dar până acum fără succes.
Sugestii?
Mulțumesc!
-Actualizare-
Momente amuzante, acum primesc erori 404 pentru tot ce implică tipuri de postări personalizate și termeni de taxonomie. Voi încerca mai întâi să rezolv această problemă care generează atâtea erori... mulțumesc pentru sugestiile generale, băieți.
În mod implicit, acest lucru nu este posibil, iar utilizând API-urile de înregistrare CPT și Taxonomii Personalizate, nu este posibil.
Și există un motiv bun pentru asta.
Totul are legătură cu conflictele de permalink-uri și slug-uri, precum și cu eliminarea ambiguității. Recunoaștem că există cazuri în care URL-uri unice care nu se suprapun niciodată nu sunt permise de sistem din acest motiv (fals negativ).
Așadar, vă recomand să alegeți un înlocuitor pentru 'exhibitor_filters'
, cum ar fi 'exhibitors'
sau 'filters'
, și să îl utilizați ca slug în opțiunea de rescriere la înregistrare.
Dacă totuși doriți să faceți așa cum doriți, va trebui să adăugați reguli de rescriere. Acest lucru poate fi problematic, deoarece riscați conflicte reale (încărcăm pagina 'despre'
sau termenul exhibitor_filter 'despre'
?), iar ordinea și prioritățile hook-urilor vor juca un rol important.
De exemplu:
function ex_rewrite( $wp_rewrite ) {
$feed_rules = array(
'(.+)' => 'index.php?exhibitor_filter='. $wp_rewrite->preg_index(1)
);
$wp_rewrite->rules = $wp_rewrite->rules + $feed_rules;
}
// reîmprospătați/resetați permalink-urile în panoul de administrare dacă acest cod este modificat în orice fel
add_filter( 'generate_rewrite_rules', 'ex_rewrite' );
Codul de mai sus va funcționa pentru termeni individuali, dar va trebui modificat pentru URL-uri ierarhice și taxonomii.
Plasați codul în fișierul functions.php al temei dumneavoastră sau în plugin-ul asociat temei.
Avertisment: Va trebui să fiți atenți să nu aveți permalink-uri conflictuale și să fiți conștienți de ordinea în care regulile sunt aplicate. Folosiți plugin-ul Monkeyman Rewrite Analyzer pentru a testa acest lucru. Ați fost avertizați.

Încă funcționează acest lucru? Are nevoie de un fel de return
? Nu pare să facă nimic pentru mine.

da, dar trebuie să-l modifici pentru cazul tău specific, acest răspuns a fost scris pentru OP, așa că un simplu copy paste nu va funcționa pentru tine decât dacă tipul tău personalizat de postare și taxonomiile au exact aceleași nume ca în cazul postării originale. Acest răspuns nu este copiat. De asemenea, ia în considerare precizările din răspuns

Există un plugin care vă va permite să eliminați cu ușurință slug-ul de taxonomie cu doar câteva clicuri. Totuși, așa cum a menționat Tom, fiți atenți, de exemplu, să nu denumiți doi termeni de taxonomie diferiți la fel, altfel totul se va defecta.
URL-ul plugin-ului este http://wordpress.org/extend/plugins/wp-htaccess-control/

Ar trebui să poți specifica acest lucru din secțiunea de permalink-uri. Poți seta acest lucru printr-un permalink personalizat, dar se pare că una dintre opțiunile implicite "numele articolului" ar trebui să funcționeze pentru tine. Această opțiune poate fi găsită în setări, la secțiunea permalink-uri din panoul de administrare WordPress.

Am găsit răspunsul aici și am folosit codul din comentariile lui Jonathan Brinley.
Trebuie să declari mai întâi taxonomia "exhibitor_filters"
, iar apoi CPT-ul tău, setând slug-ul acestuia la %exhibitor_filters%
.
Apoi, toate CPT-urile și termenii tăi vor funcționa corect, inclusiv legăturile către arhivele de termeni. În cazul meu, am eliminat slug-ul CPT-ului din permalink-uri folosind %taxo% în slug-ul CPT-ului, și a funcționat, cu excepția arhivelor de termeni, care încă afișează slug-ul CPT-ului, dar în cazul tău pare că asta dorești.
Se pare că vrei pagini de arhivă care să afișeze toate postările personalizate din filtrul expozantului "featured-guests"
.
Succes.

Există vreo modalitate de a trece ceva similar cu un slug gol? Dacă îl las gol, primesc și eu erori de server.

Pot să văd codul complet, doar ca să mă asigur că este implementat corect. Din câte știu eu, dacă funcția eșuează, nu ar trebui să arunce o eroare 500.

register_taxonomy('exhibitor_filters','exhibitors', array( 'hierarchical' => true, 'label' => 'Tipul Expozantului', 'query_var' => true, 'rewrite' = > array( 'slug' => 'featured-guests', 'with_front' => false )
)
);
Nu cred că asta e corect. Featured-guests este un termen asociat cu exhibitor_filters. Vreau doar să nu apară partea de exhibitor_filters într-un link. Poate că nu este posibil. Probabil voi face o pagină modificată sau ceva de genul.

Am observat că primești erori 404 cu structura ta de permalink acum. Ai reîmprospătat structura de rewrite? http://wpengineer.com/2044/custom-post-type-and-permalink/

Da. Nimic încă. Am șters baza de date și am început de la zero. Rezultat: 2 tipuri de postări refuză să-și folosească arhivele și 2 tot dau 404.
