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.
Ralf
@DaveRomsey, Possiamo usare lo stesso nome per lo slug della pagina e lo slug del custom post type?
Naren Verma
@NarenVerma Tecnicamente puoi, ma ci saranno conflitti nei permalink. Io userei slug unici.
Dave Romsey
@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
Naren Verma
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.
rtpHarry