04-04-2010
Comment faire marcher les sous-catégories avec le permalink
Ce hack sert à faire marcher les pages de sous-catégories dans une structure de permalink telle que
/%category%/%postname%/
Le premier fichier à hacker est le suivant:
/wp-includes/template-loader.php
Il faut ajouter au début du fichier le code suivant:
$category_test = get_category_by_slug($wp_query->query_vars['name']);
if(!empty($category_test))
{
$wp_query->query_vars['subcategory_name'] = $wp_query->query_vars['category_name'];
$wp_query->query_vars['category_name'] = $wp_query->query_vars['name'];
$wp_query->query_vars['cat'] = $category_test->cat_ID;
$wp_query->query_vars['name'] = '';
$wp_query->is_subcategory = true;
$wp_query->is_archive = true;
$wp_query->is_category = true;
$wp_query->is_page = false;
$wp_query->is_404 = false;
}
Ce code permet à l’engin de template de bien appeler notre script de catégorie lorsqu’il voit une sous-categorie.
Ensuite, il faut s’assurer que la page des catégorie sais faire la différence entre les deux, et qu’elle n’affiche pas les sous-éléments si c’est seulement la catégorie, et qu’elle recalcule sa liste si c’est une catégorie.
Par exemple, ce code s’assure que seulement les éléments de la catégorie demandées sont affichés.
$category_post = get_the_category();
$category_post = $category_post[0];
if($category_post->category_parent == $category_page->category_parent)
En ajoutant celle ligne on obtient un recalcul de la liste des posts, très utile dans le cas d’une sous-catégorie.
cat_ID.''); $wp_query->post_count = count($posts);?>
Le code total devient:
cat_ID.''); $wp_query->post_count = count($posts);?>$category_post = get_the_category();
$category_post = $category_post[0];
if($category_post->category_parent == $category_page->category_parent)
{?>
Enfin, il peut être intéressant d’afficher des liens vers les sous-catégories dans la page de la catégorie. Voici comment.
category_parent != 0) $category_parent = get_category($category_parent->category_parent); $sous_categories = get_categories('child_of=' . $category_parent->cat_ID); foreach($sous_categories as $sous_categorie) { ?> name;?>
Posté par Nadine St-Amand pour Les formations Accent Net dans Wordpress | RSS 2.0