null. * * @return null|Element_Base|Element_Base[] Element types, or a list of all the element * types, or null if element does not exist. */ public function get_element_types( $element_name = null ) { if ( is_null( $this->_element_types ) ) { $this->init_elements(); } if ( null !== $element_name ) { return isset( $this->_element_types[ $element_name ] ) ? $this->_element_types[ $element_name ] : null; } return $this->_element_types; } /** * Get element types config. * * Retrieve the config of all the element types. * * @since 1.0.0 * @access public * * @return array Element types config. */ public function get_element_types_config() { $config = []; foreach ( $this->get_element_types() as $element ) { $config[ $element->get_name() ] = $element->get_config(); } return $config; } /** * Render elements content. * * Used to generate the elements templates on the editor. * * @since 1.0.0 * @access public */ public function render_elements_content() { foreach ( $this->get_element_types() as $element_type ) { $element_type->print_template(); } } /** * Init elements. * * Initialize Elementor elements by registering the supported elements. * Elementor supports by default `section` element and `column` element. * * @since 2.0.0 * @access private */ private function init_elements() { $this->_element_types = []; foreach ( [ 'section', 'column' ] as $element_name ) { $class_name = __NAMESPACE__ . '\Element_' . $element_name; $this->register_element_type( new $class_name() ); } $experiments_manager = Plugin::$instance->experiments; if ( $experiments_manager->is_feature_active( 'container' ) ) { $this->register_element_type( new Container() ); } /** * After elements registered. * * Fires after Elementor elements are registered. * * @since 1.0.0 */ do_action( 'elementor/elements/elements_registered', $this ); } /** * Init categories. * * Initialize the element categories. * * @since 1.7.12 * @access private */ private function init_categories() { $this->categories = [ 'layout' => [ 'title' => esc_html__( 'Layout', 'elementor' ), 'hideIfEmpty' => true, ], 'basic' => [ 'title' => esc_html__( 'Basic', 'elementor' ), 'icon' => 'eicon-font', ], 'pro-elements' => [ 'title' => esc_html__( 'Pro', 'elementor' ), ], 'general' => [ 'title' => esc_html__( 'General', 'elementor' ), 'icon' => 'eicon-font', ], 'theme-elements' => [ 'title' => esc_html__( 'Site', 'elementor' ), 'active' => false, ], 'woocommerce-elements' => [ 'title' => esc_html__( 'WooCommerce', 'elementor' ), 'active' => false, ], ]; // Not using the `add_category` because it doesn't allow 3rd party to inject a category on top the others. if ( Plugin::instance()->experiments->is_feature_active( 'favorite-widgets' ) ) { $this->categories = array_merge_recursive( [ 'favorites' => [ 'title' => esc_html__( 'Favorites', 'elementor' ), 'icon' => 'eicon-heart', 'sort' => 'a-z', 'hideIfEmpty' => false, ], ], $this->categories ); } /** * When categories are registered. * * Fires after basic categories are registered, before WordPress * category have been registered. * * This is where categories registered by external developers are * added. * * @since 2.0.0 * * @param Elements_Manager $this Elements manager instance. */ do_action( 'elementor/elements/categories_registered', $this ); $this->categories['pojo'] = [ 'title' => esc_html__( 'Pojo Themes', 'elementor' ), 'icon' => 'eicon-pojome', ]; $this->categories['wordpress'] = [ 'title' => esc_html__( 'WordPress', 'elementor' ), 'icon' => 'eicon-wordpress', 'active' => false, ]; } /** * Require files. * * Require Elementor element base class and column, section and repeater * elements. * * @since 1.0.0 * @access private */ private function require_files() { require_once ELEMENTOR_PATH . 'includes/base/element-base.php'; require ELEMENTOR_PATH . 'includes/elements/column.php'; require ELEMENTOR_PATH . 'includes/elements/section.php'; require ELEMENTOR_PATH . 'includes/elements/repeater.php'; } }