Le titre dit à peu près tout. Comment est-il possible d’obtenir un tableau multidimensionnel PHP de catégories WordPress reflétant la hiérarchie donnée des catégories.
Donc, voici une fonction qui peut être utilisée comme WordPress get_categories mais renvoie un tableau hiérarchique. Pour cela, une propriété child_categories
est ajoutée à chaque objet WP_TERM
:
function get_categories_hierarchical( $args = array() ) {
if( !isset( $args[ 'parent' ] ) ) $args[ 'parent' ] = 0;
$categories = get_categories( $args );
foreach( $categories as $key => $category ):
$args[ 'parent' ] = $category->term_id;
$categories[ $key ]->child_categories = get_categories_hierarchical( $args );
endforeach;
return $categories;
}
Cette fonction peut être utilisée par exemple comme ceci (pour construire une ligne d'entrées de sélection HTML à partir des deux premiers niveaux de la hiérarchie des catégories):
<?php if( $categories = get_categories_hierarchical() ): foreach( $categories as $category ): ?>
<label for="filter_cat_<?php echo $category->term_id; ?>"><?php echo $category->name; ?></label>
<select name="filter_cat_<?php echo $category->term_id; ?>" id="filter_cat_<?php echo $category->term_id; ?>">
<?php if( $category->child_categories ) foreach( $category->child_categories as $subcategory ): ?>
<option value="<?php echo $subcategory->term_id; ?>"<?php if( $_GET[ 'filter_cat_' . $category->term_id ] == $subcategory->term_id ) echo ' selected'; ?>><?php echo $subcategory->name; ?></option>
<?php endforeach; ?>
</select>
<?php endforeach; endif; ?>
Consultez également wp_dropdown_categories et wp_list_categories qui peut déjà faire ce dont vous avez besoin sans avoir besoin d’une fonction supplémentaire.