wake-up-neo.net

Umschreiben des 'Rewrite'-Slugs für den benutzerdefinierten Beitragstyp, der vom Plugin verwendet wird

kurze frage: ich benutze ein plugin das einen benutzerdefinierten post-typ mit dem rewrite slug/projects/erstellt

Also myurl.com/projects/single-project

Ich möchte `projects/with umschreiben

'rewrite' => array('slug'=>''),

Gibt es einen Haken oder etwas, mit dem ich mich für die Funktion register_post_type() des externen Plugins verbinden kann?

Ich möchte, dass dieses Umschreiben in meiner functions.php stattfindet und nur, wenn dieses Plugin aktiviert ist. Ich kenne den Namen des benutzerdefinierten Post-Typs "ignition_product".

Freundliche Grüße, Matt


Aktualisieren

function modify_ign_projects() {
    if ( post_type_exists( 'ignition_product' ) ) {

        global $wp_post_types, $wp_rewrite;
        $wp_post_types['ignition_product']->hierarchical = true;
        $args = $wp_post_types['ignition_product'];
        //print_r( $args ); // [rewrite] => Array ( [slug] => projects
        $wp_rewrite->add_rewrite_tag("%spendenprojekte%", '(.+?)', "projects");
        add_post_type_support('ignition_product','page-attributes');
    }
}
add_action( 'init', 'modify_ign_projects', 100 );
2
mathiregister

Ich habe im Registrierungsablauf nach Post-Typen überall gesucht, aber keinen richtigen Weg (mithilfe von Filtern oder Aktionen) gefunden, um dies zu tun.

Alles, was Sie tun können, ist entweder den Post-Typ erneut mit einem anderen Slug zu registrieren (ich bevorzuge) oder nur die Codezeilen auszuführen, die WordPress ausführt, um die Umschreiberegeln in register_post_type zu erstellen.

Ich registriere diesen Beitragstyp mit slug book und ändere ihn mit diesem Trick. Ich bin nicht sicher, ob es zu 100% korrekt ist (da ich die Regeln für denselben Beitragstyp neu schreibe), aber es funktioniert.

add_action('registered_post_type', 'testbook', 10, 2);
function testbook($post_type, $args) {
    global $wp_rewrite;
    if ($post_type == 'book') {

        $args->rewrite['slug'] = 'changed_slug_book'; //write your new slug here

        if ( $args->has_archive ) {
                $archive_slug = $args->has_archive === true ? $args->rewrite['slug'] : $args->has_archive;
                if ( $args->rewrite['with_front'] )
                        $archive_slug = substr( $wp_rewrite->front, 1 ) . $archive_slug;
                else
                        $archive_slug = $wp_rewrite->root . $archive_slug;

                add_rewrite_rule( "{$archive_slug}/?$", "index.php?post_type=$post_type", 'top' );
                if ( $args->rewrite['feeds'] && $wp_rewrite->feeds ) {
                        $feeds = '(' . trim( implode( '|', $wp_rewrite->feeds ) ) . ')';
                        add_rewrite_rule( "{$archive_slug}/feed/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' );
                        add_rewrite_rule( "{$archive_slug}/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' );
                }
                if ( $args->rewrite['pages'] )
                        add_rewrite_rule( "{$archive_slug}/{$wp_rewrite->pagination_base}/([0-9]{1,})/?$", "index.php?post_type=$post_type" . '&paged=$matches[1]', 'top' );
        }

        $permastruct_args = $args->rewrite;
        $permastruct_args['feed'] = $permastruct_args['feeds'];
        add_permastruct( $post_type, "{$args->rewrite['slug']}/%$post_type%", $permastruct_args );
    }
}
2
Sumit

Rufen Sie gerade flush_rewrite_rules auf?

Wenn Sie den Slug eines benutzerdefinierten Post-Typs ändern möchten, müssen Sie auch die flush_rewrite_rules aufrufen.

Weitere Dokumentation finden Sie hier Einrichten von benutzerdefinierten Posttyp-Archiven in WP3.1? Etwas Glück?

Und hier https://codex.wordpress.org/Function_Reference/flush_rewrite_rules

3
Page Carbajal