Elimină baza taxonomiei sau termenul din URL

26 iun. 2011, 08:52:17
Vizualizări: 19K
Voturi: 10

Ș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.

0
Toate răspunsurile la întrebare 1
1
14

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 mesaj X.

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 );
26 iun. 2011 19:37:32
Comentarii

MULȚUMESC. Serios. Ai făcut o treabă excelentă și acum am și o înțelegere mult mai bună a ceea ce se întâmpla.

danstever danstever
27 iun. 2011 05:02:50