Modificare lo slug del Custom Post Type
Sto lavorando con un tema child quindi non voglio modificare il file che registra un CPT Portfolio nel mio sito. Ho usato un plugin per cambiare il nome da Portfolio a Stories, ma il plugin non offre un'opzione per modificare lo slug.
Ho provato ad utilizzare la seguente funzione:
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);
Ma questo rimuove completamente Portfolio dalla barra laterale dell'amministrazione di WordPress.

Il filtro register_post_type_args
può essere utilizzato per modificare gli argomenti del tipo di post:
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;
}

Ha funzionato per me dopo aver applicato il passaggio aggiuntivo menzionato da @Felipe Romero: "aggiorna" i tuoi Permalink andando in Impostazioni > Permalink e salvando le modifiche.

@DaveRomsey, Possiamo usare lo stesso nome per lo slug della pagina e lo slug del custom post type?

@NarenVerma Tecnicamente puoi, ma ci saranno conflitti nei permalink. Io userei slug unici.

@DaveRomsey, In realtà ho creato un custom post type chiamato "blog". Ora ho anche creato una pagina blog e sì, confligge con l'URL. Quello che sto facendo è: devo mostrare tutti i post del blog su questo URL https://example.com/blog e ho anche bisogno di un URL per una pagina singola del blog chiamata https://example.com/blog/post-name

La risposta di @dave-romsey non ha funzionato per me, PHP continuava a dirmi Warning: Cannot use a scalar value as an array in /path/to/functions.php
Quindi ho optato per la soluzione con array_merge
.
Funzione completa da aggiungere al file functions.php
del tuo child theme:
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 );
Dopo aver caricato il codice, non dimenticare di "aggiornare" i tuoi Permalink andando in Impostazioni > Permalink e cliccando su Salva modifiche.
Saluti.

Questo mi ha portato al traguardo ma una cosa da notare è che array_merge
non sembra fondere i sotto-array. Quando ho rimosso lo slug
(impostato in modo personalizzato dal plugin) ha rimosso la base ma è anche tornato al nome predefinito dello slug del CPT. Sembra che fonda rewrite
nel resto degli $args
ma sostituisca completamente rewrite
, senza fondere anche quello. Conclusione - imposta tutti i valori di rewrite
.
