Rimuovere la base della tassonomia o il termine dall'URL

26 giu 2011, 08:52:17
Visualizzazioni: 19K
Voti: 10

So che ci sono molti post su questo argomento qui, ma NESSUNO di questi ha risolto il mio problema.

Sto lavorando con un tema personalizzato che ha un tipo di categoria personalizzato (chiamato messagetypes). Ho creato una categoria chiamata media. Questo tema è configurato in modo che possa aggiungere una voce di menu che, quando cliccata, mostra tutti gli elementi etichettati come media, ma l'URL della pagina diventa mysite.com/messagetypes/media. Voglio rimuovere messagetypes dall'URL e avere solo mysite.com/media.

Il risultato più vicino che ho ottenuto è quando aggiungo alla pagina delle funzioni della categoria personalizzata, dove

register_taxonomy( 'messagetypes', ...

viene chiamato con

'rewrite' => array( 'slug' => ''),

Quando faccio questo, ottengo il risultato desiderato per questa pagina, ma tutti gli altri collegamenti delle mie pagine si interrompono (usando i permalink).

Ho anche provato ad aggiungere all'array rewrite

'with_front' => false

ma non ha funzionato neanche questo.

Qualsiasi aiuto o suggerimento sarebbe fantastico. Ho perso troppe ore su questo e mi sta facendo impazzire.

Grazie.

0
Tutte le risposte alla domanda 1
1
14

Quando faccio questo, ottengo il risultato desiderato da questa pagina, ma tutti gli altri link delle pagine si rompono (usando i permalink).

Perché, molto semplicemente, WordPress non ha idea che tu stia chiedendo una pagina. Sta facendo quello che gli hai detto di fare;

Per tutti gli URL che sembrano http://example.com/X, cerca post con messagetype uguali a X.

Ecco perché hai bisogno dell'identificatore; in modo che possa distinguere la differenza tra richieste di pagine, archivi, categorie...

Se vuoi davvero questa funzionalità, aggiungere regole di riscrittura verbose all'inizio della mappa di riscrittura sarebbe la strada da percorrere;

add_rewrite_rule( 'media/?$', 'index.php?messagetypes=media', 'top' );

Se hai molti messagetypes, potresti volerti agganciare alla creazione e eliminazione dei termini e aggiornare dinamicamente e svuotare le regole di riscrittura.

Altrimenti, ripeti l'esempio per ogni termine nel tuo functions.php, poi svuota i permalink (basta visitare la pagina delle opzioni dei permalink nell'amministrazione).

Un'ultima cosa, riporta la tua chiamata register_taxonomy alla normalità, cioè lascia fuori l'argomento rewrite, e usa il filtro term_link per inserire noi stessi il permalink personalizzato;

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 giu 2011 19:37:32
Commenti

GRAZIE. Davvero. Hai centrato il punto e ora ho anche una comprensione molto più chiara di cosa stesse succedendo.

danstever danstever
27 giu 2011 05:02:50