Modificare lo slug del Custom Post Type

25 nov 2016, 00:10:04
Visualizzazioni: 32K
Voti: 11

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.

0
Tutte le risposte alla domanda 2
5
31

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;
}
25 nov 2016 00:18:14
Commenti

Fantastico. Ha funzionato!

Darren Bachan Darren Bachan
25 nov 2016 08:42:15

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 Ralf
6 feb 2020 18:06:36

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

Naren Verma Naren Verma
11 feb 2022 17:27:37

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

Dave Romsey Dave Romsey
12 feb 2022 19:59:53

@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 Naren Verma
14 feb 2022 07:41:21
2

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.

19 giu 2017 03:41:47
Commenti

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 rtpHarry
29 nov 2019 14:56:37

@rtpHarry questa informazione è davvero utile. Sono sicuro che aiuterà altri. Grazie per il tuo contributo!

Felipe Romero Felipe Romero
5 dic 2019 22:36:57