web-dev-qa-db-fra.com

Changer le nom de l'archive personnalisée de publication

J'ai un type de message personnalisé acme_reviews. Je l'ai nommé comme suggéré dans les tutoriels pour éviter les conflits futurs. Mais je veux que sa page d'archive soit simplement acme.com/reviews, pas acme.com/acme_reviews. Comment puis-je y arriver? Ceci est mon code:

function create_reviews_post_type() {
    register_post_type('acme_reviews', array(
        'labels' => array(
            'name' => __('Reviews'),
            'singular_name' => __('Review')
            ),
        'menu_position' => 5,
        'public' => true,
        'has_archive' => true,
        )
    );
}
add_action('init', 'create_reviews_post_type');
1
Kleeramne

L'option register_post_type has_archive accepte également une chaîne. Cette chaîne sera utilisée pour les archives. Voir les changements dans le code ci-dessous:

function create_reviews_post_type() {
    register_post_type('acme_reviews', array(
        'labels' => array(
            'name' => __('Reviews'),
            'singular_name' => __('Review')
            ),
        'menu_position' => 5,
        'public' => true,
        'has_archive' => 'reviews',
    );
}
add_action('init', 'create_reviews_post_type');
2
Fencer04

Selon le codex (et ce qui fonctionne pour moi!), Il suffit d'utiliser une réécriture dans le tableau. Les deux options fonctionnent, mais wordpress suggère d'utiliser la réécriture. Ci-dessous, la citation directement du codex:

has_archive (boolean ou string) (facultatif) Active les archives de type publication. Utilisera $ post_type comme archive slug par défaut.

Par défaut: false

Remarque: Générera les règles de réécriture appropriées si la réécriture est activée. Utilisez également rewrite pour changer le slug utilisé .

ASSUREZ-VOUS DE RINCER LES RÈGLES DE PERMALINK. si cela se trouve dans un plugin, je suggère toujours d'ajouter un init qui vide les règles lorsque le plugin est activé.

Voici le code, remarquez que j’ai aussi personnalisé le nom de la fonction pour les mêmes raisons que vous personnalisez le nom du post lui-même.

function create_acme_reviews_post_type() {  //namespaced your function too..
    register_post_type('acme_reviews', array(
        'labels' => array(
            'name' => __('Reviews'),
            'singular_name' => __('Review')
            ),
        'menu_position' => 5,
        'public' => true,
        'has_archive' => true,
        'rewrite' => array( 'slug' => 'reviews' ), //changes permalink structure
        )
    );
}
add_action('init', 'create_acme_reviews_post_type'); //namespaced function call too..
2
rudtek