Template sous catégorie Wordpress

WRInaute impliqué
Bonjour,

Pour personnaliser manuellement la catégorie wordpress on modifie le fichier category.php et on peut aussi créer des templates poru la catégorie on utilisant l'ID (category-id.php)

Ce que je cherche c'est la sous-catégorie, je veux créer un template sous-categorie.

J'ai utilisé ce code :

Code:
add_action('template_redirect', 'inherit_cat_template');

function inherit_cat_template() {
if (is_category()) {
$catid = get_query_var('cat');
$cat = &get_category($catid);
$parent = $cat->category_parent;
while ($parent){
$cat = &get_category($parent);
if ( file_exists(TEMPLATEPATH . '/category-child.php') ) {
include (TEMPLATEPATH . '/category-child.php');
exit;
}
$parent = $cat->category_parent;
}
}
}

Ca marche nikel mais while(have_posts()) m'affiche tous les articles de la catégorie parente !

Une idée ? Merci :oops:
 
WRInaute accro
Au lieu de faire compliqué, fait un template category-id.php avec l'id de la sous catégorie, ou utilise get_template_part pour personnaliser uniquement l'affichage des articles.
 
WRInaute accro
Donc dans ton category.php tu rajoutes un test à l'endroit où tu veux varier l'affichage

Code:
$currentcat = get_query_var('cat');

if ( get_category_parents ( $currentcat ) ) 
   { get_template_part ( 'categoryloop' , 'souscategorie' ) ; }
else {
.... le contenu de ton fichier category.php ou bien get_template_part ( 'categoryloop', 'maincategory' ) ;  }

avec un fichier categoryloop-souscategorie.php et categoryloop-maincategory.php
 
WRInaute impliqué
Merci de vos réponses Marie, c'est fait j'utilise le code (dans category.php) :
Code:
<?php
$currentcat = get_query_var('cat');

if ( get_category_parents ( $currentcat ) )
   { get_template_part ( 'categoryloop' , 'souscategorie' ) ; }
else {
get_template_part ( 'categoryloop', 'maincategory' ) ;

  }

?>

J'ai créé categoryloop-souscategorie.php et categoryloop-maincategory.php

Le problème maintenant que ce soit dans la catégorie parente ou la sous catégorie j'ai toujours le contenu de ( categoryloop-souscategorie.php) !


Sinon y a t'il un moyen de tester par niveau de catégorie ?
1 catégorie parente
2 sous catégorie
3 sous sous catégorie
mot clé depth
 
WRInaute accro
fais des var_dump de tes variables pour voir ce que tu récupères.
Sinon travaille avec get_category_ancestors qui renvoie des objets plus faciles à manipuler
 
WRInaute impliqué
J'ai utilisé ceci :

Code:
<?php
if ( is_category() ) {
$this_category = get_category($cat);
if($this_category->category_parent):
get_template_part ( 'categoryloop' , 'souscategorie' ) ;
else:
get_template_part ( 'categoryloop', 'maincategory' ) ;
endif;
} 
?>

Ceci résoud le problème mais dans sous catégorie j'ai tt les articles de la parente catégorie quand je met :
Code:
<?php if(have_posts()) : ?><?php query_posts('showposts=6&order=ASC');while(have_posts()) : the_post(); ?>
mais si j'enlève query_posts('showposts=6&order=ASC');
Code:
<?php if(have_posts()) : ?><?php while(have_posts()) : the_post(); ?>

Là tout marche bien il m'affiche que les articles de la sous-catégorie !
Une idée ?
 
WRInaute impliqué
Pour faciliter les choses (car j'ai trois niveaux) j'utilise ce code :

Code:
<?php

$cats_str = get_category_parents($cat, false, '%#%');
$cats_array = explode('%#%', $cats_str);
$cat_depth = sizeof($cats_array)-2;


if ( $cat_depth==0 ) {
get_template_part ( 'categoryloop', 'maincategory' ) ;
}

if ( $cat_depth==1 ) {
get_template_part ( 'categoryloop' , 'souscategorie' ) ;
}

if ( $cat_depth==2 ) {
get_template_part ( 'categoryloop' , 'soussouscategorie' ) ;
}

?>

Mais j'ai toujours le problème de query_posts, si j'enlève ce dernier tout marche très bien sinon il m'affiche tous les articles de la catégorie mère au lieu de la catégorie child
 
WRInaute accro
Tu ferais surtout mieux de ne pas faire un query posts, sur ce genre de choses tu n'en as pas besoin.
De plus là tu recharge query posts si tu as des articles, c'est illogique
 
WRInaute impliqué
Mais si j'ai besoin d'afficher que le dernier post de la sous sous catégorie donc showposts=1 donc effectivement je l'utilise pour appeler l'article dernier seulement !
 
Discussions similaires
Haut