← All changes
|
modules/home/transformations/create-site-settings-url.php
+70
-5
4.3.1
→
3.24.8
View file →
| @@ -1,24 +1,26 @@ | ||
| 1 | 1 | <?php |
| 2 | 2 | namespace Elementor\Modules\Home\Transformations; |
| 3 | 3 | |
| 4 | -use Elementor\Core\DocumentTypes\Page; | |
| 5 | -use Elementor\Includes\EditorAssetsAPI; | |
| 4 | +use Elementor\Core\Base\Document; | |
| 5 | +use Elementor\Plugin; | |
| 6 | 6 | |
| 7 | 7 | if ( ! defined( 'ABSPATH' ) ) { |
| 8 | - exit; // Exit if accessed directly. | |
| 8 | + exit; // Exit if accessed directly | |
| 9 | 9 | } |
| 10 | 10 | |
| 11 | 11 | class Create_Site_Settings_Url extends Base\Transformations_Abstract { |
| 12 | 12 | |
| 13 | + const URL_TYPE = 'site_settings'; | |
| 14 | + | |
| 13 | 15 | const SITE_SETTINGS_ITEMS = [ 'Site Settings', 'Site Logo', 'Global Colors', 'Global Fonts' ]; |
| 14 | 16 | |
| 15 | 17 | public function transform( array $home_screen_data ): array { |
| 16 | - if ( ! EditorAssetsAPI::has_valid_nested_array( $home_screen_data, [ 'get_started', 'repeater' ] ) ) { | |
| 18 | + if ( empty( $home_screen_data['get_started'] ) ) { | |
| 17 | 19 | return $home_screen_data; |
| 18 | 20 | } |
| 19 | 21 | |
| 20 | - $site_settings_url_config = Page::get_site_settings_url_config(); | |
| 22 | + $site_settings_url_config = $this->get_site_settings_url_config(); | |
| 21 | 23 | |
| 22 | 24 | $home_screen_data['get_started']['repeater'] = array_map( function( $repeater_item ) use ( $site_settings_url_config ) { |
| 23 | 25 | if ( ! in_array( $repeater_item['title'], static::SITE_SETTINGS_ITEMS, true ) ) { |
| 24 | 26 | return $repeater_item; |
| @@ -31,6 +33,69 @@ | ||
| 31 | 33 | return array_merge( $repeater_item, $site_settings_url_config ); |
| 32 | 34 | }, $home_screen_data['get_started']['repeater'] ); |
| 33 | 35 | |
| 34 | 36 | return $home_screen_data; |
| 37 | + } | |
| 38 | + | |
| 39 | + private function get_site_settings_url_config(): array { | |
| 40 | + $existing_elementor_page = $this->get_elementor_page(); | |
| 41 | + $site_settings_url = ! empty( $existing_elementor_page ) | |
| 42 | + ? $this->get_elementor_edit_url( $existing_elementor_page->ID ) | |
| 43 | + : $this->get_elementor_create_new_page_url(); | |
| 44 | + | |
| 45 | + return [ | |
| 46 | + 'new_page' => empty( $existing_elementor_page ), | |
| 47 | + 'url' => $site_settings_url, | |
| 48 | + 'type' => static::URL_TYPE, | |
| 49 | + ]; | |
| 50 | + } | |
| 51 | + | |
| 52 | + private function get_elementor_create_new_page_url(): string { | |
| 53 | + $active_kit_id = Plugin::$instance->kits_manager->get_active_id(); | |
| 54 | + | |
| 55 | + if ( empty( $active_kit_id ) ) { | |
| 56 | + return Plugin::$instance->documents->get_create_new_post_url( 'page' ); | |
| 57 | + } | |
| 58 | + | |
| 59 | + return add_query_arg( [ 'active-document' => $active_kit_id ], Plugin::$instance->documents->get_create_new_post_url( 'page' ) ); | |
| 60 | + } | |
| 61 | + | |
| 62 | + private function get_elementor_edit_url( int $post_id ): string { | |
| 63 | + $active_kit_id = Plugin::$instance->kits_manager->get_active_id(); | |
| 64 | + $document = Plugin::$instance->documents->get( $post_id ); | |
| 65 | + | |
| 66 | + if ( ! $document ) { | |
| 67 | + return ''; | |
| 68 | + } | |
| 69 | + | |
| 70 | + return add_query_arg( [ 'active-document' => $active_kit_id ], $document->get_edit_url() ); | |
| 71 | + } | |
| 72 | + | |
| 73 | + private function get_elementor_page() { | |
| 74 | + $args = [ | |
| 75 | + 'meta_key' => Document::BUILT_WITH_ELEMENTOR_META_KEY, | |
| 76 | + 'sort_order' => 'asc', | |
| 77 | + 'sort_column' => 'post_date', | |
| 78 | + ]; | |
| 79 | + $pages = get_pages( $args ); | |
| 80 | + | |
| 81 | + if ( empty( $pages ) ) { | |
| 82 | + return null; | |
| 83 | + } | |
| 84 | + | |
| 85 | + $show_page_on_front = 'page' === get_option( 'show_on_front' ); | |
| 86 | + | |
| 87 | + if ( ! $show_page_on_front ) { | |
| 88 | + return $pages[0]; | |
| 89 | + } | |
| 90 | + | |
| 91 | + $home_page_id = get_option( 'page_on_front' ); | |
| 92 | + | |
| 93 | + foreach ( $pages as $page ) { | |
| 94 | + if ( (string) $page->ID === $home_page_id ) { | |
| 95 | + return $page; | |
| 96 | + } | |
| 97 | + } | |
| 98 | + | |
| 99 | + return $pages[0]; | |
| 35 | 100 | } |
| 36 | 101 | } |