Come utilizzare un template personalizzato per determinati URL
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?

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.

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