Schimbă slug-ul pentru Custom Post Type

25 nov. 2016, 00:10:04
Vizualizări: 32K
Voturi: 11

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.

0
Toate răspunsurile la întrebare 2
5
31

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

Uimitor. A funcționat!

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

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

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

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

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

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

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

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.

19 iun. 2017 03:41:47
Comentarii

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

@rtpHarry această informație este foarte utilă. Sunt sigur că îi va ajuta pe alții. Mulțumesc pentru contribuție!

Felipe Romero Felipe Romero
5 dec. 2019 22:36:57