update_control( 'link', [ 'condition' => [ 'button_lightbox!' => 'yes', ], ] ); $element->start_injection( [ 'of' => 'link', 'at' => 'after', ]); $element->add_control( 'button_lightbox', [ 'label' => UICORE_ELEMENTS_BADGE . esc_html__( 'Lightbox', 'uicore-elements' ), 'type' => Controls_Manager::SWITCHER, ], ); $element->add_control( 'content_type', [ 'label' => esc_html__( 'Type', 'uicore-elements' ), 'type' => Controls_Manager::CHOOSE, 'options' => [ 'video' => [ 'title' => esc_html__( 'Video', 'uicore-elements' ), 'icon' => 'eicon-video-camera', ], 'image' => [ 'title' => esc_html__( 'Image', 'uicore-elements' ), 'icon' => 'eicon-image-bold', ], ], 'condition' => [ 'button_lightbox' => 'yes', ], ] ); $element->add_control( 'image', [ 'label' => esc_html__( 'Image', 'uicore-elements' ), 'type' => Controls_Manager::MEDIA, 'condition' => [ 'content_type' => 'image', 'button_lightbox' => 'yes', ], ] ); $element->add_control( 'video_url', [ 'label' => esc_html__( 'Video URL', 'uicore-elements' ), 'type' => Controls_Manager::TEXT, 'condition' => [ 'content_type' => 'video', 'button_lightbox' => 'yes', ], 'ai' => [ 'active' => false, ], ] ); $element->end_injection(); } private function get_image_settings( $settings ) { $image_settings = [ 'url' => $settings['image']['url'], 'type' => 'image', ]; $image_id = $settings['image']['id']; if ( $image_id ) { $lightbox_image_attributes = Plugin::instance()->images_manager->get_lightbox_image_attributes( $image_id ); $image_settings = array_merge( $image_settings, $lightbox_image_attributes ); } return $image_settings; } private function get_video_settings( $settings ) { $video_properties = Embed::get_video_properties( $settings['video_url'] ); $video_url = null; if ( ! $video_properties ) { $video_type = 'hosted'; $video_url = $settings['video_url']; } else { $video_type = $video_properties['provider']; $video_url = Embed::get_embed_url( $settings['video_url'] ); } if ( null === $video_url ) { return ''; } return [ 'type' => 'video', 'videoType' => $video_type, 'url' => $video_url, ]; } public function render_widget( $widget_content, $widget ) { // TODO: Discover how to target button widget specifically since this fallback at all widgets is not good if( 'button' !== $widget->get_name() ){ return $widget_content; } $settings = $widget->get_settings(); $value = []; if ( $settings['button_lightbox'] !== 'yes' ) { return $widget_content; } // Get proper content settings if ( 'image' === $settings['content_type'] && $settings['image'] ) { $value = $this->get_image_settings( $settings ); } elseif ( 'video' === $settings['content_type'] && $settings['video_url'] ) { $value = $this->get_video_settings( $settings ); } if ( ! $value ) { return $widget_content; } // Create the lightbox URL hash $url = Frontend::instance()->create_action_hash('lightbox', $value ); // Inject URL to markup $widget_content = str_replace( '