/** * Render shortcode preview in a blank page * @return Ambigous <string, mixed>|WP_Error */ function shortcode_iframe_preview() { global $wr_megamenu_element; if (isset($_GET['wr_shortcode_preview'])) { if (!isset($_GET['wr_shortcode_name']) || !isset($_POST['params'])) { return __('empty shortcode name / parameters', WR_MEGAMENU_TEXTDOMAIN); } if (!isset($_GET[WR_MEGAMENU_NONCE]) || !wp_verify_nonce($_GET[WR_MEGAMENU_NONCE], WR_MEGAMENU_NONCE)) { return; } $shortcode = esc_sql($_GET['wr_shortcode_name']); $params = urldecode($_POST['params']); $pattern = '/^\\[wr_megamenu_widget/i'; if (!preg_match($pattern, trim($params))) { // get shortcode class $class = WR_Megamenu_Helpers_Shortcode::get_shortcode_class($shortcode); // get option settings of shortcode $elements = $wr_megamenu_element->get_elements(); $element = isset($elements['element'][strtolower($class)]) ? $elements['element'][strtolower($class)] : null; if (!is_object($element)) { $element = new $class(); } if ($_POST['params']) { $extract_params = WR_Megamenu_Helpers_Shortcode::extract_params($params, $shortcode); } else { $extract_params = $element->config; } $element->shortcode_data(); $_shortcode_content = $extract_params['_shortcode_content']; // Keep non-WR shortcode as they are in preview iframe $_shortcode_content = str_replace('[', '[', $_shortcode_content); $_shortcode_content = str_replace('[wr_', '[wr_', $_shortcode_content); $_shortcode_content = str_replace('[/wr_', '[/wr_', $_shortcode_content); $content = $element->element_shortcode($extract_params, $_shortcode_content); } else { $class = 'WR_Megamenu_Widget'; $content = '<script type="text/javascript">jQuery.noConflict();</script>'; $content .= WR_Megamenu_Helpers_Shortcode::widget_content(array($params)); } global $Wr_Megamenu_Preview_Class; $Wr_Megamenu_Preview_Class = $class; $html = '<div id="shortcode_inner_wrapper" class="jsn-bootstrap3">'; $html .= $content; $html .= '</div>'; echo balanceTags($html); } }