Come utilizzare un template personalizzato per determinati URL

10 nov 2014, 17:37:12
Visualizzazioni: 3.49K
Voti: 1

Sto costruendo un semplice sito in due lingue. Utilizzo Polylang per i post e ho anche un custom post type chiamato "Artist". Per mantenere le cose semplici nel backend, non sto usando Polylang per questo post type, ma solo alcuni campi personalizzati per la lingua per ogni artista.

Quando carico site.com/artist/johnny-cash, il mio tema utilizza il template single-artist.php. La domanda è: come posso fare per caricare un template personalizzato quando carico, ad esempio, site.com/en/artist/johnny-cash?

Quindi in sintesi:

site.com/artist/johnny-cash -> Carica single-artist.php (perfetto)

site.com/en/artist/johnny-cash -> Come reindirizzare a un template personalizzato?

7
Commenti

come hai fatto in modo che entrambi gli URL puntino al tuo custom post type?

Milo Milo
10 nov 2014 17:53:54

Non sono sicuro di averti capito (probabilmente non mi sono spiegato bene). Ho registrato un custom post type, e il suo slug è "artist", quindi WP carica automaticamente single-artist.php quando carichi /artist/john-doe

Ignacio Ignacio
10 nov 2014 17:56:32

e come mai visitando quell'URL con /en/ preposto viene comunque visualizzato il tuo custom post type? oppure attualmente restituisce un 404?

Milo Milo
10 nov 2014 17:59:26

Al momento, reindirizza alla stessa pagina senza /en/, come /artist/johnny-cash. Non ho idea del perché. Pensavo che dovesse restituire un 404, ma invece no...

Ignacio Ignacio
10 nov 2014 18:00:52

WordPress cerca di capire cosa intendevi caricare prima di restituire un 404 e reindirizza a quello. Quindi hai un passaggio aggiuntivo prima di poter gestire i template, e cioè aggiungere regole di riscrittura per fare in modo che quelle richieste /en/ carichino l'oggetto corretto.

Milo Milo
10 nov 2014 18:05:27

@Milo Grazie. Potresti indicarmi qualche documentazione o esempio su qualcosa di simile?

Ignacio Ignacio
10 nov 2014 18:08:57

Se cerchi add_rewrite_rule qui troverai molti esempi. Al momento non ho tempo di scrivere il codice, ma posso indicarti una direzione. Quando aggiungi la regola di riscrittura per gestire le richieste del tuo custom post type con /en/, puoi anche aggiungere una query var extra, così puoi identificare quelle richieste separatamente da quelle senza en. Poi puoi filtrare single_template, verificare quella query var e caricare un template speciale in quel caso.

Milo Milo
10 nov 2014 18:12:17
Mostra i restanti 2 commenti
Tutte le risposte alla domanda 1
1

Grazie a @Milo nei commenti, pubblicherò la mia risposta:

Per prima cosa ho aggiunto questa regola:

add_rewrite_rule(  
    "en/artist/([^/]+)/?",  
    'index.php?pagename=post_type=artist&artist=$matches[1]&gal_template=en',
    "top"); 

Poi questo filtro:

add_filter( 'query_vars', 'gal_query_vars' );
function gal_query_vars( $query_vars )
{
    $query_vars[] = 'gal_template';
    return $query_vars;
}

Infine, ho filtrato il template single:

add_filter( 'single_template', 'get_custom_post_type_template' );
function get_custom_post_type_template($single_template) {
     global $post;

     if ($post->post_type == 'artist') {

            $q = get_query_var('gal_template');

            if ($q === 'en') {
                $single_template = dirname( __FILE__ ) . '/single-artist-en.php';
            }


     }
     return $single_template;
}

Poi su single-artist-en.php ho fatto:

get_template_part('single-artist')

Ma potresti fare qualsiasi cosa ti serva.

10 nov 2014 19:28:38
Commenti

Ecco la soluzione effettiva e completa fornita da WordPress: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule

Imran Zahoor Imran Zahoor
12 set 2015 20:18:15