add_cpt_support();
$this->init_components();
/**
* Elementor init.
*
* Fires when Elementor components are initialized.
*
* After Elementor finished loading but before any headers are sent.
*
* @since 1.0.0
*/
do_action( 'elementor/init' );
}
/**
* Get install time.
*
* Retrieve the time when Elementor was installed.
*
* @since 2.6.0
* @access public
* @static
*
* @return int Unix timestamp when Elementor was installed.
*/
public function get_install_time() {
$installed_time = get_option( '_elementor_installed_time' );
if ( ! $installed_time ) {
$installed_time = time();
update_option( '_elementor_installed_time', $installed_time );
}
return $installed_time;
}
/**
* @since 2.3.0
* @access public
*/
public function on_rest_api_init() {
// On admin/frontend sometimes the rest API is initialized after the common is initialized.
if ( ! $this->common ) {
$this->init_common();
}
}
/**
* Init components.
*
* Initialize Elementor components. Register actions, run setting manager,
* initialize all the components that run elementor, and if in admin page
* initialize admin components.
*
* @since 1.0.0
* @access private
*/
private function init_components() {
$this->experiments = new Experiments_Manager();
$this->breakpoints = new Breakpoints_Manager();
$this->inspector = new Inspector();
Settings_Manager::run();
$this->db = new DB();
$this->controls_manager = new Controls_Manager();
$this->documents = new Documents_Manager();
$this->kits_manager = new Kits_Manager();
$this->elements_manager = new Elements_Manager();
$this->widgets_manager = new Widgets_Manager();
$this->skins_manager = new Skins_Manager();
$this->files_manager = new Files_Manager();
$this->assets_manager = new Assets_Manager();
$this->icons_manager = new Icons_Manager();
$this->settings = new Settings();
$this->tools = new Tools();
$this->editor = new Editor();
$this->preview = new Preview();
$this->frontend = new Frontend();
$this->maintenance_mode = new Maintenance_Mode();
$this->dynamic_tags = new Dynamic_Tags_Manager();
$this->modules_manager = new Modules_Manager();
$this->templates_manager = new TemplateLibrary\Manager();
$this->role_manager = new Core\RoleManager\Role_Manager();
$this->system_info = new System_Info_Module();
$this->revisions_manager = new Revisions_Manager();
$this->images_manager = new Images_Manager();
$this->wp = new Wp_Api();
$this->assets_loader = new Assets_Loader();
$this->uploads_manager = new Uploads_Manager();
$this->admin_menu_manager = new Admin_Menu_Manager();
$this->admin_menu_manager->register_actions();
User::init();
User_Data::init();
Api::init();
Tracker::init();
$this->upgrade = new Core\Upgrade\Manager();
$this->custom_tasks = new Core\Upgrade\Custom_Tasks_Manager();
$this->app = new App\App();
if ( is_admin() ) {
$this->heartbeat = new Heartbeat();
$this->wordpress_widgets_manager = new WordPress_Widgets_Manager();
$this->admin = new Admin();
$this->beta_testers = new Beta_Testers();
}
}
/**
* @since 2.3.0
* @access public
*/
public function init_common() {
$this->common = new CommonApp();
$this->common->init_components();
}
/**
* Add custom post type support.
*
* Register Elementor support for all the supported post types defined by
* the user in the admin screen and saved as `elementor_cpt_support` option
* in WordPress `$wpdb->options` table.
*
* If no custom post type selected, usually in new installs, this method
* will return the two default post types: `page` and `post`.
*
* @since 1.0.0
* @access private
*/
private function add_cpt_support() {
$cpt_support = get_option( 'elementor_cpt_support', self::ELEMENTOR_DEFAULT_POST_TYPES );
foreach ( $cpt_support as $cpt_slug ) {
add_post_type_support( $cpt_slug, 'elementor' );
}
}
/**
* Register autoloader.
*
* Elementor autoloader loads all the classes needed to run the plugin.
*
* @since 1.6.0
* @access private
*/
private function register_autoloader() {
require_once ELEMENTOR_PATH . '/includes/autoloader.php';
Autoloader::run();
}
/**
* Magic getter for accessing certain properties.
*
* @since 3.1.0
* @access public
*
* @param string $property The property name.
* @return mixed The property value or null if not found.
* @throws \Exception If trying to access a private property.
*/
public function __get( $property ) {
if ( 'posts_css_manager' === $property ) {
self::$instance->modules_manager->get_modules( 'dev-tools' )->deprecation->deprecated_argument( 'Plugin::$instance->posts_css_manager', '2.7.0', 'Plugin::$instance->files_manager' );
return $this->files_manager;
}
if ( 'data_manager' === $property ) {
return Data_Manager::instance();
}
if ( property_exists( $this, $property ) ) {
throw new \Exception( 'Cannot access private property.' );
}
return null;
}
/**
* Plugin constructor.
*
* Initializing Elementor plugin.
*
* @since 1.0.0
* @access private
*/
private function __construct() {
$this->register_autoloader();
$this->logger = Log_Manager::instance();
$this->data_manager_v2 = Data_Manager_V2::instance();
Maintenance::init();
Compatibility::register_actions();
add_action( 'init', [ $this, 'init' ], 0 );
add_action( 'rest_api_init', [ $this, 'on_rest_api_init' ], 9 );
}
final public static function get_title() {
return esc_html__( 'Elementor', 'elementor' );
}
}
if ( ! defined( 'ELEMENTOR_TESTS' ) ) {
// In tests we run the instance manually.
Plugin::instance();
}