* @author ThemePunch <info@themepunch.com>
* @link https://www.themepunch.com/
* @copyright 2024 ThemePunch
if(!defined('ABSPATH')) exit();
class RevSliderSlide extends RevSliderFunctions {
private $layers = array();
private $bglayer = array();
public $children = array();
public $ignore_alt = false;
private $static_slide = false;
* used to determinate if we need to init the layers of the Slides
* can cause heavy ram usage on slider overview page if we have 100+ Sliders
public $init_layer = true;
* START: DEPRECATED FUNCTIONS THAT ARE IN HERE FOR OLD ADDONS TO WORK PROPERLY
* old version of get_id();
* added for compatibility with old AddOns
$this->add_deprecation_message('getID', 'get_id');
* old version of get_slider_id();
* added for compatibility with old AddOns
public function getSliderID(){
$this->add_deprecation_message('getSliderID', 'get_slider_id');
return $this->get_slider_id();
* old version of $this->image_url;
* added for compatibility with old AddOns
public function getImageUrl(){
$this->add_deprecation_message('getImageUrl', '$this->image_url');
* old version of RevSliderSlide->getLayers()
public function getLayers(){
$this->add_deprecation_message('getLayers', 'get_layers');
return $this->get_layers();
* old version of RevSliderSlide->set_layers_raw()
public function setLayersRaw($layers){
$this->add_deprecation_message('setLayersRaw', 'set_layers_raw');
$this->set_layers_raw($layers);
* old version of RevSliderSlide->save_layers()
public function saveLayers(){
$this->add_deprecation_message('saveLayers', 'save_layers');
* old version of RevSliderSlide->get_val()
public function getParam($name, $default = null){
$this->add_deprecation_message('getParam', 'get_val');
return $this->get_val($this->params, $name, $default);
* END: DEPRECATED FUNCTIONS THAT ARE IN HERE FOR OLD ADDONS TO WORK PROPERLY
* get the current slide id
* before: RevSliderSlide::getID();
public function get_id(){
* before: RevSliderSlide::setID();
public function set_id($id){
* @before: RevSliderSlide::getTitle();
public function get_title(){
return $this->get_param('title', 'Slide');
* get the slider id of the current slide
* before: RevSliderSlide::getSliderID()
public function get_slider_id(){
* returns if the Slide is a static slide or not
public function is_static_slide(){
return $this->static_slide;
* get array of children id's
* @before: RevSliderSlide::getArrChildrenIDs();
public function get_child_ids(){
$children = $this->get_children();
foreach($children as $child){
$ids[] = $child->get_id();
* before: RevSliderSlide::getOrder()
public function get_order(){
* before: RevSliderSlide::getSettings()
public function get_settings(){
return apply_filters('revslider_slide_get_settings', apply_filters('revslider_slide_getSettings', $this->settings, $this), $this);
* before: RevSliderSlide::setParams()
public function set_params($params){
* before: RevSliderSlide::getParams()
public function get_params(){
return apply_filters('revslider_slide_get_params', apply_filters('revslider_slide_getParams', $this->params, $this), $this);
* before: RevSliderSlide::getLayers()
public function get_layers($modified = false){
$layers = apply_filters('revslider_get_layers', apply_filters('revslider_getLayers', $this->layers, $this), $this);
if($modified !== false) $layers = $this->modify_layers($layers);
* used to modify layers only for frontend output
* as of now it is unused as qTranslate is gone but may be needed later on
public function modify_layers($layers = array()){
return $layers; //currently only returning layers, if changes need to be done remove this part and change layers before returning them
$layers = (empty($layers)) ? $this->layers : $layers;
foreach($layers ?? [] as $k => $layer){
* set layers from client, do not normalize as this results in loosing the order
* @before: RevSliderSlide::setLayersRaw()
public function set_layers_raw($layers){
* @before: RevSliderSlide::getThumbUrl();
public function get_thumb_url(){
return (!empty($this->image_thumb)) ? $this->image_thumb : $this->image_url;
* get layers in json format
* @before: RevSliderSlide::getLayerID_by_unique_id()
public function get_layer_id_by_uid($uid, $static_slide){
if(strpos($uid, 'static-') !== false){
$uid = str_replace('static-', '', $uid);
$layers = $static_slide->get_layers();
$nuid = $this->get_val($l, 'uid');
return $this->get_val($l, array('attributes', 'id'));
if(!empty($this->layers)){
foreach($this->layers as $l){
$nuid = $this->get_val($l, 'uid');
return $this->get_val($l, array('attributes', 'id'));
* @before: RevSliderSlide::getSliderParam();
private function get_slider_param($slider_id, $name, $default, $validate = null){
if(empty($this->slider)){
$this->slider = new RevSliderSlider();
$this->slider->init_by_id($slider_id);
return $this->slider->get_param($name, $default);
* get the overview data of a slide
public function get_overview_data(){
'order' => $this->get_order(),
'title' => $this->get_title(),
'state' => $this->get_param(array('publish', 'state'), 'published'),
'customAdminThumbSrc' => $this->get_overview_image_attributes('gallery')
* get the id of the static slide
* before: RevSliderSlide::getStaticSlideID()
public function get_static_slide_id($slider_id){
global $wpdb, $SR_GLOBALS;
if($SR_GLOBALS['use_table_version'] === 7){
$slide = $wpdb->get_row($wpdb->prepare("SELECT * FROM ".$wpdb->prefix . RevSliderFront::TABLE_SLIDES . "7 WHERE slider_id = %d AND static = 1", $slider_id), ARRAY_A);
$slide = $wpdb->get_row($wpdb->prepare("SELECT * FROM ".$wpdb->prefix . RevSliderFront::TABLE_STATIC_SLIDES . " WHERE slider_id = %d", $slider_id), ARRAY_A);
return (empty($slide)) ? false : $this->get_val($slide, 'id', false);
* combine get_static_slide_id & init_by_id into one function to avoid duplicated queries
public function init_static_slide_by_slider_id($slider_id){
global $wpdb, $SR_GLOBALS;
if(empty($slider_id)) return false;
if($SR_GLOBALS['use_table_version'] === 7){
$slide = $wpdb->get_row($wpdb->prepare("SELECT * FROM ".$wpdb->prefix . RevSliderFront::TABLE_SLIDES . "7 WHERE slider_id = %d AND static = 1", $slider_id), ARRAY_A);
$slide = $wpdb->get_row($wpdb->prepare("SELECT * FROM ".$wpdb->prefix . RevSliderFront::TABLE_STATIC_SLIDES . " WHERE slider_id = %d", $slider_id), ARRAY_A);
if(empty($slide)) return false;
$this->init_by_data($slide);
$this->set_val($this->params, array('static', 'isstatic'), true);
$this->static_slide = true;
* Check if Slide Exists with given ID
* @before: RevSliderSlide::isSlideByID();
public function exist_by_id($slideid){
global $wpdb, $SR_GLOBALS;
if(strpos($slideid, 'static_') !== false){
$slide_id = str_replace('static_', '', $slideid);
$this->validate_numeric($slide_id, __('Slide ID', 'revslider'));
if($SR_GLOBALS['use_table_version'] === 7){
$record = $wpdb->get_row($wpdb->prepare("SELECT id FROM ". $wpdb->prefix . RevSliderFront::TABLE_SLIDES . "7 WHERE id = %d AND static = 1", $slide_id), ARRAY_A);
$record = $wpdb->get_row($wpdb->prepare("SELECT id FROM ". $wpdb->prefix . RevSliderFront::TABLE_STATIC_SLIDES . " WHERE id = %d", $slide_id), ARRAY_A);
$v = ($SR_GLOBALS['use_table_version'] === 7) ? '7' : '';
$record = $wpdb->get_row($wpdb->prepare("SELECT id FROM ". $wpdb->prefix . RevSliderFront::TABLE_SLIDES . $v ." WHERE id = %d", $slideid), ARRAY_A);
return (empty($record)) ? false : true;
* initialize a slide by id
* before: RevSliderSlide::initByID();
public function init_by_id($slide_id){
global $wpdb, $SR_GLOBALS;
$v = ($SR_GLOBALS['use_table_version'] === 7) ? '7' : '';
if(strpos($slide_id, 'static_') !== false){
$this->static_slide = true;
$static_id = str_replace('static_', '', $slide_id);
$this->validate_numeric($static_id, 'Static Slide ID');
if($SR_GLOBALS['use_table_version'] === 7){
$slide = $wpdb->get_row($wpdb->prepare("SELECT * FROM ". $wpdb->prefix . RevSliderFront::TABLE_SLIDES . "7 WHERE id = %d AND static = 1", $static_id), ARRAY_A);
$slide = $wpdb->get_row($wpdb->prepare("SELECT * FROM ". $wpdb->prefix . RevSliderFront::TABLE_STATIC_SLIDES . " WHERE id = %d", $static_id), ARRAY_A);
$this->static_slide = false;
$this->validate_numeric($slide_id, 'Slide ID');
$slide = $wpdb->get_row($wpdb->prepare("SELECT * FROM ". $wpdb->prefix . RevSliderFront::TABLE_SLIDES . $v ." WHERE id = %d", $slide_id), ARRAY_A);
$this->init_by_data($slide);
* @before: RevSliderSlide::initBySlide();
* @param RevSliderSlide $slide
public function init_by_slide(RevSliderSlide $slide){
$slide = apply_filters('revslider_slide_initBySlide', $slide, $this);
$this->template_id = $slide->get_id();
$this->slider_id = $slide->get_slider_id();
$this->order = $slide->get_order();
$this->image_url = $slide->image_url;
$this->image_id = $slide->image_id;
$this->image_thumb = $slide->get_thumb_url();
$this->image_path = $slide->image_path;
$this->image_filename = $slide->image_filename;
$this->params = $slide->get_params();
$this->layers = $slide->get_layers();
$this->settings = $slide->get_settings();
$this->children = $slide->children;
public function check_create_slide($slide_id, $slider_id){
if($this->exist_by_id($slide_id)) return $slide_id;
$static = (strpos($slide_id, 'static_') !== false) ? true : false;
$slide_id = $this->create_slide($slider_id, '', $static, $slide_id);
if($static === true) $slide_id = 'static_'.$slide_id;
return ($this->exist_by_id($slide_id)) ? $slide_id : false;
public function filter_layer_tags($tag_key, $default){
$allowed_tags = $this->get_allowed_layer_tags();
foreach($this->layers as $key => $layer){
if(empty($layer[$tag_key]) || in_array($layer[$tag_key], $allowed_tags)) continue;
$this->layers[$key][$tag_key] = $default;
public function filter_layer_attributes_v6(){
foreach($this->layers ?? [] as $key => $layer){
if(!isset($layer['attributes']) || empty($layer['attributes'])) continue;
foreach($layer['attributes'] ?? [] as $aKey => $aVal){
if(empty($aVal)) continue;
$this->layers[$key]['attributes'][$aKey] = sanitize_text_field($aVal);
$this->layers[$key]['attributes'][$aKey] = (is_array($aVal)) ? implode(' ', $this->filter_class_name(explode(' ', $aVal))) : $aVal;
$this->layers[$key]['attributes'][$aKey] = $this->filter_class_name($aVal);
public function filter_layer_attributes_v7(){
foreach($this->layers ?? [] as $key => $layer){
if(!isset($layer['attr']) || empty($layer['attr'])) continue;
foreach($layer['attr'] ?? [] as $aKey => $aVal){
if(empty($aVal)) continue;
$this->layers[$key]['attr'][$aKey] = sanitize_text_field($aVal);