With AI for text, code, image generation and editing, you can bring your vision to life faster than ever. Start your free trial now - no credit card required!
', 'elementor' ), 'media' => [ 'type' => 'image', 'src' => ELEMENTOR_ASSETS_URL . 'images/announcement.png?' . ELEMENTOR_VERSION, ], 'cta' => [ [ 'label' => __( 'Let\'s do it', 'elementor' ), 'variant' => 'primary', 'target' => '_top', 'url' => '#welcome-ai', ], [ 'label' => __( 'Skip', 'elementor' ), 'variant' => 'secondary', ], ], 'triggers' => [ [ 'action' => 'aiStarted', ], ], ]; } /** * Retrieve all announcement objects. * * @return array */ private function get_announcements(): array { $announcements = []; foreach ( $this->get_raw_announcements() as $announcement_data ) { $announcements[] = new Announcement( $announcement_data ); } return $announcements; } /** * Retrieve all active announcement objects. * * @return array */ private function get_active_announcements(): array { $active_announcements = []; foreach ( $this->get_announcements() as $announcement ) { if ( $announcement->is_active() ) { $active_announcements[] = $announcement; } } return $active_announcements; } public function __construct() { parent::__construct(); add_action( 'elementor/init', [ $this, 'on_elementor_init' ] ); } public function on_elementor_init() { if ( empty( $this->get_active_announcements() ) ) { return; } add_action( 'elementor/editor/footer', function () { $this->render_app_wrapper(); } ); add_action( 'elementor/editor/after_enqueue_scripts', function () { $this->enqueue_scripts(); $this->enqueue_styles(); } ); } }