Current File : /home/kelaby89/www/wp/wp-content/plugins/trx_addons/components/cpt/layouts/layouts-sc-elementor.php |
<?php
/**
* ThemeREX Addons Layouts: Elementor utilities
*
* @package ThemeREX Addons
* @since v1.6.41
*/
// Don't load directly
if ( ! defined( 'TRX_ADDONS_VERSION' ) ) {
exit;
}
// Set Elementor's options at once
//--------------------------------------------------------
if (!function_exists('trx_addons_cpt_layouts_elm_add_support')) {
add_action( 'trx_addons_action_set_elementor_options', 'trx_addons_cpt_layouts_elm_add_support' );
function trx_addons_cpt_layouts_elm_add_support() {
// Add 'Layouts' to the Elementor's Editor support
if (($cpt = get_option('elementor_cpt_support', false)) === false || !is_array($cpt)) {
$cpt = ['post', 'page'];
}
global $TRX_ADDONS_STORAGE;
if (is_array($TRX_ADDONS_STORAGE['cpt_list'])
&& !empty($TRX_ADDONS_STORAGE['cpt_list']['layouts']['post_type'])
&& trx_addons_components_is_allowed('cpt', 'layouts')
&& !in_array($TRX_ADDONS_STORAGE['cpt_list']['layouts']['post_type'], $cpt)
) $cpt[] = $TRX_ADDONS_STORAGE['cpt_list']['layouts']['post_type'];
update_option('elementor_cpt_support', $cpt);
// Set CSS method to 'internal' (embed CSS instead using external file)
update_option('elementor_css_print_method', 'internal');
}
}
// Init Elementor's support
//--------------------------------------------------------
// Add CPT 'Layouts' support to Elementor
if (!function_exists('trx_addons_cpt_layouts_elm_init')) {
add_action( 'elementor/init', 'trx_addons_cpt_layouts_elm_init', 3 );
function trx_addons_cpt_layouts_elm_init() {
// Add CPT 'Layouts' to the Elementor Editor default post_types
add_post_type_support( TRX_ADDONS_CPT_LAYOUTS_PT, 'elementor' );
// Add a custom category for ThemeREX Layouts shortcodes
trx_addons_cpt_layouts_elm_add_categories();
// Template to create our classes with widgets
if ( ($fdir = trx_addons_get_file_dir(TRX_ADDONS_PLUGIN_CPT . "layouts/elementor/class.widget.php")) != '') {
include_once $fdir;
}
}
}
// Set apropriate document type on post creation
if (!function_exists('trx_addons_cpt_layouts_elm_set_document_type')) {
add_action( 'wp_insert_post', 'trx_addons_cpt_layouts_elm_set_document_type', 10, 2 );
function trx_addons_cpt_layouts_elm_set_document_type( $post_id, $post ) {
$post_type = ! empty( $post->post_type ) ? $post->post_type : '';
if ( $post_type !== TRX_ADDONS_CPT_LAYOUTS_PT ) {
return;
}
// Set apropriate document type
$documents = Elementor\Plugin::instance()->documents;
$doc_type = $documents->get_document_type( $post_type );
update_post_meta( $post_id, $doc_type::TYPE_META_KEY, $post_type );
// Set default layout type
if ( get_post_meta( $post_id, 'trx_addons_layout_type', true ) == '' ) {
update_post_meta( $post_id, 'trx_addons_layout_type', 'custom' );
}
}
}
// Register apropriate document type for 'Layouts' post type
if (!function_exists('trx_addons_cpt_layouts_elm_register_document_type')) {
add_action( 'elementor/documents/register', 'trx_addons_cpt_layouts_elm_register_document_type' );
function trx_addons_cpt_layouts_elm_register_document_type( $documents_manager ) {
if ( ($fdir = trx_addons_get_file_dir(TRX_ADDONS_PLUGIN_CPT . "layouts/elementor/class.document.php")) != '') {
include_once $fdir;
}
$documents_manager->register_document_type( TRX_ADDONS_CPT_LAYOUTS_PT, 'TRX_Addons_Elementor_Layouts_Document' );
}
}
// Set apropriate document template for 'Layouts' post type
if (!function_exists('trx_addons_cpt_layouts_elm_set_post_type_template')) {
add_action( 'template_include', 'trx_addons_cpt_layouts_elm_set_post_type_template', 9999 );
function trx_addons_cpt_layouts_elm_set_post_type_template( $template ) {
if ( trx_addons_is_singular( TRX_ADDONS_CPT_LAYOUTS_PT )
|| ( apply_filters( 'trx_addons_filter_replace_elementor_template', true )
&& class_exists( '\Elementor\TemplateLibrary\Source_Local' )
&& trx_addons_is_singular( \Elementor\TemplateLibrary\Source_Local::CPT )
&& in_array( get_post_meta( get_the_ID(), '_elementor_template_type', true ), array( 'section' ) )
)
) {
$template = trx_addons_elm_is_preview()
? trx_addons_get_file_dir(TRX_ADDONS_PLUGIN_CPT . "layouts/elementor/tpl.editor.php")
: trx_addons_get_file_dir(TRX_ADDONS_PLUGIN_CPT . "layouts/elementor/tpl.single.php");
}
return $template;
}
}
// Return a list of bofy classes for the layouts in the preview mode and in the editor mode
if (!function_exists('trx_addons_cpt_layouts_elm_get_body_classes')) {
function trx_addons_cpt_layouts_elm_get_body_classes( $id = 0, $echo = false ) {
if ( empty( $id ) ) {
$id = get_the_ID();
}
$body_classes = get_body_class();
$layout_type = get_post_meta( $id, 'trx_addons_layout_type', true );
if ( is_array( $body_classes ) ) {
$body_classes = implode( ' ', $body_classes );
}
$body_classes .= ' ' . esc_attr( TRX_ADDONS_CPT_LAYOUTS_PT ) . '-type-' . esc_attr( $layout_type );
if ( in_array( $layout_type, array( 'header', 'footer' ) ) ) {
$body_classes = str_replace( 'body_style_wide', '', $body_classes );
$body_classes = str_replace( 'body_style_boxed', '', $body_classes );
}
if ( $echo ) {
echo 'class="' . esc_attr( $body_classes ) . '"';
}
return $body_classes;
}
}
// Add category for Layouts
if (!function_exists('trx_addons_cpt_layouts_elm_add_categories')) {
add_action( 'elementor/elements/categories_registered', 'trx_addons_cpt_layouts_elm_add_categories' );
function trx_addons_cpt_layouts_elm_add_categories($mgr = null) {
static $added = false;
if (!$added) {
if ($mgr == null) $mgr = \Elementor\Plugin::instance()->elements_manager;
// Add a custom category for ThemeREX Layouts shortcodes
$mgr->add_category(
'trx_addons-layouts',
array(
'title' => __( 'ThemeREX Addons Layouts', 'trx_addons' ),
'icon' => ' eicon-inner-section', //default icon
'active' => false,
)
);
$added = true;
}
}
}
// Add standard elements params in the new controls section: 'Custom Layouts'
if (!function_exists('trx_addons_cpt_layouts_elm_add_params_in_standard_elements')) {
add_action( 'elementor/element/after_section_end', 'trx_addons_cpt_layouts_elm_add_params_in_standard_elements', 10, 3 );
function trx_addons_cpt_layouts_elm_add_params_in_standard_elements($element, $section_id, $args) {
if ( ! is_object( $element ) ) {
return;
}
if ( ( in_array( $element->get_name(), array('section') ) && $section_id == 'section_layout' )
|| ( in_array( $element->get_name(), array('container') ) && $section_id == 'section_layout_container' )
) {
// Detect edit mode
$is_edit_mode = trx_addons_elm_is_edit_mode();
// Register controls
$element->start_controls_section( 'section_custom_layout', array(
'label' => __( 'Custom Layout', 'trx_addons' ),
'tab' => \Elementor\Controls_Manager::TAB_LAYOUT
) );
$tmp = ! $is_edit_mode ? array() : trx_addons_get_list_sc_layouts_row_types();
$row_types = array();
foreach ( $tmp as $k => $v ) {
$row_types[ $k == 'inherit' ? '' : 'row sc_layouts_row_type_' . esc_attr( $k ) ] = $v;
}
$element->add_control( 'row_type', array(
'label' => __("Row type", 'trx_addons'),
'label_block' => false,
'description' => wp_kses_data( __("Select row type to decorate header widgets. Attention! Use this parameter to decorate custom layouts only!", 'trx_addons') ),
'type' => \Elementor\Controls_Manager::SELECT,
'options' => $row_types,
'default' => '',
'prefix_class' => 'sc_layouts_'
) );
$element->add_control( 'row_delimiter', array(
'label' => __( 'Delimiter', 'trx_addons' ),
'label_block' => false,
'label_off' => __( 'Hide', 'trx_addons' ),
'label_on' => __( 'Show', 'trx_addons' ),
'description' => wp_kses_data( __("Show delimiter after this row", 'trx_addons') ),
'type' => \Elementor\Controls_Manager::SWITCHER,
'return_value' => 'delimiter',
'prefix_class' => 'sc_layouts_row_',
) );
$element->add_control( 'row_fixed', array(
'label' => __("Fix this row when scroll", 'trx_addons'),
'label_block' => false,
'type' => \Elementor\Controls_Manager::SELECT,
'options' => array(
"" => esc_html__("Don't fix", 'trx_addons'),
"fixed" => esc_html__("Fix on large screen ", 'trx_addons'),
"fixed sc_layouts_row_fixed_always" => esc_html__("Fix always", 'trx_addons')
),
'default' => '',
'prefix_class' => 'sc_layouts_row_'
) );
$element->add_control( 'row_fixed_delay', array(
'label' => __("Delay before fix this row", 'trx_addons'),
'label_block' => false,
'type' => \Elementor\Controls_Manager::SWITCHER,
'condition' => array(
'row_fixed!' => ''
),
'default' => '',
'return_value' => 'delay_fixed',
'prefix_class' => 'sc_layouts_row_'
) );
$element->add_control( 'row_hide_unfixed', array(
'label' => __("Hide this row on unfix", 'trx_addons'),
'label_block' => false,
'type' => \Elementor\Controls_Manager::SWITCHER,
'label_off' => __( 'Show', 'trx_addons' ),
'label_on' => __( 'Hide', 'trx_addons' ),
'condition' => array(
'row_fixed!' => ''
),
'default' => '',
'return_value' => 'hide_unfixed',
'prefix_class' => 'sc_layouts_row_'
) );
$element->add_control( 'hide_on_frontpage', array(
'label' => __( 'Hide on Frontpage', 'trx_addons' ),
'label_block' => false,
'label_off' => __( 'Show', 'trx_addons' ),
'label_on' => __( 'Hide', 'trx_addons' ),
'description' => wp_kses_data( __("Hide this row on Frontpage", 'trx_addons') ),
'type' => \Elementor\Controls_Manager::SWITCHER,
'return_value' => 'hide_on_frontpage',
'prefix_class' => 'sc_layouts_',
) );
$element->add_control( 'hide_on_singular', array(
'label' => __( 'Hide on single posts and pages', 'trx_addons' ),
'label_block' => false,
'label_off' => __( 'Show', 'trx_addons' ),
'label_on' => __( 'Hide', 'trx_addons' ),
'description' => wp_kses_data( __("Hide this row on single posts and pages", 'trx_addons') ),
'type' => \Elementor\Controls_Manager::SWITCHER,
'return_value' => 'hide_on_singular',
'prefix_class' => 'sc_layouts_',
) );
$element->add_control( 'hide_on_other', array(
'label' => __( 'Hide on other pages', 'trx_addons' ),
'label_block' => false,
'label_off' => __( 'Show', 'trx_addons' ),
'label_on' => __( 'Hide', 'trx_addons' ),
'description' => wp_kses_data( __("Hide this row on other pages (posts archive, category or taxonomy posts, author's posts, etc.)", 'trx_addons') ),
'type' => \Elementor\Controls_Manager::SWITCHER,
'return_value' => 'hide_on_other',
'prefix_class' => 'sc_layouts_',
) );
if ( apply_filters( 'trx_addons_filter_allow_sc_styles_in_elementor', false, 'sc_layouts_fixed_row' ) ) {
$element->add_control( 'row_fixed_bg_heading', array(
'label' => __( 'Background in fixed state', 'trx_addons' ),
'type' => \Elementor\Controls_Manager::HEADING,
'separator' => 'before',
'condition' => array(
'row_fixed!' => ''
),
) );
$element->add_group_control(
\Elementor\Group_Control_Background::get_type(),
array(
'name' => 'row_fixed_bg',
'types' => array( 'classic', 'gradient' ),
'selector' => 'body.trx_addons_page_scrolled {{WRAPPER}}.sc_layouts_row_fixed_on',
'condition' => array(
'row_fixed!' => ''
),
) );
}
$element->end_controls_section();
}
}
}
// Add standard elements params in the existing controls sections
if (!function_exists('trx_addons_cpt_layouts_elm_append_params_in_standard_elements')) {
add_action( 'elementor/element/before_section_end', 'trx_addons_cpt_layouts_elm_append_params_in_standard_elements', 10, 3 );
function trx_addons_cpt_layouts_elm_append_params_in_standard_elements($element, $section_id, $args) {
if ( ! is_object( $element ) ) {
return;
}
if ( ( in_array( $element->get_name(), array( 'column' ) ) && $section_id == 'layout' )
|| ( in_array( $element->get_name(), array('container') ) && $section_id == 'section_layout_container' )
) {
// Detect edit mode
$is_edit_mode = trx_addons_elm_is_edit_mode();
// Register controls
$tmp = ! $is_edit_mode ? array() : trx_addons_get_list_sc_aligns(true, false);
$col_aligns = array();
foreach ( $tmp as $k => $v ) {
$col_aligns[ $k == 'inherit' ? '' : esc_attr( $k ) . ' sc_layouts_column' ] = $v;
}
$element->add_responsive_control( 'column_align', array(
'label' => __("Text alignment", 'trx_addons'),
'label_block' => false,
'type' => \Elementor\Controls_Manager::SELECT,
'options' => $col_aligns,
'default' => '',
'prefix_class' => 'sc%s_layouts_column_align_'
) );
$element->add_control( 'icons_position', array(
'label' => __("Icons position", 'trx_addons'),
'label_block' => false,
'description' => wp_kses_data( __("Select icons position of the inner widgets 'Layouts: xxx' in this column. Attention! Use this parameter to decorate custom layouts only!", 'trx_addons') ),
'type' => \Elementor\Controls_Manager::SELECT,
'options' => ! $is_edit_mode ? array() : trx_addons_get_list_sc_layouts_icons_positions(),
'default' => 'left',
'prefix_class' => 'sc_layouts_column_icons_position_'
) );
}
}
}
// PRE-RENDER PROCESSING
// ------------------------------------------------------------------------
// Add 'sc_layouts_item' to the classes list of widgets
if ( ! function_exists( 'trx_addons_cpt_layouts_elm_sc_wrap' ) ) {
add_action( 'elementor/frontend/widget/before_render', 'trx_addons_cpt_layouts_elm_sc_wrap', 10, 1 );
function trx_addons_cpt_layouts_elm_sc_wrap( $widget ) {
if ( ( trx_addons_sc_stack_check( 'show_layout' ) // Wrap shortcodes in the headers and footers
|| trx_addons_is_singular( TRX_ADDONS_CPT_LAYOUTS_PT ) // or if it's a preview mode for layout
)
&& ! trx_addons_sc_stack_check( 'trx_sc_layouts' ) // Don't wrap shortcodes inside content
) {
$widget->add_render_attribute( '_wrapper', 'class', 'sc_layouts_item' );
}
}
}
// AFTER-RENDER PROCESSING
// ------------------------------------------------------------------------
// Remove empty and inherit classes 'sc_layouts_row' from the 'inherit' rows
if ( ! function_exists( 'trx_addons_cpt_layouts_elm_remove_inherit_classes' ) ) {
add_filter( 'elementor/frontend/the_content', 'trx_addons_cpt_layouts_elm_remove_inherit_classes' );
function trx_addons_cpt_layouts_elm_remove_inherit_classes( $content ) {
return str_replace(
array(
'sc_layouts_column_ ',
'sc_layouts_row_ ',
'sc_layouts_ ',
),
'',
$content);
}
}
// Generate content to show layout
//------------------------------------------------------------------------
if ( !function_exists( 'trx_addons_cpt_layouts_elm_layout_content' ) ) {
add_filter( 'trx_addons_filter_sc_layout_content', 'trx_addons_cpt_layouts_elm_layout_content', 11, 3 );
function trx_addons_cpt_layouts_elm_layout_content($content, $post_id = 0, $force_styles = false) {
static $styles_included = array();
$allow_recursive_layouts = trx_addons_get_setting( 'allow_recursive_layouts', false );
// Check if this post built with Elementor
if ( trx_addons_exists_elementor() ) {
if ( $post_id == 0 ) $post_id = trx_addons_get_the_ID();
$cur_page_built_with_elementor = trx_addons_is_built_with_elementor( $post_id );
if ( $cur_page_built_with_elementor ) {
// If a caller is a show_layout
if ( trx_addons_sc_stack_check('show_layout') ) {
global $TRX_ADDONS_STORAGE;
if ( ! $allow_recursive_layouts ) {
// A global array with ids of inner layouts to generate its after a main layout is generated
if ( ! isset( $TRX_ADDONS_STORAGE['elementor_recursive_layouts'] ) ) {
$TRX_ADDONS_STORAGE['elementor_recursive_layouts'] = array();
}
$elementor_recursive_layouts_pointer = count( $TRX_ADDONS_STORAGE['elementor_recursive_layouts'] );
}
// Check if we not have a recursion call
if ( $allow_recursive_layouts || ! trx_addons_sc_stack_check('show_layout_elementor') ) {
trx_addons_sc_stack_push('show_layout_elementor');
$is_edit_mode = \Elementor\Plugin::instance()->editor->is_edit_mode();
// Add inline css to the output
$inline_css = $force_styles
|| ( empty( $TRX_ADDONS_STORAGE['cur_page_built_with_elementor'] )
&& ( apply_filters( 'trx_addons_filter_sc_layout_content_need_inline_css', false, $post_id )
|| ( empty( $styles_included[ $post_id ] )
&& ( ! defined( 'ELEMENTOR_VERSION' ) || version_compare( ELEMENTOR_VERSION, '3.0.0', '<' ) || $is_edit_mode )
)
)
);
// Attention! Recommended method get_builder_content_for_display() is damage sliders with custom layouts inside
// because $post_id is equal to get_the_ID() - an empty string is returned
//$post_content = \Elementor\Plugin::instance()->frontend->get_builder_content_for_display( $post_id, $inline_css );
// Use get_builder_content() instead (is an internal method, but it is not check post ID)
// and turn off edit mode before build content and restore it after ( not need for get_builder_content_for_display() )
// Set edit mode as false, so don't render settings and etc. ( not need for get_builder_content_for_display() )
\Elementor\Plugin::instance()->editor->set_edit_mode( false );
$post_content = \Elementor\Plugin::instance()->frontend->get_builder_content( $post_id, $inline_css ); // || $is_edit_mode
// Restore edit mode ( not need for get_builder_content_for_display() )
\Elementor\Plugin::instance()->editor->set_edit_mode( $is_edit_mode );
trx_addons_sc_stack_pop();
if ( ! empty($post_content) ) {
$content = apply_filters( 'trx_addons_filter_sc_layout_content_from_builder', $post_content, $post_id, 'elementor' );
if ( ! isset( $styles_included[ $post_id ] ) || $inline_css ) {
$styles_included[ $post_id ] = $inline_css;
}
}
// Check if a last call contains a recursive calls
if ( ! $allow_recursive_layouts ) {
if ( count( $TRX_ADDONS_STORAGE['elementor_recursive_layouts'] ) > $elementor_recursive_layouts_pointer ) {
for ( $i = $elementor_recursive_layouts_pointer; $i < count( $TRX_ADDONS_STORAGE['elementor_recursive_layouts'] ); $i++ ) {
$inner_post_id = $TRX_ADDONS_STORAGE['elementor_recursive_layouts'][ $i ];
// To prevent an output be wrapped with sc_layouts_item
trx_addons_sc_stack_push('trx_sc_layouts');
// Generate an inner layout
$inner_content = trx_addons_cpt_layouts_show_layout( $inner_post_id, 0, false );
// Cancel prevention
trx_addons_sc_stack_pop();
// Replace a placeholder in a main layout with a generated content
$content = str_replace(
sprintf( '{{ELEMENTOR-LAYOUT-%d}}', $inner_post_id ),
$inner_content,
$content
);
// Replace a placeholder in an inline html (panels and popups) with a generated content
trx_addons_set_inline_html( str_replace(
sprintf( '{{ELEMENTOR-LAYOUT-%d}}', $inner_post_id ),
$inner_content,
trx_addons_get_inline_html()
) );
}
array_splice( $TRX_ADDONS_STORAGE['elementor_recursive_layouts'], $elementor_recursive_layouts_pointer );
}
}
} else {
$content = sprintf( '{{ELEMENTOR-LAYOUT-%d}}', $post_id );
array_push( $TRX_ADDONS_STORAGE['elementor_recursive_layouts'], $post_id );
}
// Else - a caller is a content filter - just change a previously generated content
} else {
$content .= ' ';
}
}
}
return $content;
}
}
// Check if specified post built with Elementor
if ( !function_exists( 'trx_addons_cpt_layouts_elm_post_built_in' ) ) {
add_filter( 'trx_addons_filter_post_built_in', 'trx_addons_cpt_layouts_elm_post_built_in', 10, 2 );
function trx_addons_cpt_layouts_elm_post_built_in($builder, $post_id=0) {
if ( $post_id == 0 ) {
$post_id = get_the_ID();
}
if ( $post_id > 0 && trx_addons_is_built_with_elementor( $post_id ) ) {
$builder = 'elementor';
}
return $builder;
}
}
// Load required styles and scripts for the frontend
//-----------------------------------------------------------------
if ( !function_exists( 'trx_addons_cpt_layouts_elm_load_styles_front' ) ) {
add_action("wp_enqueue_scripts", 'trx_addons_cpt_layouts_elm_load_styles_front', TRX_ADDONS_ENQUEUE_SCRIPTS_PRIORITY);
function trx_addons_cpt_layouts_elm_load_styles_front() {
if ( trx_addons_exists_elementor() ) {
global $TRX_ADDONS_STORAGE;
$TRX_ADDONS_STORAGE['cur_page_built_with_elementor'] = trx_addons_is_singular() && trx_addons_is_built_with_elementor( get_the_ID() );
$TRX_ADDONS_STORAGE['force_load_elementor_styles'] = apply_filters('trx_addons_filter_force_load_elementor_styles', false );
if ( !empty($TRX_ADDONS_STORAGE['force_load_elementor_styles']) ) {
\Elementor\Plugin::instance()->frontend->enqueue_styles();
\Elementor\Plugin::instance()->frontend->print_fonts_links();
}
}
}
}
if ( !function_exists( 'trx_addons_cpt_layouts_elm_load_scripts_front' ) ) {
add_action("wp_footer", 'trx_addons_cpt_layouts_elm_load_scripts_front');
function trx_addons_cpt_layouts_elm_load_scripts_front() {
if ( trx_addons_exists_elementor() ) {
global $TRX_ADDONS_STORAGE;
if ( !empty($TRX_ADDONS_STORAGE['force_load_elementor_styles']) ) {
\Elementor\Plugin::instance()->frontend->enqueue_scripts();
}
}
}
}
// Create layouts
//------------------------------------------------------------------------
// Replace post_id in CSS styles
if ( ! function_exists( 'trx_addons_cpt_layouts_elm_create_layout_post_meta' ) ) {
add_filter( 'trx_addons_filter_create_layout_post_meta', 'trx_addons_cpt_layouts_elm_create_layout_post_meta', 10, 4 );
function trx_addons_cpt_layouts_elm_create_layout_post_meta( $meta_val, $meta_key, $layout_slug, $new_id ) {
if ( $meta_key == '_elementor_css' && ! empty( $new_id ) && ! empty( $layout_slug ) ) {
$parts = explode( '_', $layout_slug );
$type = $parts[0];
$old_id = ! empty( $parts[1] ) ? (int) $parts[1] : 0;
if ( $old_id > 0 && $old_id != $new_id ) {
$meta_val = trx_addons_str_replace( $old_id, $new_id, $meta_val );
}
}
return $meta_val;
}
}
// One-click import support
//------------------------------------------------------------------------
// Export custom layouts
if ( !function_exists( 'trx_addons_cpt_layouts_elm_export_meta' ) ) {
if (is_admin()) add_filter( 'trx_addons_filter_cpt_layouts_export_meta', 'trx_addons_cpt_layouts_elm_export_meta', 10, 2 );
function trx_addons_cpt_layouts_elm_export_meta($meta, $post) {
$tpl = get_post_meta( $post->ID, '_wp_page_template', true );
if (!empty($tpl)) $meta['_wp_page_template'] = $tpl;
$data = get_post_meta( $post->ID, '_elementor_data', true );
if (!empty($data)) $meta['_elementor_data'] = $data;
$mode = get_post_meta( $post->ID, '_elementor_edit_mode', true );
if (!empty($mode)) $meta['_elementor_edit_mode'] = $mode;
$css = get_post_meta( $post->ID, '_elementor_css', true );
if (!empty($css)) $meta['_elementor_css'] = serialize($css);
$ver = get_post_meta( $post->ID, '_elementor_version', true );
if (!empty($ver)) $meta['_elementor_version'] = $ver;
return $meta;
}
}