# shopbuilder/2.0.0/app/Helpers/ElementorDataMap.php

ShopBuilder – WooCommerce Builder For Elementor, version 2.0.0. 76 lines.

- Page: https://pluginprobe.com/plugins/shopbuilder/2.0.0/code/app/Helpers/ElementorDataMap.php
- Raw: https://pluginprobe.com/plugins/shopbuilder/2.0.0/raw/app/Helpers/ElementorDataMap.php
- Modified: 2023-11-03T12:09:30+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/shopbuilder/2.0.0/code/app/Helpers/ElementorDataMap.php#L10-L20`.

```php
<?php

namespace RadiusTheme\SB\Helpers;

use RadiusTheme\SB\Traits\SingletonTrait;

class ElementorDataMap {
	/**
	 * Singleton
	 */
	use SingletonTrait;

	/***
	 * Elementor Data key
	 */
	private const ELEMENTOR_DATA_KEY = '_elementor_data';
	/***
	 * @var array
	 */
	private array $eldata = [];

	/***
	 * @param int $post_id
	 *
	 * @return array|null
	 */
	public function get_elementor_data( int $post_id ): ?array {
		$data = get_post_meta( $post_id, self::ELEMENTOR_DATA_KEY, true );

		return json_decode( $data, true );
	}

	/***
	 * @param string $widget_name
	 * @param array|null $data
	 * @param int|null $post_id
	 *
	 * @return array
	 */
	public function get_widget_data( string $widget_name, ?array $data = null, ?int $post_id = null ): array {
		if ( ! $data && $post_id ) {
			$data = $this->get_elementor_data( $post_id );
		}

		if ( empty( $data ) || ! is_array( $data ) ) {
			return [];
		}

		$this->search_el( $data, $widget_name );

		return $this->eldata;
	}

	/***
	 * @param array $data
	 * @param string $name
	 *
	 * @return void
	 */
	private function search_el( array $data, string $name ): void {
		foreach ( $data as $value ) {
			if ( ! is_array( $value ) ) {
				continue;
			}

			if ( ! empty( $value['elements'] ) && is_array( $value['elements'] ) ) {
				$this->search_el( $value['elements'], $name );
			} else {
				if ( $value['elType'] === 'widget' && $value['widgetType'] === $name ) {
					$this->eldata[] = $value;
				}
			}
		}
	}
}

```
