Cum să utilizezi un șablon personalizat pentru anumite URL-uri

10 nov. 2014, 17:37:12
Vizualizări: 3.49K
Voturi: 1

Construiesc un site simplu în două limbi. Folosesc Polylang pentru articole și am și un tip de postare personalizat, "Artist". Pentru a păstra lucrurile simple în backend, nu folosesc Polylang, doar câteva câmpuri personalizate pentru limba fiecărui artist.

Când încarc site.com/artist/johnny-cash folosesc șablonul single-artist.php din tema mea. Întrebarea este, cum aș putea să încarc un șablon personalizat când accesez, de exemplu, site.com/en/artist/johnny-cash?

Deci, pe scurt:

site.com/artist/johnny-cash -> Încarcă single-artist.php (perfect)

site.com/en/artist/johnny-cash -> Cum redirecționez către un șablon personalizat?

7
Comentarii

cum ai făcut ca ambele URL-uri să pointeze către tipul tău personalizat de postare?

Milo Milo
10 nov. 2014 17:53:54

Nu sunt sigur că te-am înțeles (probabil nu m-am exprimat clar). Am înregistrat un tip personalizat de postare, iar slug-ul său este "artist", așa că WP încarcă automat single-artist.php când accesezi /artist/john-doe

Ignacio Ignacio
10 nov. 2014 17:56:32

și cum se face că accesând acel URL cu /en/ adăugat în față tot afișează tipul tău de postare personalizată? sau în prezent dă eroare 404?

Milo Milo
10 nov. 2014 17:59:26

În acest moment, redirecționează către aceeași pagină fără /en/, precum /artist/johnny-cash. Nu știu de ce. Mă gândeam că ar trebui să dea 404, dar nu...

Ignacio Ignacio
10 nov. 2014 18:00:52

WordPress încearcă să înțeleagă ce ai vrut să încarci înainte de a returna un 404 și redirecționează către acel lucru. Deci ai un pas suplimentar înainte de a te ocupa de template-uri, și anume adăugarea de reguli de rescriere pentru a face ca acele cereri /en/ să încarce obiectul corect.

Milo Milo
10 nov. 2014 18:05:27

@Milo Mulțumesc. Poți să-mi arăți niște documentație sau un exemplu despre ceva similar?

Ignacio Ignacio
10 nov. 2014 18:08:57

Dacă cauți add_rewrite_rule aici, vei găsi multe exemple. Nu am timp să scriu codul în acest moment, dar te pot îndruma în direcția corectă. Când adaugi regula de rescriere pentru a gestiona cererile pentru tipul tău personalizat de postări cu /en/, poți adăuga și o variabilă de interogare suplimentară, astfel încât să poți identifica acele cereri separat de cele fără en. Apoi poți filtra single_template, verifica acea variabilă de interogare și încărca un șablon special în acel caz.

Milo Milo
10 nov. 2014 18:12:17
Arată celelalte 2 comentarii
Toate răspunsurile la întrebare 1
1

Mulțumesc lui @Milo pentru comentarii, voi posta răspunsul meu:

În primul rând am adăugat această regulă:

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

Apoi acest filtru:

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

În final, am filtrat șablonul 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;
}

Apoi în single-artist-en.php am făcut:

get_template_part('single-artist')

Dar poți face orice ai nevoie.

10 nov. 2014 19:28:38
Comentarii

Aici este soluția actuală și completă oferită de WordPress: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule

Imran Zahoor Imran Zahoor
12 sept. 2015 20:18:15