diff --git a/category-grid-widget-for-elementor.php b/category-grid-widget-for-elementor.php
new file mode 100644
index 0000000..392038e
--- /dev/null
+++ b/category-grid-widget-for-elementor.php
@@ -0,0 +1,230 @@
+ esc_js(__('Sélectionner une image de catégorie', 'category-grid-widget-for-elementor')),
+ 'button' => esc_js(__('Sélectionner', 'category-grid-widget-for-elementor')),
+ ]
+ );
+}
+add_action('admin_enqueue_scripts', 'ccgw_enqueue_media_uploader');
+
+// 1) Déclarez la colonne "Image" dans le tableau des catégories
+add_filter('manage_edit-category_columns', function ($columns) {
+ $new = [];
+ foreach ($columns as $key => $label) {
+ $new[$key] = $label;
+ if ('name' === $key) {
+ // après la colonne "Nom", on insère notre colonne "Image"
+ $new['category_image'] = esc_html__('Image', 'category-grid-widget-for-elementor');
+ }
+ }
+ return $new;
+});
+
+// 2) Remplissez la colonne "Image"
+add_filter('manage_category_custom_column', function ($out, $column, $term_id) {
+ if ('category_image' === $column) {
+ $thumb_id = get_term_meta($term_id, 'thumbnail_id', true);
+ if ($thumb_id) {
+ // Affiche la version 'thumbnail' de l'image
+ return wp_get_attachment_image($thumb_id, 'thumbnail', false, [
+ 'style' => 'max-width:60px;height:auto;'
+ ]);
+ }
+ }
+ return $out;
+}, 10, 3);
+
+// 3) Un peu de CSS pour la largeur de colonne et la mise en forme
+add_action('admin_head-edit-tags.php', function () {
+ echo '';
+});
+
+/**
+ * Affiche le champ d'upload dans le formulaire de création de catégorie.
+ */
+function ccgw_category_image_field($taxonomy)
+{ ?>
+
+term_id, 'thumbnail_id', true);
+ $image_url = $image_id ? wp_get_attachment_thumb_url($image_id) : '';
+ ?>
+
+ |
+
+ |
+
+
+
+
+ 'max-width:60px;height:auto;']
+ );
+ ?>
+
+
+
+
+
+
+ |
+
+
+register(new \Elementor_Category_Grid_Widget());
+}
+add_action('elementor/widgets/register', 'register_category_grid_widget');
+
+/**
+ * Enqueue styles front-end pour le widget.
+ */
+function ccgw_enqueue_front_styles()
+{
+ // Ne charger que si Elementor est actif
+ if (defined('ELEMENTOR_VERSION')) {
+ wp_enqueue_style(
+ 'ccgw-category-grid-style',
+ plugin_dir_url(__FILE__) . 'css/style.css',
+ [],
+ '1.2.1'
+ );
+ }
+}
+add_action('wp_enqueue_scripts', 'ccgw_enqueue_front_styles');
diff --git a/elementor-category-grid-widget.php b/elementor-category-grid-widget.php
deleted file mode 100644
index cce84fe..0000000
--- a/elementor-category-grid-widget.php
+++ /dev/null
@@ -1,184 +0,0 @@
- esc_js( __( 'Sélectionner une image de catégorie', 'category-grid-widget' ) ),
- 'button' => esc_js( __( 'Sélectionner', 'category-grid-widget' ) ),
- ]
- );
-}
-add_action( 'admin_enqueue_scripts', 'ccgw_enqueue_media_uploader' );
-
-// 1) Déclarez la colonne "Image" dans le tableau des catégories
-add_filter( 'manage_edit-category_columns', function( $columns ) {
- $new = [];
- foreach ( $columns as $key => $label ) {
- $new[ $key ] = $label;
- if ( 'name' === $key ) {
- // après la colonne "Nom", on insère notre colonne "Image"
- $new['category_image'] = esc_html__( 'Image', 'category-grid-widget' );
- }
- }
- return $new;
-} );
-
-// 2) Remplissez la colonne "Image"
-add_filter( 'manage_category_custom_column', function( $out, $column, $term_id ) {
- if ( 'category_image' === $column ) {
- $thumb_id = get_term_meta( $term_id, 'thumbnail_id', true );
- if ( $thumb_id ) {
- // Affiche la version 'thumbnail' de l'image
- return wp_get_attachment_image( $thumb_id, 'thumbnail', false, [
- 'style' => 'max-width:60px;height:auto;'
- ] );
- }
- }
- return $out;
-}, 10, 3 );
-
-// 3) Un peu de CSS pour la largeur de colonne et la mise en forme
-add_action( 'admin_head-edit-tags.php', function() {
- echo '';
-} );
-
-/**
- * Affiche le champ d'upload dans le formulaire de création de catégorie.
- */
-function ccgw_category_image_field( $taxonomy ) { ?>
-
-term_id, 'thumbnail_id', true );
- $image_url = $image_id ? wp_get_attachment_thumb_url( $image_id ) : '';
- ?>
-
- |
-
- |
-
-
-
-
- ; ?>)
-
-
-
-
-
-
- |
-
-register( new \Elementor_Category_Grid_Widget() );
-}
-add_action( 'elementor/widgets/register', 'register_category_grid_widget' );
-
-/**
- * Enqueue styles front-end pour le widget.
- */
-function ccgw_enqueue_front_styles() {
- // Ne charger que si Elementor est actif
- if ( defined( 'ELEMENTOR_VERSION' ) ) {
- wp_enqueue_style(
- 'ccgw-category-grid-style',
- plugin_dir_url( __FILE__ ) . 'css/style.css',
- [],
- '1.2.1'
- );
- }
-}
-add_action( 'wp_enqueue_scripts', 'ccgw_enqueue_front_styles' );
diff --git a/readme.txt b/readme.txt
index c0bbc16..e39e9bd 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,19 +1,17 @@
-=== Elementor Category Grid Widget ===
+=== Category Grid Widget for Elementor ===
Contributors: mrraph
Donate link: https://your-site.example/donate
Tags: elementor, category, grid, widget, posts
Requires at least: 5.8
-Tested up to: 6.8.1
+Tested up to: 6.8
Requires PHP: 7.0
Stable tag: 1.2.1
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
-
Responsive grid of post categories with images for Elementor.
-Allows manual selection of categories to display, inclusion of subcategories, hiding categories without images, and control over number of columns, image sizes, style settings, and hover effects.
== Description ==
-**Elementor Category Grid Widget** adds a simple yet powerful widget to Elementor for displaying your post categories in a grid:
+**Category Grid Widget for Elementor** adds a simple yet powerful widget to Elementor for displaying your post categories in a grid:
- Manual selection of categories to display
- Option to show subcategories
- Option to hide categories without an image
@@ -26,8 +24,8 @@ Allows manual selection of categories to display, inclusion of subcategories, hi
The widget uses WordPress’s native category image feature (a “Category Image” field added in the admin).
== Installation ==
-1. Upload the `elementor-category-grid-widget` folder to `/wp-content/plugins/`.
-2. Activate **Elementor Category Grid Widget** in the **Plugins** menu.
+1. Upload the `elementor-category-grid-widget-for-elementor` folder to `/wp-content/plugins/`.
+2. Activate **Category Grid Widget for Elementor** in the **Plugins** menu.
3. In Elementor, add the **Category Grid** widget to your layout.
4. Configure: select categories, columns, style, and hover effects.
diff --git a/widgets/category-grid-widget.php b/widgets/category-grid-widget.php
index a2b3f77..e254650 100644
--- a/widgets/category-grid-widget.php
+++ b/widgets/category-grid-widget.php
@@ -33,7 +33,7 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
*/
public function get_title(): string
{
- return esc_html__('Grille de Catégories', 'category-grid-widget');
+ return esc_html__('Grille de Catégories', 'category-grid-widget-for-elementor');
}
/**
@@ -71,14 +71,14 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
$this->start_controls_section(
'section_style_grid',
[
- 'label' => esc_html__('Grille', 'category-grid-widget'),
+ 'label' => esc_html__('Grille', 'category-grid-widget-for-elementor'),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_responsive_control(
'grid_gap',
[
- 'label' => esc_html__('Espacement (gap)', 'category-grid-widget'),
+ 'label' => esc_html__('Espacement (gap)', 'category-grid-widget-for-elementor'),
'type' => Controls_Manager::SLIDER,
'size_units' => ['px', 'em', '%'],
'range' => [
@@ -96,14 +96,14 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
$this->start_controls_section(
'section_style_card',
[
- 'label' => esc_html__('Carte', 'category-grid-widget'),
+ 'label' => esc_html__('Carte', 'category-grid-widget-for-elementor'),
'tab' => Controls_Manager::TAB_STYLE,
]
);
$this->add_control(
'card_bg_color',
[
- 'label' => esc_html__('Fond de la carte', 'category-grid-widget'),
+ 'label' => esc_html__('Fond de la carte', 'category-grid-widget-for-elementor'),
'type' => Controls_Manager::COLOR,
'default' => '',
'selectors' => [
@@ -115,14 +115,14 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
Group_Control_Typography::get_type(),
[
'name' => 'card_title_typography',
- 'label' => esc_html__('Typographie du titre', 'category-grid-widget'),
+ 'label' => esc_html__('Typographie du titre', 'category-grid-widget-for-elementor'),
'selector' => '{{WRAPPER}} .category-card-name',
]
);
$this->add_control(
'card_border_radius',
[
- 'label' => esc_html__('Border radius', 'category-grid-widget'),
+ 'label' => esc_html__('Border radius', 'category-grid-widget-for-elementor'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => ['px', '%'],
'selectors' => [
@@ -134,7 +134,7 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
\Elementor\Group_Control_Box_Shadow::get_type(),
[
'name' => 'card_box_shadow',
- 'label' => esc_html__('Ombre de la carte', 'category-grid-widget'),
+ 'label' => esc_html__('Ombre de la carte', 'category-grid-widget-for-elementor'),
'selector' => '{{WRAPPER}} .category-card',
]
);
@@ -144,7 +144,7 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
$this->start_controls_section(
'section_style_title',
[
- 'label' => esc_html__('Titre', 'category-grid-widget'),
+ 'label' => esc_html__('Titre', 'category-grid-widget-for-elementor'),
'tab' => Controls_Manager::TAB_STYLE,
]
);
@@ -153,10 +153,10 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
$this->add_control(
'disable_title_bg',
[
- 'label' => esc_html__('Désactiver le fond du titre', 'category-grid-widget'),
+ 'label' => esc_html__('Désactiver le fond du titre', 'category-grid-widget-for-elementor'),
'type' => Controls_Manager::SWITCHER,
- 'label_on' => esc_html__('Oui', 'category-grid-widget'),
- 'label_off' => esc_html__('Non', 'category-grid-widget'),
+ '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',
'selectors' => [
@@ -170,7 +170,7 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
$this->add_control(
'title_text_color',
[
- 'label' => esc_html__('Couleur du texte', 'category-grid-widget'),
+ 'label' => esc_html__('Couleur du texte', 'category-grid-widget-for-elementor'),
'type' => Controls_Manager::COLOR,
'default' => '#ffffff',
'selectors' => [
@@ -183,7 +183,7 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
$this->add_control(
'title_bg_color',
[
- 'label' => esc_html__('Fond du titre', 'category-grid-widget'),
+ 'label' => esc_html__('Fond du titre', 'category-grid-widget-for-elementor'),
'type' => Controls_Manager::COLOR,
'default' => 'rgba(0,0,0,0.4)',
'selectors' => [
@@ -201,7 +201,7 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
Group_Control_Typography::get_type(),
[
'name' => 'card_title_typography',
- 'label' => esc_html__('Typographie du titre', 'category-grid-widget'),
+ 'label' => esc_html__('Typographie du titre', 'category-grid-widget-for-elementor'),
'selector' => '{{WRAPPER}} .category-card-name',
]
);
@@ -212,7 +212,7 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
$this->start_controls_section(
'section_style_hover',
[
- 'label' => esc_html__('Hover', 'category-grid-widget'),
+ 'label' => esc_html__('Hover', 'category-grid-widget-for-elementor'),
'tab' => Controls_Manager::TAB_STYLE,
]
);
@@ -221,7 +221,7 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
$this->add_control(
'hover_overlay_color',
[
- 'label' => esc_html__('Couleur de l’overlay', 'category-grid-widget'),
+ 'label' => esc_html__('Couleur de l’overlay', 'category-grid-widget-for-elementor'),
'type' => Controls_Manager::COLOR,
'default' => 'rgba(0,0,0,0.3)',
'selectors' => [
@@ -235,7 +235,7 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
$this->add_control(
'hover_overlay_opacity',
[
- 'label' => esc_html__('Opacité de l’overlay', 'category-grid-widget'),
+ 'label' => esc_html__('Opacité de l’overlay', 'category-grid-widget-for-elementor'),
'type' => Controls_Manager::SLIDER,
'size_units' => ['%'],
'range' => [
@@ -253,7 +253,7 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
$this->add_control(
'title_hover_color',
[
- 'label' => esc_html__('Couleur du titre au hover', 'category-grid-widget'),
+ 'label' => esc_html__('Couleur du titre au hover', 'category-grid-widget-for-elementor'),
'type' => Controls_Manager::COLOR,
'default' => '#ffffff',
'selectors' => [
@@ -274,7 +274,7 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
$this->start_controls_section(
'section_content',
[
- 'label' => esc_html__('Catégories', 'category-grid-widget'),
+ 'label' => esc_html__('Catégories', 'category-grid-widget-for-elementor'),
'tab' => \Elementor\Controls_Manager::TAB_CONTENT,
]
);
@@ -288,12 +288,12 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
$this->add_control(
'categories',
[
- 'label' => esc_html__('Catégories à afficher', 'category-grid-widget'),
+ 'label' => esc_html__('Catégories à afficher', 'category-grid-widget-for-elementor'),
'type' => \Elementor\Controls_Manager::SELECT2,
'multiple' => true,
'label_block' => true,
'options' => $options,
- 'description' => esc_html__('Sélectionnez les catégories d’articles à afficher.', 'category-grid-widget'),
+ 'description' => esc_html__('Sélectionnez les catégories d’articles à afficher.', 'category-grid-widget-for-elementor'),
]
);
@@ -301,13 +301,13 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
$this->add_control(
'show_subcategories',
[
- 'label' => esc_html__('Afficher les sous-catégories', 'category-grid-widget'),
+ 'label' => esc_html__('Afficher les sous-catégories', 'category-grid-widget-for-elementor'),
'type' => \Elementor\Controls_Manager::SWITCHER,
- 'label_on' => esc_html__('Oui', 'category-grid-widget'),
- 'label_off' => esc_html__('Non', 'category-grid-widget'),
+ 'label_on' => esc_html__('Oui', 'category-grid-widget-for-elementor'),
+ 'label_off' => esc_html__('Non', 'category-grid-widget-for-elementor'),
'return_value' => 'yes',
'default' => 'yes',
- 'description' => esc_html__('Inclure aussi les sous-catégories des catégories sélectionnées.', 'category-grid-widget'),
+ 'description' => esc_html__('Inclure aussi les sous-catégories des catégories sélectionnées.', 'category-grid-widget-for-elementor'),
]
);
@@ -316,13 +316,13 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
$this->add_control(
'hide_without_image',
[
- 'label' => esc_html__('Afficher uniquement catégories avec image', 'category-grid-widget'),
+ 'label' => esc_html__('Afficher uniquement catégories avec image', 'category-grid-widget-for-elementor'),
'type' => \Elementor\Controls_Manager::SWITCHER,
- 'label_on' => esc_html__('Oui', 'category-grid-widget'),
- 'label_off' => esc_html__('Non', 'category-grid-widget'),
+ '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é, les catégories sans image seront masquées.', 'category-grid-widget'),
+ 'description' => esc_html__('Si activé, les catégories sans image seront masquées.', 'category-grid-widget-for-elementor'),
]
);
@@ -330,12 +330,12 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
$this->add_control(
'order_by',
[
- 'label' => esc_html__('Trier par', 'category-grid-widget'),
+ 'label' => esc_html__('Trier par', 'category-grid-widget-for-elementor'),
'type' => \Elementor\Controls_Manager::SELECT,
'options' => [
- 'name' => esc_html__('Nom (alphabétique)', 'category-grid-widget'),
- 'count' => esc_html__('Nombre d’articles', 'category-grid-widget'),
- 'id' => esc_html__('ID (date de création)', 'category-grid-widget'),
+ 'name' => esc_html__('Nom (alphabétique)', 'category-grid-widget-for-elementor'),
+ 'count' => esc_html__('Nombre d’articles', 'category-grid-widget-for-elementor'),
+ 'id' => esc_html__('ID (date de création)', 'category-grid-widget-for-elementor'),
],
'default' => 'name',
]
@@ -345,11 +345,11 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
$this->add_control(
'order',
[
- 'label' => esc_html__('Ordre', 'category-grid-widget'),
+ 'label' => esc_html__('Ordre', 'category-grid-widget-for-elementor'),
'type' => \Elementor\Controls_Manager::SELECT,
'options' => [
- 'ASC' => esc_html__('Croissant (A-Z / 0-9)', 'category-grid-widget'),
- 'DESC' => esc_html__('Décroissant (Z-A / 9-0)', 'category-grid-widget'),
+ 'ASC' => esc_html__('Croissant (A-Z / 0-9)', 'category-grid-widget-for-elementor'),
+ 'DESC' => esc_html__('Décroissant (Z-A / 9-0)', 'category-grid-widget-for-elementor'),
],
'default' => 'ASC',
]
@@ -361,7 +361,7 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
$this->start_controls_section(
'section_layout',
[
- 'label' => esc_html__('Mise en page', 'category-grid-widget'),
+ 'label' => esc_html__('Mise en page', 'category-grid-widget-for-elementor'),
'tab' => \Elementor\Controls_Manager::TAB_CONTENT,
]
);
@@ -370,7 +370,7 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
$this->add_control(
'columns',
[
- 'label' => esc_html__('Nombre de colonnes', 'category-grid-widget'),
+ 'label' => esc_html__('Nombre de colonnes', 'category-grid-widget-for-elementor'),
'type' => \Elementor\Controls_Manager::SELECT,
'options' => [
1 => '1',
@@ -388,13 +388,13 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
$this->add_control(
'image_size',
[
- 'label' => esc_html__('Taille des images', 'category-grid-widget'),
+ 'label' => esc_html__('Taille des images', 'category-grid-widget-for-elementor'),
'type' => \Elementor\Controls_Manager::SELECT,
'options' => [
- 'thumbnail' => esc_html__('Miniature (thumbnail)', 'category-grid-widget'),
- 'medium' => esc_html__('Moyen (medium)', 'category-grid-widget'),
- 'large' => esc_html__('Grand (large)', 'category-grid-widget'),
- 'full' => esc_html__('Plein (full)', 'category-grid-widget'),
+ 'thumbnail' => esc_html__('Miniature (thumbnail)', 'category-grid-widget-for-elementor'),
+ 'medium' => esc_html__('Moyen (medium)', 'category-grid-widget-for-elementor'),
+ 'large' => esc_html__('Grand (large)', 'category-grid-widget-for-elementor'),
+ 'full' => esc_html__('Plein (full)', 'category-grid-widget-for-elementor'),
],
'default' => 'medium',
]
@@ -511,18 +511,23 @@ class Elementor_Category_Grid_Widget extends \Elementor\Widget_Base
// Rendu HTML
echo '';
foreach ($terms as $term) {
- $name = esc_html($term->name);
- $link = esc_url(get_term_link($term));
- $image_url = esc_url($term->_image_url);
-
+ $thumbnail_id = get_term_meta( $term->term_id, 'thumbnail_id', true );
echo '
';
}