Permalink: tipo di posta personalizzato -> tassonomia personalizzata -> posta


39

Ho problemi a lavorare con le regole di riscrittura di WordPress e potrei usare un po 'di aiuto.

Ho un tipo di post personalizzato chiamato _shows_.

Tutti gli spettacoli hanno un'unica tassonomia personalizzata categoria _show-category_.A _show_non ne avrà mai più di uno _show-category_.

Vorrei che i miei URL si indirizzassero in questo modo:

www.mysite.com/shows/  =>  archive-shows.php

www.mysite.com/shows/%category%/ => taxonomy-show-category.php

www.mysite.com/shows/%category%/%postname%/ => single-shows.php

Quindi, come esempio nel mondo reale, diciamo che abbiamo un _show-category_"Foo" e un _show_post intitolato "Bar" che ha "Foo" come è _show-category_. Mi aspetto che la mia app WordPress assomigli a questo:

www.mysite.com/shows/foo/ => shows all posts under the foo category
www.mysite.com/shows/foo/bar => shows the indivual post

Cerco di evitare plugin quando possibile, ma sono aperto a qualsiasi soluzione.


1
ti
sto

Risposte:


70

In primo luogo, registrare la tassonomia e impostare l' slugargomento rewritea shows:

register_taxonomy(
    'show_category',
    'show',
    array(
        'rewrite' => array( 'slug' => 'shows', 'with_front' => false ),
        // your other args...
    )
);

Quindi, registra il tuo tipo di post e imposta lo slug su shows/%show_category%e imposta l' has_archiveargomento su shows:

register_post_type(
    'show',
    array(
        'rewrite' => array( 'slug' => 'shows/%show_category%', 'with_front' => false ),
        'has_archive' => 'shows',
        // your other args...
    )
);

Infine, aggiungi un filtro per post_type_linksostituire la categoria di show nei permalink dei singoli show:

function wpa_show_permalinks( $post_link, $post ){
    if ( is_object( $post ) && $post->post_type == 'show' ){
        $terms = wp_get_object_terms( $post->ID, 'show_category' );
        if( $terms ){
            return str_replace( '%show_category%' , $terms[0]->slug , $post_link );
        }
    }
    return $post_link;
}
add_filter( 'post_type_link', 'wpa_show_permalinks', 1, 2 );

MODIFICARE

Dimenticato l' has_archiveargomento di cui register_post_typesopra, che dovrebbe essere impostato su shows.


1
Milo, grazie! Il filtro post_type_link era il pezzo mancante per me. Chiunque legga questa discussione con lo stesso problema, l'unica cosa da notare è che c'è un piccolo errore nella funzione wpa_show_permalinks, dove $ post-> post_type == 'show' dovrebbe effettivamente essere 'shows'. Grazie ancora Milo!
Paul T

4
Se stai modificando un'istanza di WordPress esistente, assicurati di andare su Impostazioni> Permalink e fare clic su Salva. Le modifiche apportate in Functions.php non avranno effetto fino a quando non lo fai.
Jay Neely,

2
Questo ha funzionato quasi per me in quanto la tassonomia viene visualizzata nella pagina del tipo di post, il / post_type / taxonomy / è una pagina legittima (in precedenza 404) ma il mio / post_type / taxonomy / post è 404'ing. Quando ho registrato la tassonomia sopra sia "show_category", ho notato che "show" veniva registrato, anche se solo la show_category è la tassonomia. Sto solo registrando la tassonomia.
Justinavery,

4
@Milo in qualche modo per farlo funzionare con la sotto-imposta come show / tax / subtax / post?
Benn,

2
Avrei tanto desiderato che funzionasse anche per me, ma ogni singolo finisce in un 404 ....
Beee
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.