echo $img_handle;
            ?>
')">{{featured_image_<?php 
            echo $img_handle;
            ?>
}}</a></td><td><?php 
            _e("Featured Image &lt;img /&gt;", REVSLIDER_TEXTDOMAIN);
            echo ' ' . $img_name;
            ?>
</td></tr>
							<?php 
        }
        ?>
					</table>
					<?php 
        if (RevSliderWooCommerce::isWooCommerceExists()) {
            ?>
						<table class="table_template_help" id="slide-woocommerce-template-entry" style="display: none;">
							<tr><td><a href="javascript:UniteLayersRev.insertTemplate('wc_sku')">{{wc_sku}}</a></td><td><?php 
            _e("SKU", REVSLIDER_TEXTDOMAIN);
            ?>
</td></tr>
							<tr><td><a href="javascript:UniteLayersRev.insertTemplate('wc_full_price')">{{wc_full_price}}</a></td><td><?php 
            _e("Full Price", REVSLIDER_TEXTDOMAIN);
            ?>
</td></tr>
							<tr><td><a href="javascript:UniteLayersRev.insertTemplate('wc_price')">{{wc_price}}</a></td><td><?php 
            _e("Single Price", REVSLIDER_TEXTDOMAIN);
            ?>
</td></tr>
							<tr><td><a href="javascript:UniteLayersRev.insertTemplate('wc_price_no_cur')">{{wc_price_no_cur}}</a></td><td><?php 
 public function set_post_data($text, $attr, $post_id)
 {
     $img_sizes = RevSliderBase::get_all_image_sizes();
     $title = isset($attr['title']) ? $attr['title'] : '';
     $excerpt = isset($attr['excerpt']) ? $attr['excerpt'] : '';
     $alias = isset($attr['alias']) ? $attr['alias'] : '';
     $content = isset($attr['content']) ? $attr['content'] : '';
     $link = isset($attr['link']) ? $attr['link'] : '';
     $postDate = isset($attr['postDate']) ? $attr['postDate'] : '';
     $dateModified = isset($attr['dateModified']) ? $attr['dateModified'] : '';
     $authorName = isset($attr['authorName']) ? $attr['authorName'] : '';
     $numComments = isset($attr['numComments']) ? $attr['numComments'] : '';
     $catlist = isset($attr['catlist']) ? $attr['catlist'] : '';
     $catlist_raw = isset($attr['catlist_raw']) ? $attr['catlist_raw'] : '';
     $taglist = isset($attr['taglist']) ? $attr['taglist'] : '';
     //add filter for addon metas
     $text = apply_filters('rev_slider_insert_meta', $text, $post_id);
     $text = str_replace(array('%title%', '{{title}}'), $title, $text);
     $text = str_replace(array('%excerpt%', '{{excerpt}}'), $excerpt, $text);
     $text = str_replace(array('%alias%', '{{alias}}'), $alias, $text);
     $text = str_replace(array('%content%', '{{content}}'), $content, $text);
     $text = str_replace(array('%link%', '{{link}}'), $link, $text);
     $text = str_replace(array('%date%', '{{date}}'), $postDate, $text);
     $text = str_replace(array('%date_modified%', '{{date_modified}}'), $dateModified, $text);
     $text = str_replace(array('%author_name%', '{{author_name}}'), $authorName, $text);
     $text = str_replace(array('%num_comments%', '{{num_comments}}'), $numComments, $text);
     $text = str_replace(array('%catlist%', '{{catlist}}'), $catlist, $text);
     $text = str_replace(array('%catlist_raw%', '{{catlist_raw}}'), $catlist_raw, $text);
     $text = str_replace(array('%taglist%', '{{taglist}}'), $taglist, $text);
     foreach ($img_sizes as $img_handle => $img_name) {
         $url = isset($attr['img_urls']) && isset($attr['img_urls'][$img_handle]) && isset($attr['img_urls'][$img_handle]['url']) ? $attr['img_urls'][$img_handle]['url'] : '';
         $tag = isset($attr['img_urls']) && isset($attr['img_urls'][$img_handle]) && isset($attr['img_urls'][$img_handle]['tag']) ? $attr['img_urls'][$img_handle]['tag'] : '';
         $text = str_replace(array('%featured_image_url_' . $img_handle . '%', '{{featured_image_url_' . $img_handle . '}}'), $url, $text);
         $text = str_replace(array('%featured_image_' . $img_handle . '%', '{{featured_image_' . $img_handle . '}}'), $tag, $text);
     }
     //process meta tags:
     $text = str_replace('-', '_REVSLIDER_', $text);
     $arrMatches = array();
     preg_match_all('/%meta:\\w+%/', $text, $arrMatches);
     foreach ($arrMatches as $matched) {
         foreach ($matched as $match) {
             $meta = str_replace("%meta:", "", $match);
             $meta = str_replace("%", "", $meta);
             $meta = str_replace('_REVSLIDER_', '-', $meta);
             $metaValue = get_post_meta($post_id, $meta, true);
             $text = str_replace($match, $metaValue, $text);
         }
     }
     $arrMatches = array();
     preg_match_all('/{{meta:\\w+}}/', $text, $arrMatches);
     foreach ($arrMatches as $matched) {
         foreach ($matched as $match) {
             $meta = str_replace("{{meta:", "", $match);
             $meta = str_replace("}}", "", $meta);
             $meta = str_replace('_REVSLIDER_', '-', $meta);
             $metaValue = get_post_meta($post_id, $meta, true);
             $text = str_replace($match, $metaValue, $text);
         }
     }
     $arrMatches = array();
     preg_match_all("/{{content:\\w+[\\:]\\w+}}/", $text, $arrMatches);
     foreach ($arrMatches as $matched) {
         foreach ($matched as $match) {
             //now check length and type
             $meta = str_replace("{{content:", "", $match);
             $meta = str_replace("}}", "", $meta);
             $meta = str_replace('_REVSLIDER_', '-', $meta);
             $vals = explode(':', $meta);
             if (count($vals) !== 2) {
                 continue;
             }
             //not correct values
             $vals[1] = intval($vals[1]);
             //get real number
             if ($vals[1] === 0 || $vals[1] < 0) {
                 continue;
             }
             //needs to be at least 1
             if ($vals[0] == 'words') {
                 $metaValue = explode(' ', strip_tags($content), $vals[1] + 1);
                 if (is_array($metaValue) && count($metaValue) > $vals[1]) {
                     array_pop($metaValue);
                 }
                 $metaValue = implode(' ', $metaValue);
             } elseif ($vals[0] == 'chars') {
                 $metaValue = substr(strip_tags($content), 0, $vals[1]);
             } else {
                 continue;
             }
             $text = str_replace($match, $metaValue, $text);
         }
     }
     $text = str_replace('_REVSLIDER_', '-', $text);
     //replace event's template
     if (RevSliderEventsManager::isEventsExists()) {
         $eventData = RevSliderEventsManager::getEventPostData($post_id);
         if (!empty($eventData)) {
             foreach ($eventData as $eventKey => $eventValue) {
                 $eventPlaceholder = "%event_" . $eventKey . "%";
                 $eventPlaceholderNew = "{{event_" . $eventKey . "}}";
                 if ($eventKey == 'start_date' || $eventKey == 'end_date') {
                     $eventValue = RevSliderFunctionsWP::convertPostDate($eventValue);
                 }
                 $text = str_replace(array($eventPlaceholder, $eventPlaceholderNew), $eventValue, $text);
             }
         }
     }
     if (RevSliderWooCommerce::isWooCommerceExists()) {
         $product = get_product($post_id);
         $wc_full_price = $product->get_price_html();
         $wc_price = wc_price($product->get_price());
         $wc_price_no_cur = $product->get_price();
         $wc_stock = $product->get_total_stock();
         $wc_rating = $product->get_rating_html();
         $wc_star_rating = '<div class="rs-starring">';
         preg_match_all('#<strong class="rating">.*?</span>#', $wc_rating, $match);
         if (!empty($match) && isset($match[0]) && isset($match[0][0])) {
             $wc_star_rating .= str_replace($match[0][0], '', $wc_rating);
         }
         $wc_star_rating .= '</div>';
         $wc_categories = $product->get_categories(',');
         $wc_add_to_cart = $product->add_to_cart_url();
         $wc_add_to_cart_button = '';
         $wc_sku = $product->get_sku();
         $wc_stock_quantity = $product->get_stock_quantity();
         $wc_rating_count = $product->get_rating_count();
         $wc_review_count = $product->get_review_count();
         $wc_tags = $product->get_tags();
         if (strpos($text, 'wc_add_to_cart_button') !== false) {
             $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min';
             $ajax_cart_en = get_option('woocommerce_enable_ajax_add_to_cart') == 'yes' ? true : false;
             $assets_path = str_replace(array('http:', 'https:'), '', WC()->plugin_url()) . '/assets/';
             $frontend_script_path = $assets_path . 'js/frontend/';
             if ($ajax_cart_en) {
                 wp_enqueue_script('wc-add-to-cart', $frontend_script_path . 'add-to-cart' . $suffix . '.js', array('jquery'), WC_VERSION, true);
                 global $wc_is_localized;
                 if ($wc_is_localized === false) {
                     //load it only one time
                     wp_localize_script('wc-add-to-cart', 'wc_add_to_cart_params', apply_filters('wc_add_to_cart_params', array('ajax_url' => WC()->ajax_url(), 'ajax_loader_url' => apply_filters('woocommerce_ajax_loader_url', $assets_path . 'images/ajax-loader@2x.gif'), 'i18n_view_cart' => esc_attr__('View Cart', 'woocommerce'), 'cart_url' => get_permalink(wc_get_page_id('cart')), 'is_cart' => is_cart(), 'cart_redirect_after_add' => get_option('woocommerce_cart_redirect_after_add'))));
                     $wc_is_localized = true;
                 }
             }
             $wc_add_to_cart_button = apply_filters('woocommerce_loop_add_to_cart_link', sprintf('<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" class="button %s product_type_%s">%s</a>', esc_url($product->add_to_cart_url()), esc_attr($product->id), esc_attr($product->get_sku()), $product->is_purchasable() ? 'add_to_cart_button' : '', esc_attr($product->product_type), esc_html($product->add_to_cart_text())), $product);
         }
         $text = str_replace(array('%wc_full_price%', '{{wc_full_price}}'), $wc_full_price, $text);
         $text = str_replace(array('%wc_price%', '{{wc_price}}'), $wc_price, $text);
         $text = str_replace(array('%wc_price_no_cur%', '{{wc_price_no_cur}}'), $wc_price_no_cur, $text);
         $text = str_replace(array('%wc_stock%', '{{wc_stock}}'), $wc_stock, $text);
         $text = str_replace(array('%wc_rating%', '{{wc_rating}}'), $wc_rating, $text);
         $text = str_replace(array('%wc_star_rating%', '{{wc_star_rating}}'), $wc_star_rating, $text);
         $text = str_replace(array('%wc_categories%', '{{wc_categories}}'), $wc_categories, $text);
         $text = str_replace(array('%wc_add_to_cart%', '{{wc_add_to_cart}}'), $wc_add_to_cart, $text);
         $text = str_replace(array('%wc_add_to_cart_button%', '{{wc_add_to_cart_button}}'), $wc_add_to_cart_button, $text);
         $text = str_replace(array('%wc_sku%', '{{wc_sku}}'), $wc_sku, $text);
         $text = str_replace(array('%wc_stock_quantity%', '{{wc_stock_quantity}}'), $wc_stock_quantity, $text);
         $text = str_replace(array('%wc_rating_count%', '{{wc_rating_count}}'), $wc_rating_count, $text);
         $text = str_replace(array('%wc_review_count%', '{{wc_review_count}}'), $wc_review_count, $text);
         $text = str_replace(array('%wc_tags%', '{{wc_tags}}'), $wc_tags, $text);
     }
     return $text;
 }
        echo '<select id="events_filter" name="events_filter">';
        foreach ($arrEventsFilter as $event_handle => $event_name) {
            $sel = $event_handle == $events_filter ? ' selected="selected"' : '';
            echo '<option value="' . $event_handle . '"' . $sel . '>' . $event_name . '</option>';
        }
        echo '</select>';
        echo '</p>';
    }
}
?>
						<div style="width:50%;display:none;float:left;" class="rs-show-for-wc">
							<?php 
