<?php namespace ElementorPro\Modules\ThemeBuilder\Classes; use ElementorPro\Modules\ThemeBuilder\Documents\Theme_Document; use ElementorPro\Modules\ThemeBuilder\Module; use ElementorPro\Plugin; if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly } class Preview_Manager { public function __construct() { add_filter( 'elementor/query/get_query_args/current_query', [ $this, 'filter_query_control_args' ] ); add_filter( 'elementor/theme/posts_archive/query_posts/query_vars', [ $this, 'filter_query_control_args' ] ); add_filter( 'elementor_pro/dynamic_tags/post_terms/taxonomy_args', [ $this, 'filter_post_terms_taxonomy_arg' ] ); add_action( 'elementor/template-library/before_get_source_data', [ $this, 'switch_to_preview_query' ] ); add_action( 'elementor/template-library/after_get_source_data', [ $this, 'restore_current_query' ] ); add_action( 'elementor/dynamic_tags/before_render', [ $this, 'switch_to_preview_query' ] ); add_action( 'elementor/dynamic_tags/after_render', [ $this, 'restore_current_query' ] ); } public function filter_post_terms_taxonomy_arg( $taxonomy_args ) { $current_post_id = get_the_ID(); $document = Module::instance()->get_document( $current_post_id ); if ( $document ) { // Show all taxonomies unset( $taxonomy_args['object_type'] ); } return $taxonomy_args; } /** * @access public * * @param $query_vars array * * @return array */ public function filter_query_control_args( $query_vars ) { $document = Plugin::elementor()->documents->get_doc_or_auto_save( get_the_ID() ); if ( $document && $document instanceof Theme_Document ) { $query_vars = $document->get_preview_as_query_args(); } return $query_vars; } /** * @access public */ public function switch_to_preview_query() { $current_post_id = get_the_ID(); $document = Plugin::elementor()->documents->get_doc_or_auto_save( $current_post_id ); if ( ! $document || ! $document instanceof Theme_Document ) { return; } $new_query_vars = $document->get_preview_as_query_args(); Plugin::elementor()->db->switch_to_query( $new_query_vars, true ); $document->after_preview_switch_to_query(); } /** * @access public */ public function restore_current_query() { Plugin::elementor()->db->restore_current_query(); } }