web-dev-qa-db-fra.com

Réécriture du slug 'rewrite' pour le type de post personnalisé utilisé par le plugin

petite question: j'utilise un plugin qui crée un type de post personnalisé avec le slug de réécriture/projects /

Alors myurl.com/projects/single-project

Je veux réécrire `projets/avec

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

Existe-t-il un point d'ancrage ou quelque chose qui me permet d'accrocher la fonction register_post_type() du plug-in externe?

Je veux que cette réécriture se produise dans mon functions.php et seulement si ce plugin est activé. Je connais le nom du type de produit personnalisé "d'allumage"

Cordialement, Matt


Mettre à jour

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

J'ai cherché partout dans le flux d'enregistrement de type de publication, mais je n'ai pas trouvé le bon moyen (en utilisant un filtre ou une action) de le faire.

Tout ce que vous pouvez faire est de réenregistrer le type de publication avec un slug différent (je préfère) ou simplement d'exécuter les lignes de code exécutées par WordPress pour créer les règles de réécriture dans register_post_type.

J'enregistre ce type de message avec slug book et le change en utilisant cette astuce. Je ne suis pas sûr qu'il soit correct à 100% (car je réécris les règles pour le même type de message), mais cela fonctionne.

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

Appelez-vous flush_rewrite_rules à tout moment?

Si vous souhaitez modifier le slug d'un type de publication personnalisé, vous devez également appeler flush_rewrite_rules.

Vous pouvez trouver plus de documentation ici Configurer des archives de type publication personnalisées dans WP3.1? Un peu de chance?

Et ici https://codex.wordpress.org/Function_Reference/flush_rewrite_rules

3
Page Carbajal