Schimbă slug-ul pentru Custom Post Type
Lucrez cu o temă copil și nu vreau să editez fișierul care înregistrează Custom Post Type-ul Portfolio pe site-ul meu. Am folosit un plugin pentru a schimba numele din Portfolio în Stories, dar plugin-ul nu oferă o opțiune pentru slug.
Am încercat să folosesc următoarea funcție:
function change_slug_of_post_type_portfolio() {
register_post_type('portfolio', array('rewrite' => array ('slug' => 'stories',)));
}
add_action('init', 'change_slug_of_post_type_portfolio', 20);
Dar aceasta elimină complet Portfolio din bara laterală de administrare WordPress.
Filtrul register_post_type_args poate fi folosit pentru a modifica argumentele tipului de postare:
add_filter( 'register_post_type_args', 'wpse247328_register_post_type_args', 10, 2 );
function wpse247328_register_post_type_args( $args, $post_type ) {
if ( 'portfolio' === $post_type ) {
$args['rewrite']['slug'] = 'stories';
}
return $args;
}
A funcționat pentru mine după ce am aplicat pasul suplimentar menționat de @Felipe Romero: "reîmprospătați" legăturile permanente mergând la Setări > Legături permanente și apăsând Salvare modificări.
Ralf
@DaveRomsey, Putem folosi același nume pentru slug-ul paginii și slug-ul tipului de postare personalizat?
Naren Verma
@NarenVerma Tehnic poți, dar vor exista conflicte de legături permanente. Aș folosi slug-uri unice.
Dave Romsey
@DaveRomsey, De fapt am creat un tip de postare personalizat numit "blog". Acum am creat și o pagină de blog și da, intră în conflict cu URL-ul. Ce fac este că trebuie să afișez toate articolele de blog la această adresă https://example.com/blog și am nevoie și de un URL pentru un articol de blog individual numit https://example.com/blog/nume-postare
Naren Verma
Răspunsul lui @dave-romsey nu a funcționat pentru mine, PHP continua să-mi afișeze Warning: Cannot use a scalar value as an array in /path/to/functions.php
Așa că am ales calea cu array_merge.
Funcția completă pe care trebuie să o adaugi în fișierul functions.php al temei child:
function update_portfolios_slug( $args, $post_type ) {
if ( 'portfolios' === $post_type ) {
//$args['rewrite']['slug'] = 'presidentes';
$my_args = array(
'rewrite' => array( 'slug' => 'presidentes', 'with_front' => false )
);
return array_merge( $args, $my_args );
}
return $args;
}
add_filter( 'register_post_type_args', 'update_portfolios_slug', 10, 2 );
După ce încarci codul, nu uita să "reîmprospătezi" Permalink-urile mergând la Setări > Permalink-uri și apăsând pe Salvează modificările.
Noroc.
Aceasta m-a adus la linia de sosire, dar un lucru de remarcat este că array_merge nu pare să combine sub-array-uri. Când am eliminat slug-ul (deoarece era setat personalizat de către plugin), acesta a eliminat baza, dar a și resetat la numele implicit al slug-ului CPT. Se pare că va combina rewrite-ul în restul $args-urilor, dar va înlocui întregul rewrite, fără a-l combina și pe acesta. Concluzie - setează toate valorile tale rewrite.
rtpHarry