<?php
/**
* Astra Sites Compatibility for 'Elementor'
*
* @package Astra Sites
* @since 2.0.0
*/
namespace AstraSites\Elementor;
defined( 'ABSPATH' ) || exit;
if ( ! class_exists( '\Elementor\Plugin' ) ) {
return;
}
if ( ! class_exists( 'Astra_Sites_Compatibility_Elementor' ) ) :
/**
* Elementor Compatibility
*
* @since 2.0.0
*/
class Astra_Sites_Compatibility_Elementor {
/**
* Instance
*
* @access private
* @var object Class object.
* @since 2.0.0
*/
private static $instance;
/**
* Initiator
*
* @since 2.0.0
* @return object initialized object of class.
*/
public static function get_instance() {
if ( ! isset( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
}
/**
* Constructor
*
* @since 2.0.0
*/
public function __construct() {
/**
* Add Slashes
*
* @todo Elementor already have below code which works on defining the constant `WP_LOAD_IMPORTERS`.
* After defining the constant `WP_LOAD_IMPORTERS` in WP CLI it was not works.
* Try to remove below duplicate code in future.
*/
if ( ! wp_doing_ajax() || ( defined( 'ELEMENTOR_VERSION' ) && version_compare( ELEMENTOR_VERSION, '3.0.0', '>=' ) ) ) {
remove_filter( 'wp_import_post_meta', array( 'Elementor\Compatibility', 'on_wp_import_post_meta' ) );
remove_filter( 'wxr_importer.pre_process.post_meta', array( 'Elementor\Compatibility', 'on_wxr_importer_pre_process_post_meta' ) );
add_filter( 'wp_import_post_meta', array( $this, 'on_wp_import_post_meta' ) );
add_filter( 'wxr_importer.pre_process.post_meta', array( $this, 'on_wxr_importer_pre_process_post_meta' ) );
}
add_action( 'astra_sites_before_delete_imported_posts', array( $this, 'force_delete_kit' ), 10, 2 );
add_action( 'astra_sites_before_sse_import', array( $this, 'disable_attachment_metadata' ) );
add_action( 'init', array( $this, 'init' ) );
add_action( 'astra_sites_after_plugin_activation', array( $this, 'disable_elementor_redirect' ) );
}
/**
* Disable Elementor redirect.
*
* @return void.
*/
public function disable_elementor_redirect() {
$elementor_redirect = get_transient( 'elementor_activation_redirect' );
if ( ! empty( $elementor_redirect ) && '' !== $elementor_redirect ) {
delete_transient( 'elementor_activation_redirect' );
}
}
/**
* Remove the transient update check for plugins callback from Elementor.
* This reduces the extra code execution for Elementor.
*/
public function init() {
if ( astra_sites_has_import_started() && null !== \Elementor\Plugin::$instance->admin ) {
remove_filter( 'pre_set_site_transient_update_plugins', array( \Elementor\Plugin::$instance->admin->get_component( 'canary-deployment' ), 'check_version' ) );
}
}
/**
* Disable the attachment metadata
*/
public function disable_attachment_metadata() {
remove_filter(
'wp_update_attachment_metadata', array(
\Elementor\Plugin::$instance->uploads_manager->get_file_type_handlers( 'svg' ),
'set_svg_meta_data',
), 10, 2
);
}
/**
* Force Delete Elementor Kit
*
* Delete the previously imported Elementor kit.
*
* @param int $post_id Post name.
* @param string $post_type Post type.
*/
public function force_delete_kit( $post_id = 0, $post_type = '' ) {
if ( ! $post_id ) {
return;
}
if ( 'elementor_library' === $post_type ) {
$_GET['force_delete_kit'] = true;
}
}
/**
* Process post meta before WP importer.
*
* Normalize Elementor post meta on import, We need the `wp_slash` in order
* to avoid the unslashing during the `add_post_meta`.
*
* Fired by `wp_import_post_meta` filter.
*
* @since 1.4.3
* @access public
*
* @param array $post_meta Post meta.
*
* @return array Updated post meta.
*/
public function on_wp_import_post_meta( $post_meta ) {
foreach ( $post_meta as &$meta ) {
if ( '_elementor_data' === $meta['key'] ) {
$meta['value'] = wp_slash( $meta['value'] );
break;
}
}
return $post_meta;
}
/**
* Process post meta before WXR importer.
*
* Normalize Elementor post meta on import with the new WP_importer, We need
* the `wp_slash` in order to avoid the unslashing during the `add_post_meta`.
*
* Fired by `wxr_importer.pre_process.post_meta` filter.
*
* @since 1.4.3
* @access public
*
* @param array $post_meta Post meta.
*
* @return array Updated post meta.
*/
public function on_wxr_importer_pre_process_post_meta( $post_meta ) {
if ( '_elementor_data' === $post_meta['key'] ) {
$post_meta['value'] = wp_slash( $post_meta['value'] );
}
return $post_meta;
}
}
/**
* Kicking this off by calling 'get_instance()' method
*/
Astra_Sites_Compatibility_Elementor::get_instance();
endif;