: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
$this->add_responsive_control(
'label' => __('Padding', 'embedpress'),
'type' => Controls_Manager::DIMENSIONS,
'size_units' => ['px', '%', 'em'],
'{{WRAPPER}} .embedpress-elements-wrapper .embedpress-wrapper' => 'padding: {{TOP}}{{UNIT}} {{RIGHT}}{{UNIT}} {{BOTTOM}}{{UNIT}} {{LEFT}}{{UNIT}};',
$this->add_responsive_control(
'label' => esc_html__('Alignment', 'embedpress'),
'type' => Controls_Manager::CHOOSE,
'title' => esc_html__('Left', 'embedpress'),
'icon' => 'eicon-text-align-left',
'title' => esc_html__('Center', 'embedpress'),
'icon' => 'eicon-text-align-center',
'title' => esc_html__('Right', 'embedpress'),
'icon' => 'eicon-text-align-right',
'prefix_class' => 'elementor%s-align-',
$this->end_controls_section();
public function render_plain_content()
$settings = $this->get_settings_for_display();
$_settings = $this->convert_settings($settings);
foreach ($_settings as $key => $value) {
$args .= "$key='" . esc_attr($value) . "' ";
$embed_code = sprintf("[embedpress %s]%s[/embedpress]", $args, esc_url($settings['embedpress_embeded_link']));
public function get_custom_player_options($settings)
if (!empty($settings['emberpress_custom_player'])) {
$player_preset = !empty($settings['custom_payer_preset']) ? sanitize_text_field($settings['custom_payer_preset']) : 'preset-default';
$player_color = !empty($settings['embedpress_player_color']) ? sanitize_hex_color($settings['embedpress_player_color']) : '';
$poster_thumbnail = !empty($settings['embedpress_player_poster_thumbnail']['url']) ? esc_url($settings['embedpress_player_poster_thumbnail']['url']) : '';
$is_self_hosted = Helper::check_media_format($settings['embedpress_embeded_link']);
$player_pip = !empty($settings['embepress_player_always_on_top']) ? true : false;
$player_restart = !empty($settings['embepress_player_restart']) ? true : false;
$player_rewind = !empty($settings['embepress_player_rewind']) ? true : false;
$player_fastForward = !empty($settings['embepress_player_fast_forward']) ? true : false;
$player_tooltip = !empty($settings['embepress_player_tooltip']) ? true : false;
$player_hide_controls = !empty($settings['embepress_player_hide_controls']) ? true : false;
$player_download = !empty($settings['embepress_player_download']) ? true : false;
$player_fullscreen = !empty($settings['embedpress_pro_youtube_enable_fullscreen_button']) ? true : false;
'rewind' => $player_rewind,
'restart' => $player_restart,
'poster_thumbnail' => $poster_thumbnail,
'player_color' => $player_color,
'player_preset' => $player_preset,
'fast_forward' => $player_fastForward,
'player_tooltip' => $player_tooltip,
'hide_controls' => $player_hide_controls,
'download' => $player_download,
'fullscreen' => $player_fullscreen,
if (!empty($settings['embedpress_pro_video_start_time'])) {
$playerOptions['start'] = $settings['embedpress_pro_video_start_time'];
if (!empty($settings['embedpress_pro_youtube_end_time'])) {
$playerOptions['end'] = $settings['embedpress_pro_youtube_end_time'];
if (!empty($settings['embedpress_pro_youtube_display_related_videos'])) {
$playerOptions['rel'] = true;
$playerOptions['rel'] = false;
if (!empty($settings['embedpress_pro_video_start_time'])) {
$playerOptions['t'] = $settings['embedpress_pro_video_start_time'];
if (!empty($settings['embedpress_pro_vimeo_auto_play'])) {
$playerOptions['vautoplay'] = true;
$playerOptions['vautoplay'] = false;
if (!empty($settings['embedpress_pro_vimeo_autopause'])) {
$playerOptions['autopause'] = true;
$playerOptions['autopause'] = false;
if (!empty($settings['embedpress_pro_vimeo_dnt'])) {
$playerOptions['dnt'] = true;
$playerOptions['dnt'] = false;
if (!empty($is_self_hosted['selhosted'])) {
$playerOptions['self_hosted'] = $is_self_hosted['selhosted'];
$playerOptions['hosted_format'] = $is_self_hosted['format'];
$playerOptionsString = json_encode($playerOptions);
$_player_options = 'data-options=' . htmlentities($playerOptionsString, ENT_QUOTES);
public function get_instafeed_carousel_options($settings)
if(!empty($settings['instaLayout']) && $settings['instaLayout'] === 'insta-carousel'){
$_carousel_id = 'data-carouselid=' . esc_attr($this->get_id()) . '';
$layout = $settings['instaLayout'];
$embedpress_instafeed_slide_show = !empty($settings['embedpress_instafeed_slide_show']) ? $settings['embedpress_instafeed_slide_show'] : 5;
$embedpress_carousel_autoplay = !empty($settings['embedpress_carousel_autoplay']) ? $settings['embedpress_carousel_autoplay'] : 0;
$embedpress_carousel_autoplay_speed = !empty($settings['embedpress_carousel_autoplay_speed']) ? $settings['embedpress_carousel_autoplay_speed'] : 3000;
$embedpress_carousel_transition_speed = !empty($settings['embedpress_carousel_transition_speed']) ? $settings['embedpress_carousel_transition_speed'] : 1000;
$embedpress_carousel_loop = !empty($settings['embedpress_carousel_loop']) ? $settings['embedpress_carousel_loop'] : 0;
$embedpress_carousel_arrows = !empty($settings['embedpress_carousel_arrows']) ? $settings['embedpress_carousel_arrows'] : 0;
$spacing = !empty($settings['embedpress_carousel_spacing']) ? $settings['embedpress_carousel_spacing'] : 0;
'slideshow' => $embedpress_instafeed_slide_show,
'autoplay' => $embedpress_carousel_autoplay,
'autoplayspeed' => $embedpress_carousel_autoplay_speed,
'transitionspeed' => $embedpress_carousel_transition_speed,
'loop' => $embedpress_carousel_loop,
'arrows' => $embedpress_carousel_arrows,
$carousel_options_string = json_encode($carousel_options);
$_carousel_options = 'data-carousel-options='. htmlentities($carousel_options_string, ENT_QUOTES) .'';
return $_carousel_options;
public function get_instafeed_layout($settings){
if($settings['embedpress_pro_embeded_source'] == 'instafeed'){
$insta_layout = ' '. $settings['instaLayout'];
protected function convert_settings($settings)
foreach ($settings as $key => $value) {
$_settings[$key] = 'false';
} else if (!empty($value['size'])) {
$_settings[$key] = $value['size'];
} else if (!empty($value['url'])) {
$_settings[$key] = $value['url'];
} else if (\is_scalar($value)) {
$_settings[$key] = $value;
public function validUserAccountUrl($url){
$pattern = '/^(?:https?:\/\/)?(?:www\.)?instagram\.com\/(?:[a-zA-Z0-9_\.]+\/?)$/';
return (bool) preg_match($pattern, $url);
function validInstagramTagUrl($url) {
$pattern = '/^(?:https?:\/\/)?(?:www\.)?instagram\.com\/explore\/tags\/[a-zA-Z0-9_\-]+\/?$/';
return (bool) preg_match($pattern, $url);
protected function render()
$settings = $this->get_settings_for_display();
Helper::get_enable_settings_data_for_scripts($settings);
add_filter('embedpress_should_modify_spotify', '__return_false');
$embed_link = isset($settings['embedpress_embeded_link']) ? $settings['embedpress_embeded_link'] : '';
if(!is_embedpress_pro_active() && ($settings['instaLayout'] === 'insta-masonry' || $settings['instaLayout'] === 'insta-carousel' || $settings['instafeedFeedType'] === 'hashtag_type')){
if($settings['instafeedFeedType'] === 'mixed_type' || $settings['instafeedFeedType'] === 'tagged_type'){
if($settings['instafeedFeedType'] === 'hashtag_type' && !$this->validInstagramTagUrl($embed_link)){
echo 'Please add valid hashtag link url';
if($settings['instafeedFeedType'] === 'user_account_type' && !$this->validUserAccountUrl($embed_link)){
echo 'Please add valid user account link url';
$is_editor_view = Plugin::$instance->editor->is_edit_mode();
$link = $settings['embedpress_embeded_link'];
$is_apple_podcast = (strpos($link, 'podcasts.apple.com') !== false);
// conditionaly convert settings data
$source = isset($settings['embedpress_pro_embeded_source']) ? esc_attr($settings['embedpress_pro_embeded_source']) : 'default';
$embed_link = isset($settings['embedpress_embeded_link']) ? esc_url($settings['embedpress_embeded_link']) : '';
$pass_hash_key = isset($settings['embedpress_lock_content_password']) ? md5($settings['embedpress_lock_content_password']) : '';
Helper::get_source_data(md5($this->get_id()) . '_eb_elementor', esc_url($embed_link), 'elementor_source_data', 'elementor_temp_source_data');
if (!(($source === 'default' || !empty($source[0]) && $source[0] === 'default') && strpos($embed_link, 'opensea.io') !== false)) {
$_settings = $this->convert_settings($settings);
if (strpos($embed_link, 'opensea.io') !== false) {
$embed_content = Shortcode::parseContent($settings['embedpress_embeded_link'], true, $_settings);
$embed_content = $this->onAfterEmbedSpotify($embed_content, $settings);
$embed = apply_filters('embedpress_elementor_embed', $embed_content, $settings);
$content = is_object($embed) ? $embed->embed : $embed;
$embed_settings['customThumbnail'] = !empty($settings['embedpress_content_share_custom_thumbnail']['url']) ? esc_url($settings['embedpress_content_share_custom_thumbnail']['url']) : '';
$embed_settings['customTitle'] = !empty($settings['embedpress_content_title']) ? sanitize_text_field($settings['embedpress_content_title']) : Helper::get_file_title($embed_link);
$embed_settings['customDescription'] = !empty($settings['embedpress_content_descripiton']) ? sanitize_text_field($settings['embedpress_content_descripiton']) : Helper::get_file_title($embed_link);
$embed_settings['sharePosition'] = !empty($settings['embedpress_content_share_position']) ? sanitize_text_field($settings['embedpress_content_share_position']) : 'right';
$embed_settings['lockHeading'] = !empty($settings['embedpress_lock_content_heading']) ? sanitize_text_field($settings['embedpress_lock_content_heading']) : '';
$embed_settings['lockSubHeading'] = !empty($settings['embedpress_lock_content_sub_heading']) ? sanitize_text_field($settings['embedpress_lock_content_sub_heading']) : '';
$embed_settings['passwordPlaceholder'] = !empty($settings['embedpress_password_placeholder']) ? sanitize_text_field($settings['embedpress_password_placeholder']) : '';
$embed_settings['submitButtonText'] = !empty($settings['embedpress_submit_button_text']) ? sanitize_text_field($settings['embedpress_submit_button_text']) : '';
$embed_settings['submitUnlockingText'] = !empty($settings['embedpress_submit_Unlocking_text']) ? sanitize_text_field($settings['embedpress_submit_Unlocking_text']) : '';
$embed_settings['lockErrorMessage'] = !empty($settings['embedpress_lock_content_error_message']) ? sanitize_text_field($settings['embedpress_lock_content_error_message']) : '';
$embed_settings['enableFooterMessage'] = !empty($settings['embedpress_enable_footer_message']) ? sanitize_text_field($settings['embedpress_enable_footer_message']) : '';
$embed_settings['footerMessage'] = !empty($settings['embedpress_lock_content_footer_message']) ? sanitize_text_field($settings['embedpress_lock_content_footer_message']) : '';
$client_id = $this->get_id();
$hash_pass = hash('sha256', wp_salt(32) . md5($settings['embedpress_lock_content_password'] ? sanitize_text_field($settings['embedpress_lock_content_password']) : ''));
$password_correct = isset($_COOKIE['password_correct_' . $client_id]) ? sanitize_text_field($_COOKIE['password_correct_' . $client_id]) : '';
if ($settings['pagination'] != 'show') {
if (!empty($settings['columns']) && is_numeric($settings['columns']) && (int) $settings['columns'] > 0) {
$columns = (int) $settings['columns'];
$gap_size = isset($settings['gapbetweenvideos']['size']) ? absint($settings['gapbetweenvideos']['size']) : 0;
$calVal = 'calc(' . (100 / $columns) . '% - ' . $gap_size . 'px)';
$content_share_class = '';
$share_position_class = '';
$share_position = isset($settings['embedpress_content_share_position']) ? esc_attr($settings['embedpress_content_share_position']) : 'right';
if (!empty($settings['embedpress_content_share'])) {
$content_share_class = 'ep-content-share-enabled';
$share_position_class = 'ep-share-position-' . $share_position;
$content_protection_class = 'ep-content-protection-enabled';
if (empty($settings['embedpress_lock_content']) || empty($settings['embedpress_lock_content_password']) || $hash_pass === $password_correct) {
$content_protection_class = 'ep-content-protection-disabled';
if(!empty($settings['embedpress_custom_player'])){
$data_playerid = 'data-playerid='.esc_attr($this->get_id());
if(!empty($settings['instaLayout'] && $settings['instaLayout'] === 'insta-carousel')){
$data_playerid = 'data-carouselid="'.esc_attr($this->get_id()).'"';
$cEmbedType = !empty($settings['cEmbedType']) ? sanitize_text_field($settings['cEmbedType']) : '';
if (!empty($settings['adManager'])) {
$ad = base64_encode(json_encode($settings)); // Using WordPress JSON encoding function
$adsAtts = 'data-sponsored-id="' . esc_attr($client_id) . '" data-sponsored-attrs="' . esc_attr($ad) . '" class="ad-mask"';
if (!empty($settings['emberpress_custom_player']) && $settings['emberpress_custom_player'] === 'yes') {
$data_player_id = "data-playerid=" . esc_attr($this->get_id());
if (!empty($settings['emberpress_custom_player'])) {
$self_hosted = Helper::check_media_format($settings['embedpress_embeded_link']);
$hosted_format = isset($self_hosted['format']) ? $self_hosted['format'] : '';
<div class="embedpress-elements-wrapper <?php echo !empty($settings['embedpress_elementor_aspect_ratio']) ? 'embedpress-fit-aspect-ratio' : '';
echo esc_attr($cEmbedType); ?>" id="ep-elements-id-<?php echo esc_attr($this->get_id()); ?>">
if ($is_editor_view && $is_apple_podcast && !is_embedpress_pro_active()) {
<p><?php esc_html_e('You need EmbedPress Pro to Embed Apple Podcast. Note. This message is only visible to you.', 'embedpress'); ?></p>
<div id="ep-elementor-content-<?php echo esc_attr($client_id) ?>" class="ep-elementor-content <?php if (!empty($settings['embedpress_content_share'])) : echo esc_attr('position-' . $settings['embedpress_content_share_position'] . '-wraper'); endif; ?> <?php echo esc_attr($content_share_class . ' ' . $share_position_class . ' ' . $content_protection_class); echo esc_attr(' source-' . $source); ?>">
<div id="<?php echo esc_attr($this->get_id()); ?>" class="ep-embed-content-wraper <?php echo esc_attr($settings['custom_payer_preset']); ?><?php echo esc_attr($this->get_instafeed_layout($settings)); ?> <?php echo esc_attr($hosted_format); ?>" <?php echo $data_playerid; ?> <?php echo $data_carouselid; ?> <?php echo $this->get_custom_player_options($settings); ?> <?php echo $this->get_instafeed_carousel_options($settings); ?>>
<div id="ep-elementor-content-<?php echo esc_attr($client_id) ?>" class="ep-elementor-content
<?php if (!empty($settings['embedpress_content_share'])) : echo esc_attr('position-' . $settings['embedpress_content_share_position'] . '-wraper'); endif; ?>
<?php echo esc_attr($content_share_class . ' ' . $share_position_class . ' ' . $content_protection_class); echo esc_attr(' source-' . $source); ?>">
<div <?php echo $adsAtts; ?>>
<div id="<?php echo esc_attr($this->get_id()); ?>" class="ep-embed-content-wraper <?php echo esc_attr($settings['custom_payer_preset']); ?>" <?php echo esc_attr($data_player_id); ?> <?php echo $this->get_custom_player_options($settings); ?>>
$content_id = $client_id;
if ((empty($settings['embedpress_lock_content']) || empty($settings['embedpress_lock_content_password']) || $settings['embedpress_lock_content'] == 'no') || (!empty(Helper::is_password_correct($client_id)) && ($hash_pass === $password_correct))) {
if (!empty($settings['embedpress_content_share'])) {
$content .= Helper::embed_content_share($content_id, $embed_settings);
if (!empty($settings['embedpress_content_share'])) {
$content .= Helper::embed_content_share($content_id, $embed_settings);
Helper::display_password_form($client_id, $content, $pass_hash_key, $embed_settings);
if (!empty($settings['adManager'])) {
$content .= Helper::generateAdTemplate($client_id, $settings, 'elementor');
<?php if ($settings['embedpress_pro_embeded_source'] === 'youtube') : ?>
#ep-elements-id-<?php echo esc_html($this->get_id()); ?>.ep-youtube__content__block .youtube__content__body .content__wrap {
grid-template-columns: repeat(auto-fit, minmax(<?php echo esc_html($calVal); ?>, 1fr)) !important;
#ep-elements-id-<?php echo esc_html($this->get_id()); ?>.ep-youtube__content__pagination {
display: <?php echo esc_html($ispagination); ?> !important;
public function onAfterEmbedSpotify($embed, $setting)
if (!isset($embed->provider_name) || strtolower($embed->provider_name) !== 'spotify' || !isset($embed->embed)) {
preg_match('/src=\"(.+?)\"/', $embed->embed, $match);
$modified_url = str_replace('playlist-v2', 'playlist', $url_full);
if (isset($setting['spotify_theme'])) {
if (strpos($modified_url, '?') !== false) {
$modified_url .= '&theme=' . sanitize_text_field($setting['spotify_theme']);
$modified_url .= '?theme=' . sanitize_text_field($setting['spotify_theme']);
$embed->embed = str_replace($url_full, $modified_url, $embed->embed);