PluginProbe
Elementor Website Builder – more than just a page builder / 3.9.2
Elementor Website Builder – more than just a page builder v3.9.2
4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 4.0.7 All 451 releases
← All changes | includes/managers/elements.php +22 -127 4.1.53.9.2 View file →
@@ -1,7 +1,8 @@
1 1 <?php
2 2 namespace Elementor;
3 3
4 +use Elementor\Core\Experiments\Manager;
4 5 use Elementor\Includes\Elements\Container;
5 6
6 7 if ( ! defined( 'ABSPATH' ) ) {
7 8 exit; // Exit if accessed directly.
@@ -16,15 +17,8 @@
16 17 * @since 1.0.0
17 18 */
18 19 class Elements_Manager {
19 20
20 - const CATEGORY_ATOMIC_ELEMENTS = 'v4-elements';
21 - const CATEGORY_ATOMIC_FORM = 'atomic-form';
22 - const CATEGORY_FAVORITES = 'favorites';
23 - const CATEGORY_ANGIE_WIDGETS = 'angie-widgets';
24 - const CATEGORY_CUSTOM_WIDGETS = 'custom-widgets';
25 - const CATEGORY_BASIC = 'basic';
26 -
27 21 /**
28 22 * Element types.
29 23 *
30 24 * Holds the list of all the element types.
@@ -41,9 +35,9 @@
41 35 * Holds the list of all the element categories.
42 36 *
43 37 * @access private
44 38 *
45 - * @var $categories
39 + * @var
46 40 */
47 41 private $categories;
48 42
49 43 /**
@@ -73,11 +67,15 @@
73 67 *
74 68 * @return Element_Base|null Element instance if element created, or null
75 69 * otherwise.
76 70 */
77 - public function create_element_instance( array $element_data, array $element_args = [], ?Element_Base $element_type = null ) {
71 + public function create_element_instance( array $element_data, array $element_args = [], Element_Base $element_type = null ) {
78 72 if ( null === $element_type ) {
79 - $element_type = $this->get_element( $element_data['elType'], isset( $element_data['widgetType'] ) ? $element_data['widgetType'] : null );
73 + if ( 'widget' === $element_data['elType'] ) {
74 + $element_type = Plugin::$instance->widgets_manager->get_widget_types( $element_data['widgetType'] );
75 + } else {
76 + $element_type = $this->get_element_types( $element_data['elType'] );
77 + }
80 78 }
81 79
82 80 if ( ! $element_type ) {
83 81 return null;
@@ -95,20 +93,8 @@
95 93
96 94 return $element;
97 95 }
98 96
99 - public function get_element( string $el_type, ?string $widget_type = null ) {
100 - $element = null;
101 -
102 - if ( 'widget' === $el_type ) {
103 - $element = Plugin::$instance->widgets_manager->get_widget_types( $widget_type );
104 - } else {
105 - $element = $this->get_element_types( $el_type );
106 - }
107 -
108 - return $element;
109 - }
110 -
111 97 /**
112 98 * Get element categories.
113 99 *
114 100 * Retrieve the list of categories the element belongs to.
@@ -290,12 +276,8 @@
290 276 * @access private
291 277 */
292 278 private function init_categories() {
293 279 $this->categories = [
294 - self::CATEGORY_ATOMIC_ELEMENTS => [
295 - 'title' => esc_html__( 'Atomic Elements', 'elementor' ),
296 - 'hideIfEmpty' => true,
297 - ],
298 280 'layout' => [
299 281 'title' => esc_html__( 'Layout', 'elementor' ),
300 282 'hideIfEmpty' => true,
301 283 ],
@@ -304,73 +286,35 @@
304 286 'icon' => 'eicon-font',
305 287 ],
306 288 'pro-elements' => [
307 289 'title' => esc_html__( 'Pro', 'elementor' ),
308 - 'promotion' => [
309 - 'url' => esc_url( 'https://go.elementor.com/go-pro-section-pro-widget-panel/' ),
310 - ],
311 290 ],
312 - 'helloplus' => [
313 - 'title' => esc_html__( 'Hello+', 'elementor' ),
314 - 'hideIfEmpty' => true,
315 - ],
316 291 'general' => [
317 292 'title' => esc_html__( 'General', 'elementor' ),
318 293 'icon' => 'eicon-font',
319 294 ],
320 - 'link-in-bio' => [
321 - 'title' => esc_html__( 'Link In Bio', 'elementor' ),
322 - 'hideIfEmpty' => true,
323 - ],
324 295 'theme-elements' => [
325 296 'title' => esc_html__( 'Site', 'elementor' ),
326 297 'active' => false,
327 - 'promotion' => [
328 - 'url' => esc_url( 'https://go.elementor.com/go-pro-section-site-widget-panel/' ),
329 - ],
330 298 ],
331 299 'woocommerce-elements' => [
332 300 'title' => esc_html__( 'WooCommerce', 'elementor' ),
333 301 'active' => false,
334 - 'promotion' => [
335 - 'url' => esc_url( 'https://go.elementor.com/go-pro-section-woocommerce-widget-panel/' ),
336 - ],
337 302 ],
338 303 ];
339 304
340 - if ( Plugin::$instance->experiments->is_feature_active( 'e_atomic_elements' ) ) {
341 - $atomic_form_category = [
342 - 'title' => esc_html__( 'Atomic Form', 'elementor' ),
343 - ];
344 -
345 - if ( Utils::has_pro() && Plugin::$instance->experiments->is_feature_active( 'e_pro_atomic_form' ) ) {
346 - $atomic_form_category['hideIfEmpty'] = true;
347 - } elseif ( ! Utils::has_pro() ) {
348 - $atomic_form_category['hideIfEmpty'] = false;
349 - $atomic_form_category['promotion'] = [
350 - 'url' => esc_url( 'https://go.elementor.com/go-pro-atomic-form-section/' ),
351 - ];
352 - } else {
353 - $atomic_form_category['hideIfEmpty'] = true;
354 - }
355 -
356 - $this->categories = array_merge(
357 - [ self::CATEGORY_ATOMIC_ELEMENTS => $this->categories[ self::CATEGORY_ATOMIC_ELEMENTS ] ],
358 - [ self::CATEGORY_ATOMIC_FORM => $atomic_form_category ],
359 - array_diff_key( $this->categories, [ self::CATEGORY_ATOMIC_ELEMENTS => true ] )
360 - );
305 + // Not using the `add_category` because it doesn't allow 3rd party to inject a category on top the others.
306 + if ( Plugin::instance()->experiments->is_feature_active( 'favorite-widgets' ) ) {
307 + $this->categories = array_merge_recursive( [
308 + 'favorites' => [
309 + 'title' => esc_html__( 'Favorites', 'elementor' ),
310 + 'icon' => 'eicon-heart',
311 + 'sort' => 'a-z',
312 + 'hideIfEmpty' => false,
313 + ],
314 + ], $this->categories );
361 315 }
362 316
363 - // Not using the `add_category` because it doesn't allow 3rd party to inject a category on top the others.
364 - $this->categories = array_merge_recursive( [
365 - self::CATEGORY_FAVORITES => [
366 - 'title' => esc_html__( 'Favorites', 'elementor' ),
367 - 'icon' => 'eicon-heart',
368 - 'sort' => 'a-z',
369 - 'hideIfEmpty' => false,
370 - ],
371 - ], $this->categories );
372 -
373 317 /**
374 318 * When categories are registered.
375 319 *
376 320 * Fires after basic categories are registered, before WordPress
@@ -384,67 +328,18 @@
384 328 * @param Elements_Manager $this Elements manager instance.
385 329 */
386 330 do_action( 'elementor/elements/categories_registered', $this );
387 331
388 - $after_candidates = Plugin::$instance->experiments->is_feature_active( 'e_atomic_elements' )
389 - ? [ self::CATEGORY_ATOMIC_FORM, self::CATEGORY_ATOMIC_ELEMENTS ]
390 - : [ self::CATEGORY_BASIC ];
332 + $this->categories['pojo'] = [
333 + 'title' => esc_html__( 'Pojo Themes', 'elementor' ),
334 + 'icon' => 'eicon-pojome',
335 + ];
391 336
392 - $this->promote_category_after( self::CATEGORY_ANGIE_WIDGETS, $after_candidates );
393 - $this->promote_category_after( self::CATEGORY_CUSTOM_WIDGETS, $after_candidates );
394 -
395 337 $this->categories['wordpress'] = [
396 338 'title' => esc_html__( 'WordPress', 'elementor' ),
397 339 'icon' => 'eicon-wordpress',
398 340 'active' => false,
399 341 ];
400 - }
401 -
402 - public function enqueue_elements_styles() {
403 - foreach ( $this->get_element_types() as $element ) {
404 - $element->enqueue_styles();
405 - }
406 - }
407 -
408 - public function enqueue_elements_scripts() {
409 - foreach ( $this->get_element_types() as $element ) {
410 - $element->enqueue_scripts();
411 - }
412 - }
413 -
414 - public function register_frontend_handlers() {
415 - foreach ( $this->get_element_types() as $element ) {
416 - $element->register_frontend_handlers();
417 - }
418 - }
419 -
420 - private function promote_category_after( string $category_name, array $after_candidates ): void {
421 - if ( ! isset( $this->categories[ $category_name ] ) ) {
422 - return;
423 - }
424 -
425 - $after = null;
426 -
427 - foreach ( $after_candidates as $candidate ) {
428 - if ( isset( $this->categories[ $candidate ] ) ) {
429 - $after = $candidate;
430 - break;
431 - }
432 - }
433 -
434 - if ( ! $after ) {
435 - return;
436 - }
437 -
438 - $category = $this->categories[ $category_name ];
439 - unset( $this->categories[ $category_name ] );
440 -
441 - $position = array_search( $after, array_keys( $this->categories ), true ) + 1;
442 - $this->categories = array_merge(
443 - array_slice( $this->categories, 0, $position, true ),
444 - [ $category_name => $category ],
445 - array_slice( $this->categories, $position, null, true )
446 - );
447 342 }
448 343
449 344 /**
450 345 * Require files.