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.

@DaveRomsey, Putem folosi același nume pentru slug-ul paginii și slug-ul tipului de postare personalizat?

@NarenVerma Tehnic poți, dar vor exista conflicte de legături permanente. Aș folosi slug-uri unice.

@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

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
.