$product_sortby = RevSliderFunctions::getVal($arrFieldsParams, 'product_sortby', 'ID');
?>
							<?php 
$wc_sortby = RevSliderWooCommerce::getArrSortBy();
?>
							<span class="rev-new-label"><?php 
_e('Sort Products By:', 'revslider');
?>
</span>
							<select id="product_sortby" name="product_sortby">
								<?php 
foreach ($wc_sortby as $wc_val => $wc_name) {
    ?>
									<option value="<?php 
    echo $wc_val;
    ?>
" <?php 
    selected($product_sortby, $wc_val);
    ?>
 /**
  * get products from categories (by the slider params).
  * @since: 5.1.0
  */
 private function getProductsFromCategories($publishedOnly = false)
 {
     $this->validateInited();
     $catIDs = $this->getParam("product_category");
     $data = RevSliderFunctionsWP::getCatAndTaxData($catIDs);
     $taxonomies = $data["tax"];
     $catIDs = $data["cats"];
     $sortBy = $this->getParam("product_sortby", self::DEFAULT_POST_SORTBY);
     $sortDir = $this->getParam("product_sort_direction", self::DEFAULT_POST_SORTDIR);
     $maxPosts = $this->getParam("max_slider_products", "30");
     if (empty($maxPosts) || !is_numeric($maxPosts)) {
         $maxPosts = -1;
     }
     $postTypes = $this->getParam("product_types", "any");
     //set direction for custom order
     if ($sortBy == RevSliderFunctionsWP::SORTBY_MENU_ORDER) {
         $sortDir = RevSliderFunctionsWP::ORDER_DIRECTION_ASC;
     }
     //Events integration
     $arrAddition = array();
     if ($publishedOnly == true) {
         $arrAddition["post_status"] = RevSliderFunctionsWP::STATE_PUBLISHED;
     }
     $arrAddition = array_merge($arrAddition, RevSliderWooCommerce::getMetaQuery($this->getParams()));
     $slider_id = $this->getID();
     $arrPosts = RevSliderFunctionsWP::getPostsByCategory($slider_id, $catIDs, $sortBy, $sortDir, $maxPosts, $postTypes, $taxonomies, $arrAddition);
     return $arrPosts;
 }