Depuis la version 3.0 de WordPress 2 fonctions extrêmement utile ont fait leur apparition. Les fonction register_post_type et register_taxonomy permettent respectivement de créer de nouveaux contenus et de nouvelles taxonomies. Bien que très pratique et relativement facile à utiliser, ces deux fonction peuvent poser des problèmes notamment au niveau des permalinks.

Lorsque vous déclarez une des deux fonction register_post_type ou register_taxonomy deux éléments sont déterminants pour faire fonctionner les permalinks. Prenons l’exemple d’un type de post que l’on vas appeler “Fruit” et de la taxonomie “couleur” :

add_action( 'init', 'create_post_type_fruit' , 0);
function create_post_type_fruit() {
  register_post_type( 'fruit',
    array(
      'labels' => array(
        'name' => __( 'Les fruits' ),
      ),
      'public' => true,
      'rewrite' => array(
         'slug' => 'fruit'),
      'query_var' => 'fruit'
    )
  );
 
  register_taxonomy(
    'couleur',
    'fruit',
    array(
      'label' => __('Couleur du fruit'),
      'rewrite' => array(
        'slug' => 'couleur'),
      'query_var' => 'couleur'
    )
  );
}

Dans notre exemple le nouveau type “fruits” aura comme préfixe dans les url l’élément “fruit”. Ainsi on pourra avoir des URL sous la forme : http://www.le-nom-de-domaine.paf/fruit/le-titre-de-l-article De même, la taxonomie ‘couleur’ aura comme préfixe dans les url ‘couleur’.

Le deux éléments a bien configurer dans l’exemple ci-dessus sont ‘query_var‘ et ‘slug‘.

Cependant si vous testez ça sur le plugin que vous être en train de développer, cela ne marchera pas. Vous aurez inévitablement des erreur 404. Cela est dû au fait que les permalinks sont mis en cache par wordpress et ne sont pas mis à jour automatiquement. Pour régler cela deux options :

  • Soit vous allez dans “réglages > permaliens” puis vous cliquez sur “Enregistrer les modifications” (aucune option a modifier) et c’est bon, votre cache et supprimé et sera régénéré au prochain rechargement de page.
  • Soit vous supprimez l’option ‘rewrite_rules’ ( delete_option(‘rewrite_rules’);  ou directement dans la base de donnée dans la table wp_options)

Si même après ça vos permaliens ne marchent pas, vérifiez le hook où vous enregistrez vos post type et taxonomies. Vous pouvez ne pouvez pas les enregistrer avant le hook ‘init’.

Pour plus d’options de configuration rendez-vous sur le Codex : custom_post_type et custom_taxonomie

A lire également :

    Aucun résultat

2 commentaires

  • Yoann (1 comments), le 21 mai 2012

    Merci pour les infos ! J’avais des problèmes de 404 avec les liens taxo et effectivement, le init doit apparaître avant la fonction !

  • madvic (1 comments), le 23 juin 2013

    Merci bcp !
    Ca m’a bien aidé à comprendre…

Poster un commentaire

Subscribe without commenting