run(); } advanced_gallery_fields_init(); /** * Check if Elementor is installed and activated * * @return bool */ function advanced_gallery_fields_has_elementor() { return did_action('elementor/loaded'); } /** * Initialize Elementor integration */ function advanced_gallery_fields_elementor_init() { // If Elementor is not active, return early if (!advanced_gallery_fields_has_elementor()) { return; } // Register Dynamic Tag add_action('elementor/dynamic_tags/register', function($dynamic_tags) { /** * Dynamic tag for Elementor integration */ class Advanced_Gallery_Fields_Dynamic_Tag extends \Elementor\Core\DynamicTags\Data_Tag { public function get_name() { return 'advanced-gallery-field'; } public function get_title() { return __('Advanced Gallery Field', 'advanced-gallery-fields'); } public function get_group() { return 'media'; } public function get_categories() { return ['gallery']; } protected function get_value(array $options = []) { $post_id = get_the_ID(); $gallery_ids = get_post_meta($post_id, '_advanced_gallery', true); if (empty($gallery_ids)) { return []; } $gallery_ids_array = explode(',', $gallery_ids); $gallery_data = []; foreach ($gallery_ids_array as $attachment_id) { $attachment = get_post($attachment_id); if ($attachment) { $gallery_data[] = [ 'id' => $attachment_id, 'url' => wp_get_attachment_url($attachment_id), ]; } } return $gallery_data; } } $dynamic_tags->register(new Advanced_Gallery_Fields_Dynamic_Tag()); }); // Make sure the Elementor classes are available if (!class_exists('\Elementor\Widget_Base')) { return; } /** * Advanced Gallery Fields Widget for Elementor */ class Advanced_Gallery_Fields_Widget extends \Elementor\Widget_Base { public function get_name() { return 'advanced-gallery-fields'; } public function get_title() { return __('Advanced Gallery Fields', 'advanced-gallery-fields'); } public function get_icon() { return 'eicon-gallery-grid'; } public function get_categories() { return ['general']; } protected function register_controls() { $this->start_controls_section( 'content_section', [ 'label' => __('Content', 'advanced-gallery-fields'), 'tab' => \Elementor\Controls_Manager::TAB_CONTENT, ] ); $this->add_control( 'gallery_style', [ 'label' => __('Gallery Style', 'advanced-gallery-fields'), 'type' => \Elementor\Controls_Manager::SELECT, 'default' => 'grid', 'options' => [ 'grid' => __('Grid', 'advanced-gallery-fields'), 'masonry' => __('Masonry', 'advanced-gallery-fields'), 'carousel' => __('Carousel', 'advanced-gallery-fields'), ], ] ); $this->end_controls_section(); } protected function render() { $settings = $this->get_settings_for_display(); $post_id = get_the_ID(); $gallery_ids = get_post_meta($post_id, '_advanced_gallery', true); if (empty($gallery_ids)) { return; } // Sanitize and validate gallery IDs $gallery_ids_array = array_filter(explode(',', $gallery_ids), 'is_numeric'); $gallery_ids_array = array_map('absint', $gallery_ids_array); echo '