PluginProbe
Elementor Website Builder – more than just a page builder / 3.23.0-dev3
Elementor Website Builder – more than just a page builder v3.23.0-dev3
4.3.0-beta3 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 All 452 releases
elementor / app / modules / import-export / runners / export / taxonomies.php

taxonomies.php in Elementor Website Builder – more than just a page builder 3.23.0-dev3, at app/modules/import-export/runners/export/taxonomies.php

119 lines 2.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Elementor\App\Modules\ImportExport\Runners\Export;
3
4 use Elementor\App\Modules\ImportExport\Utils as ImportExportUtils;
5
6 class Taxonomies extends Export_Runner_Base {
7
8 public static function get_name() : string {
9 return 'taxonomies';
10 }
11
12 public function should_export( array $data ) {
13 return (
14 isset( $data['include'] ) &&
15 in_array( 'content', $data['include'], true )
16 );
17 }
18
19 public function export( array $data ) {
20 $wp_builtin_post_types = ImportExportUtils::get_builtin_wp_post_types();
21 $selected_custom_post_types = isset( $data['selected_custom_post_types'] ) ? $data['selected_custom_post_types'] : [];
22 $post_types = array_merge( $wp_builtin_post_types, $selected_custom_post_types );
23
24 $export = $this->export_taxonomies( $post_types );
25
26 $manifest_data['taxonomies'] = $export['manifest'];
27
28 return [
29 'files' => $export['files'],
30 'manifest' => [
31 $manifest_data,
32 ],
33 ];
34 }
35
36 private function export_taxonomies( array $post_types ) {
37 $files = [];
38 $manifest = [];
39
40 $taxonomies = get_taxonomies();
41
42 foreach ( $taxonomies as $taxonomy ) {
43 $taxonomy_post_types = get_taxonomy( $taxonomy )->object_type;
44 $intersected_post_types = array_intersect( $taxonomy_post_types, $post_types );
45
46 if ( empty( $intersected_post_types ) ) {
47 continue;
48 }
49
50 $data = $this->export_terms( $taxonomy );
51
52 if ( empty( $data ) ) {
53 continue;
54 }
55
56 foreach ( $intersected_post_types as $post_type ) {
57 $manifest[ $post_type ][] = $taxonomy;
58 }
59
60 $files[] = [
61 'path' => 'taxonomies/' . $taxonomy,
62 'data' => $data,
63 ];
64 }
65
66 return [
67 'files' => $files,
68 'manifest' => $manifest,
69 ];
70 }
71
72 private function export_terms( $taxonomy ) {
73 $terms = get_terms( [
74 'taxonomy' => (array) $taxonomy,
75 'hide_empty' => true,
76 'get' => 'all',
77 ] );
78
79 $ordered_terms = $this->order_terms( $terms );
80
81 if ( empty( $ordered_terms ) ) {
82 return [];
83 }
84
85 $data = [];
86
87 foreach ( $ordered_terms as $term ) {
88 $data[] = [
89 'term_id' => $term->term_id,
90 'name' => $term->name,
91 'slug' => $term->slug,
92 'taxonomy' => $term->taxonomy,
93 'description' => $term->description,
94 'parent' => $term->parent,
95 ];
96 }
97
98 return $data;
99 }
100
101 // Put terms in order with no child going before its parent.
102 private function order_terms( array $terms ) {
103 $ordered_terms = [];
104
105 while ( $term = array_shift( $terms ) ) {
106 $is_top_level = 0 === $term->parent;
107 $is_parent_exits = isset( $ordered_terms[ $term->parent ] );
108
109 if ( $is_top_level || $is_parent_exits ) {
110 $ordered_terms[ $term->term_id ] = $term;
111 } else {
112 $terms[] = $term;
113 }
114 }
115
116 return $ordered_terms;
117 }
118 }
119