: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
namespace EmbedPress\Elementor\Widgets;
use Elementor\Controls_Manager as Controls_Manager;
use Elementor\Widget_Base as Widget_Base;
use EmbedPress\Includes\Classes\Helper;
use EmbedPress\Includes\Traits\Branding;
use EmbedPress\Shortcode;
(defined('ABSPATH')) or die("No direct script access allowed.");
class Embedpress_Elementor extends Widget_Base
protected $pro_class = '';
protected $pro_text = '';
protected $pro_label = '';
public function get_name()
return 'embedpres_elementor';
public function get_title()
return esc_html__('EmbedPress', 'embedpress');
public function get_categories()
public function get_custom_help_url()
return 'https://embedpress.com/documentation';
public function get_icon()
return 'icon-embedpress';
public function get_style_depends() {
$handler_keys = get_option('enabled_elementor_scripts', []);
if (isset($handler_keys['enabled_custom_player']) && $handler_keys['enabled_custom_player'] === 'yes') {
if (isset($handler_keys['enabled_instafeed']) && $handler_keys['enabled_instafeed'] === 'yes') {
$handles[] = 'cg-carousel';
$handles[] = 'embedpress-elementor-css';
$handles[] = 'embedpress-style';
public function get_script_depends()
$handler_keys = get_option('enabled_elementor_scripts', []);
if (isset($handler_keys['enabled_custom_player']) && $handler_keys['enabled_custom_player'] === 'yes') {
$handles[] = 'plyr.polyfilled';
$handles[] = 'vimeo-player';
$handles[] = 'embedpress-front';
if (isset($handler_keys['enabled_ads']) && $handler_keys['enabled_ads'] === 'yes') {
$handles[] = 'embedpress-ads';
if (isset($handler_keys['enabled_instafeed']) && $handler_keys['enabled_instafeed'] === 'yes') {
$handles[] = 'cg-carousel';
* Retrieve the list of keywords the widget belongs to.
* @return array Widget keywords.
public function get_keywords()
protected function register_controls()
$this->pro_class = is_embedpress_pro_active() ? '' : 'embedpress-pro-control not-active';
$this->pro_label = is_embedpress_pro_active() ? '' : '(Pro)';
$this->pro_text = is_embedpress_pro_active() ? '' : '<sup class="embedpress-pro-label" style="color:red">' . __('Pro', 'embedpress') . '</sup>';
* EmbedPress General Settings
$this->start_controls_section(
'embedpress_elementor_content_settings',
'label' => esc_html__('General', 'embedpress'),
'instafeed_access_token_notice',
'type' => \Elementor\Controls_Manager::RAW_HTML,
'raw' => sprintf('%s <a href="%s" target="_blank">here</a>.',
esc_html__('To enable full Instagram embedding experience, please add your access token ', 'embedpress'),
esc_url(admin_url('/admin.php?page=embedpress&page_type=instagram'))
'content_classes' => 'elementor-panel-alert elementor-panel-warning-info',
'embedpress_pro_embeded_source' => 'instafeed',
do_action('embedpress/embeded/extend', $this);
'embedpress_pro_embeded_source',
'label' => __('Source Name', 'embedpress'),
'type' => Controls_Manager::SELECT2,
'default' => __('Default', 'embedpress'),
'youtube' => __('YouTube', 'embedpress'),
'vimeo' => __('Vimeo', 'embedpress'),
'dailymotion' => __('Dailymotion', 'embedpress'),
'wistia' => __('Wistia', 'embedpress'),
'twitch' => __('Twitch', 'embedpress'),
'soundcloud' => __('SoundCloud', 'embedpress'),
'opensea' => __('OpenSea', 'embedpress'),
'instafeed' => __('Instagram Feed', 'embedpress'),
'calendly' => __('Calendly', 'embedpress'),
'selfhosted_video' => __('Self-hosted Video', 'embedpress'),
'selfhosted_audio' => __('Self-hosted Audio', 'embedpress'),
'type' => \Elementor\Controls_Manager::SELECT,
'label' => esc_html__( 'Feed Type', 'embedpress' ),
'user_account_type' => esc_html__( 'User Account', 'embedpress' ),
'hashtag_type' => sprintf(__('Hashtag%s', 'embedpress'), $this->pro_label),
'tagged_type' => esc_html__( 'Tagged(Coming Soon)', 'embedpress' ),
'mixed_type' => esc_html__( 'Mixed(Coming Soon)', 'embedpress' ),
'default' => 'user_account_type',
'embedpress_pro_embeded_source' => 'instafeed',
if ( !is_embedpress_pro_active() ) {
'embedpress_insta_layout__pro_enable_warning_1',
'label' => sprintf( '<a style="color: red" target="_blank" href="https://wpdeveloper.com/in/upgrade-embedpress">%s</a>',
esc_html__( 'Only Available in Pro Version!', 'essential-addons-for-elementor-lite' ) ),
'type' => Controls_Manager::RAW_HTML,
'instafeedFeedType' => [ 'hashtag_type'],
'type' => \Elementor\Controls_Manager::SELECT,
'label' => esc_html__( 'Account Type', 'embedpress' ),
'personal' => esc_html__( 'Personal', 'embedpress' ),
'business' => esc_html__( 'Business', 'embedpress' ),
'instafeedFeedType' => 'user_account_type',
'embedpress_pro_embeded_source' => 'instafeed'
'instafeed_feed_type_important_note',
'type' => \Elementor\Controls_Manager::RAW_HTML,
'raw' => 'To embed #hashtag posts you need to connect bussiness account. <a href="'.esc_url('https://embedpress.com/docs/generate-instagram-access-token/').'">Learn More</a>',
'content_classes' => 'elementor-panel-alert elementor-panel-warning-info',
'instafeedFeedType' => 'hashtag_type',
'embedpress_pro_embeded_nft_type',
'label' => __('Type', 'embedpress'),
'type' => Controls_Manager::SELECT,
'default' => 'collection',
'collection' => __('Assets Collection', 'embedpress'),
'single' => __('Single Asset', 'embedpress'),
'embedpress_pro_embeded_source' => 'opensea'
'embedpress_embeded_link',
'label' => __('Embedded Link', 'embedpress'),
'type' => Controls_Manager::TEXT,
'placeholder' => __('Enter your Link', 'embedpress'),
'instafeedAccountType!' => 'hashtag'
'label' => __('Player Background', 'embedpress'),
'description' => __('Dynamic option will use the most vibrant color from the album art.', 'embedpress'),
'type' => Controls_Manager::SELECT,
'1' => __('Dynamic', 'embedpress'),
'0' => __('Black & White', 'embedpress')
'embedpress_pro_embeded_source' => 'spotify'
do_action('embedpress/control/extend', $this);
'emberpress_custom_player',
'label' => __('Enable Custom Player', 'embedpress'),
'type' => Controls_Manager::SWITCHER,
'embedpress_pro_embeded_source' => ['youtube', 'vimeo', 'selfhosted_video', 'selfhosted_audio']
'custom_player_important_note',
'type' => \Elementor\Controls_Manager::RAW_HTML,
'raw' => esc_html__('Custom player take effect only when a single video is embedded.', 'embedpress'),
'content_classes' => 'elementor-panel-alert elementor-panel-warning-info',
'emberpress_custom_player' => 'yes',
'embedpress_pro_embeded_source' => 'youtube',
'label' => sprintf(__('Preset %s', 'embedpress'), $this->pro_text),
'type' => Controls_Manager::SELECT,
'default' => __('Default', 'embedpress'),
'custom-player-preset-1' => __('Preset 1', 'embedpress'),
// 'custom-player-preset-2' => __('Preset 2', 'embedpress'),
'custom-player-preset-3' => __('Preset 2', 'embedpress'),
// 'custom-player-preset-4' => __('Preset 4', 'embedpress'),
'classes' => $this->pro_class,
'emberpress_custom_player' => 'yes',
'embedpress_pro_embeded_source' => ['youtube', 'vimeo', 'selfhosted_video']
'embedpress_pro_video_start_time',
'label' => __('Start Time', 'embedpress'),
'type' => Controls_Manager::NUMBER,
'description' => __('Specify a start time (in seconds)', 'embedpress'),
'embedpress_pro_embeded_source' => ['youtube', 'vimeo', 'wistia', 'dailymotion', 'twitch']
$this->init_youtube_controls();
$this->init_vimeo_controls();
$this->init_wistia_controls();
$this->init_soundcloud_controls();
$this->init_dailymotion_control();
$this->init_twitch_control();
$this->init_opensea_control();
$this->end_controls_section();
$this->init_youtube_channel_section();
$this->init_youtube_subscription_section();
$this->init_youtube_livechat_section();
* Opensea Control section
$this->init_opensea_control_section();
$this->init_instafeed_control_section();
* Calendly Control section
$this->init_calendly_control_section();
do_action('extend_elementor_controls', $this, '_', $this->pro_text, $this->pro_class);
if (!is_embedpress_pro_active()) {
$this->start_controls_section(
'embedpress_pro_section',
'label' => __('Go Premium for More Features', 'embedpress'),
'label' => __('Unlock more possibilities', 'embedpress'),
'type' => Controls_Manager::CHOOSE,
'description' => '<span class="pro-feature"> Get the <a href="https://wpdeveloper.com/in/upgrade-embedpress" target="_blank">Pro version</a> for more provider support and customization options.</span>',
$this->end_controls_section();
$this->init_style_controls();
$this->init_opensea_color_and_typography();
public function init_youtube_controls()
'embedpress_pro_embeded_source' => 'youtube'
'embedpress_pro_youtube_end_time',
'label' => __('End Time', 'embedpress'),
'type' => Controls_Manager::NUMBER,
'description' => __('Specify an end time (in seconds)', 'embedpress'),
'condition' => $yt_condition,
'embedpress_player_color',
'label' => sprintf(__('Player Color %s', 'embedpress'), $this->pro_text),
'type' => Controls_Manager::COLOR,
'classes' => $this->pro_class,
'emberpress_custom_player' => 'yes',
'embedpress_pro_embeded_source' => ['youtube', 'vimeo', 'selfhosted_video', 'selfhosted_audio']
'embedpress_pro_vimeo_auto_play',
'label' => __('Auto Play', 'embedpress'),
'type' => Controls_Manager::SWITCHER,
'embedpress_pro_embeded_source' => 'vimeo'
'embedpress_pro_vimeo_autopause',
'label' => sprintf(__('Auto Pause %s', 'embedpress'), $this->pro_text),
'type' => Controls_Manager::SWITCHER,