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

Écrire une réponse