isPreviewMode()) { return; } if (isset(${'_GET'}['preview-debug'])) { register_shutdown_function(function () { $e = error_get_last(); if ($e) { echo '
';
                    echo $e['message'];
                    echo '
'; } }); } $this->post_id = \CreativeElements::getPreviewUId(); $this->is_preview = true; add_action('wp_enqueue_scripts', function () { $this->enqueueStyles(); $this->enqueueScripts(); }); add_filter('the_content', [$this, 'builderWrapper'], 999999); add_action('wp_footer', [$this, 'wpFooter']); /* * Preview init. * * Fires on Elementor preview init, after Elementor preview has finished * loading but before any headers are sent. * * @since 1.0.0 * * @param Preview $this The current preview */ do_action('elementor/preview/init', $this); } /** * Retrieve post ID. * * Get the ID of the current post. * * @since 1.8.0 * * @return int Post ID */ public function getPostId() { return $this->post_id; } /** * Is Preview. * * Whether current request is the elementor preview iframe. * The flag is not related to a specific post or edit permissions. * * @since 2.9.5 * * @return bool */ public function isPreview() { return $this->is_preview; } /** * Whether preview mode is active. * * Used to determine whether we are in the preview mode. * * @since 1.0.0 * * @param int $post_id Optional. Post ID. Default is `0` * * @return bool Whether preview mode is active */ public function isPreviewMode($post_id = 0) { // if (!isset($_GET['elementor-preview'])) { if (!isset(${'_GET'}['preview_id'], ${'_GET'}['ver'])) { return false; } if (empty($post_id)) { // $post_id = get_the_ID(); $post_id = \CreativeElements::getPreviewUId(false); } if (!User::isCurrentUserCanEdit($post_id)) { return false; } // if ($post_id !== (int) $_GET['elementor-preview']) { if ($post_id != ${'_GET'}['preview_id']) { return false; } return true; } /** * Builder wrapper. * * Used to add an empty HTML wrapper for the builder, the javascript will add * the content later. * * @since 1.0.0 * * @param string $content The content of the builder * * @return string HTML wrapper for the builder */ public function builderWrapper($content) { if (UId::$_ID == $this->post_id) { $document = Plugin::$instance->documents->get($this->post_id); $attributes = $document->getContainerAttributes(); $attributes['class'] .= ' elementor-' . $this->post_id; $content = '
'; } return $content; } /** * Enqueue preview styles. * * Registers all the preview styles and enqueues them. * * Fired by `wp_enqueue_scripts` action. * * @since 1.0.0 */ private function enqueueStyles() { // Hold-on all jQuery plugins after all HTML markup render. // wp_add_inline_script('jquery-migrate', 'jQuery.holdReady( true );'); Plugin::$instance->frontend->enqueueStyles(); Plugin::$instance->widgets_manager->enqueueWidgetsStyles(); $suffix = _PS_MODE_DEV_ ? '' : '.min'; $direction_suffix = is_rtl() ? '-rtl' : ''; wp_register_style( 'elementor-select2', _CE_ASSETS_URL_ . 'lib/e-select2/css/e-select2' . $suffix . '.css', [], '4.0.6-rc1' ); wp_register_style( 'editor-preview', _CE_ASSETS_URL_ . 'css/editor-preview' . $direction_suffix . $suffix . '.css', ['elementor-select2'], _CE_VERSION_ ); wp_enqueue_style('editor-preview'); /* * Preview enqueue styles. * * Fires after Elementor preview styles are enqueued. * * @since 1.0.0 */ do_action('elementor/preview/enqueue_styles'); } /** * Enqueue preview scripts. * * Registers all the preview scripts and enqueues them. * * Fired by `wp_enqueue_scripts` action. * * @since 1.5.4 */ private function enqueueScripts() { Plugin::$instance->frontend->registerScripts(); Plugin::$instance->widgets_manager->enqueueWidgetsScripts(); $suffix = _PS_MODE_DEV_ ? '' : '.min'; wp_enqueue_script( 'elementor-inline-editor', _CE_ASSETS_URL_ . 'lib/inline-editor/js/inline-editor' . $suffix . '.js', [], _CE_VERSION_, true ); /* * Preview enqueue scripts. * * Fires after Elementor preview scripts are enqueued. * * @since 1.5.4 */ do_action('elementor/preview/enqueue_scripts'); } /** * Elementor Preview footer scripts and styles. * * Handle styles and scripts from frontend. * * Fired by `wp_footer` action. * * @since 2.0.9 */ public function wpFooter() { $frontend = Plugin::$instance->frontend; if ($frontend->hasElementorInPage()) { // Has header/footer/widget-template - enqueue all style/scripts/fonts. $frontend->wpFooter(); } else { // Enqueue only scripts. $frontend->enqueueScripts(); } } /** * Preview constructor. * * Initializing Elementor preview. * * @since 1.0.0 */ public function __construct() { add_action('template_redirect', [$this, 'init'], 0); } }