Ändern Sie den Slug "Benutzerdefinierter Beitragstyp"

10

Ich arbeite in einem untergeordneten Thema, daher möchte ich die Datei, in der ein Portfolio-CPT auf meiner Website registriert wird, nicht bearbeiten. Ich habe ein Plugin verwendet, um den Namen von Portfolio in Stories zu ändern, aber das Plugin bietet keine Option für den Slug.

Ich habe versucht, die folgende Funktion zu verwenden:

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);

Portfolio wird jedoch vollständig aus der Seitenleiste des WordPress-Administrators entfernt.

Darren Bachan
quelle

Antworten:

20

Der register_post_type_argsFilter kann verwendet werden, um Post-Typ-Argumente zu ändern:

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;
}
Dave Romsey
quelle
1
Tolle. Das hat funktioniert!
Darren Bachan
2
Dies funktionierte für mich, nachdem ich den von @Felipe Romero erwähnten zusätzlichen Schritt angewendet hatte: "Aktualisieren" Sie Ihre Permalinks, indem Sie zu Einstellungen> Permalinks gehen und auf Änderungen speichern klicken.
Ralf
5

@ Dave-Romsey Antwort funktionierte nicht für mich, PHP sagte mir immer wieder Warning: Cannot use a scalar value as an array in /path/to/functions.php Also ging ich diearray_merge Weg.

Vollständige Funktion, die Sie zur Themendatei Ihres Kindes hinzufügen müssen functions.php:

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 );

Vergessen Sie nach dem Hochladen Ihres Codes nicht, Ihre Permalinks zu "aktualisieren", indem Sie zu Einstellungen> Permalinks gehen und auf Änderungen speichern klicken .

Prost.

Felipe Romero
quelle
Dies brachte mich zur Ziellinie, aber eine Sache zu beachten ist, dass array_mergeSub-Arrays nicht zusammengeführt werden. Als ich das entfernte slug(wie es vom Plugin benutzerdefiniert festgelegt wurde), entfernte es die Basis, setzte aber auch auf den Standardnamen des cpt-Slugs zurück. Es scheint, dass es das rewrite'in den Rest des verschmelzen wird, $argsaber einfach alles ersetzen wird rewrite, nicht auch das verschmelzen. Fazit - setzen Sie alle Ihre rewriteWerte.
RTPHarry
@rtpHarry das ist wirklich nützlich zu wissen. Ich bin sicher, es wird anderen helfen. Danke für Ihren Beitrag!
Felipe Romero