78 lines
2.3 KiB
PHP
78 lines
2.3 KiB
PHP
<?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();
|
|
}
|
|
}
|