feat: Added more option to handle subcategories
This commit is contained in:
@@ -311,6 +311,33 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
|
||||
]
|
||||
);
|
||||
|
||||
$this->add_control(
|
||||
'only_subcats_of_selected',
|
||||
[
|
||||
'label' => esc_html__('Afficher seulement les sous-catégories des catégories sélectionnées', 'category-grid-widget-for-elementor'),
|
||||
'type' => \Elementor\Controls_Manager::SWITCHER,
|
||||
'label_on' => esc_html__('Oui', 'category-grid-widget-for-elementor'),
|
||||
'label_off' => esc_html__('Non', 'category-grid-widget-for-elementor'),
|
||||
'return_value' => 'yes',
|
||||
'default' => 'no',
|
||||
'description' => esc_html__('Si activé, seules les sous-catégories des catégories choisies seront affichées (et pas les catégories parentes).', 'category-grid-widget-for-elementor'),
|
||||
]
|
||||
);
|
||||
|
||||
// Contrôle : Afficher les sous-catégories de la page catégorie actuelle
|
||||
$this->add_control(
|
||||
'subcats_of_current',
|
||||
[
|
||||
'label' => esc_html__('Afficher les sous-catégories de la catégorie actuelle', 'category-grid-widget-for-elementor'),
|
||||
'type' => \Elementor\Controls_Manager::SWITCHER,
|
||||
'label_on' => esc_html__('Oui', 'category-grid-widget-for-elementor'),
|
||||
'label_off' => esc_html__('Non', 'category-grid-widget-for-elementor'),
|
||||
'return_value' => 'yes',
|
||||
'default' => 'no',
|
||||
'description' => esc_html__('Si activé et que l’on est sur une page d’archive de catégorie, affichera ses sous-catégories.', 'category-grid-widget-for-elementor'),
|
||||
]
|
||||
);
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Contrôle : Ne montrer que les catégories avec image
|
||||
$this->add_control(
|
||||
@@ -426,16 +453,49 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
|
||||
|
||||
// Déterminer les catégories à afficher (inclure les sous-catégories si demandé).
|
||||
$category_ids_to_show = $selected_ids;
|
||||
if (!empty($settings['show_subcategories']) && $settings['show_subcategories'] === 'yes') {
|
||||
// Ajouter les sous-catégories de chaque catégorie sélectionnée.
|
||||
foreach ($selected_ids as $cat_id) {
|
||||
$child_ids = get_term_children($cat_id, 'category');
|
||||
if (is_array($child_ids) && !empty($child_ids)) {
|
||||
$category_ids_to_show = array_merge($category_ids_to_show, $child_ids);
|
||||
}
|
||||
// if (!empty($settings['show_subcategories']) && $settings['show_subcategories'] === 'yes') {
|
||||
// // Ajouter les sous-catégories de chaque catégorie sélectionnée.
|
||||
// foreach ($selected_ids as $cat_id) {
|
||||
// $child_ids = get_term_children($cat_id, 'category');
|
||||
// if (is_array($child_ids) && !empty($child_ids)) {
|
||||
// $category_ids_to_show = array_merge($category_ids_to_show, $child_ids);
|
||||
// }
|
||||
// }
|
||||
// // Éliminer les doublons d'ID au cas où.
|
||||
// $category_ids_to_show = array_unique($category_ids_to_show);
|
||||
// }
|
||||
// 1) Cas : on veut les sous-catégories de la page actuelle
|
||||
if ('yes' === $settings['subcats_of_current']) {
|
||||
$queried = get_queried_object();
|
||||
if ($queried && isset($queried->term_id) && 'category' === $queried->taxonomy) {
|
||||
$category_ids_to_show = get_term_children($queried->term_id, 'category');
|
||||
} else {
|
||||
// si pas en archive catégorie, rien à afficher
|
||||
return;
|
||||
}
|
||||
|
||||
// 2) Sinon, on part des catégories sélectionnées
|
||||
} else {
|
||||
$category_ids_to_show = $selected_ids;
|
||||
|
||||
// Si on veut uniquement leurs sous-catégories
|
||||
if ('yes' === $settings['only_subcats_of_selected']) {
|
||||
$sub_ids = [];
|
||||
foreach ($selected_ids as $cat_id) {
|
||||
$children = get_term_children($cat_id, 'category');
|
||||
if (is_array($children)) {
|
||||
$sub_ids = array_merge($sub_ids, $children);
|
||||
}
|
||||
}
|
||||
$category_ids_to_show = array_unique($sub_ids);
|
||||
}
|
||||
// Sinon, l’ancienne logique : on ajoute ou pas les sous-catégories selon show_subcategories
|
||||
elseif ('yes' === $settings['show_subcategories']) {
|
||||
foreach ($selected_ids as $cat_id) {
|
||||
$category_ids_to_show = array_merge($category_ids_to_show, get_term_children($cat_id, 'category') ?: []);
|
||||
}
|
||||
$category_ids_to_show = array_unique($category_ids_to_show);
|
||||
}
|
||||
// Éliminer les doublons d'ID au cas où.
|
||||
$category_ids_to_show = array_unique($category_ids_to_show);
|
||||
}
|
||||
|
||||
// Préparer les args pour get_terms() – on ne précise PAS le tri si c'est par count
|
||||
@@ -511,7 +571,7 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
|
||||
// Rendu HTML
|
||||
echo '<div class="elementor-category-grid ' . esc_attr($grid_class) . '">';
|
||||
foreach ($terms as $term) {
|
||||
$thumbnail_id = get_term_meta( $term->term_id, 'thumbnail_id', true );
|
||||
$thumbnail_id = get_term_meta($term->term_id, 'thumbnail_id', true);
|
||||
echo '<div class="category-card">';
|
||||
echo '<a href="' . esc_url(get_term_link($term)) . '">';
|
||||
if (esc_url($term->_image_url)) {
|
||||
|
||||
Reference in New Issue
Block a user