PluginProbe ʕ •ᴥ•ʔ
Starter Sites & Templates by Neve / 1.4.1
Starter Sites & Templates by Neve v1.4.1
1.4.1 1.4.0 1.3.0 1.2.29 1.2.28 1.2.6 1.2.7 1.2.8 1.2.9 trunk 1.0.10 1.0.11 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.20 1.1.21 1.1.22 1.1.23 1.1.24 1.1.25 1.1.26 1.1.27 1.1.28 1.1.29 1.1.3 1.1.30 1.1.31 1.1.32 1.1.33 1.1.34 1.1.35 1.1.36 1.1.37 1.1.38 1.1.39 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.2.0 1.2.1 1.2.10 1.2.11 1.2.12 1.2.13 1.2.14 1.2.15 1.2.16 1.2.17 1.2.18 1.2.19 1.2.2 1.2.20 1.2.21 1.2.22 1.2.23 1.2.24 1.2.25 1.2.26 1.2.27 1.2.3 1.2.4 1.2.5
templates-patterns-collection / includes / Importers / Helpers / Helper.php
templates-patterns-collection / includes / Importers / Helpers Last commit date
Helper.php 3 months ago Importer_Alterator.php 3 months ago Quiet_Skin.php 5 years ago Quiet_Skin_Legacy.php 5 years ago Slug_Mapping.php 3 months ago
Helper.php
210 lines
1 <?php
2 /**
3 * Themeisle Onboarding Trait
4 *
5 * @package templates-patterns-collection
6 */
7
8 namespace TIOB\Importers\Helpers;
9
10 trait Helper {
11 /**
12 * A list of allowed mimes.
13 *
14 * @var array
15 */
16 protected $extensions = array(
17 'jpg|jpeg|jpe' => 'image/jpeg',
18 'png' => 'image/png',
19 'webp' => 'image/webp',
20 'svg' => 'image/svg+xml',
21 );
22
23 /**
24 * Replace demo urls in meta with site urls.
25 */
26 public function replace_image_urls( $markup ) {
27 // Get all slashed and un-slashed urls.
28 $old_urls = $this->get_urls_to_replace( $markup );
29 if ( ! is_array( $old_urls ) || empty( $old_urls ) ) {
30 return $markup;
31 }
32
33 // Create an associative array.
34 $urls = array_combine( $old_urls, $old_urls );
35 // Unslash values of associative array.
36 $urls = array_map( 'wp_unslash', $urls );
37 // Remap host and directory path.
38 $urls = array_map( array( $this, 'remap_host' ), $urls );
39 // Replace image urls in meta.
40 $markup = str_replace( array_keys( $urls ), array_values( $urls ), $markup );
41
42 return $markup;
43 }
44
45 /**
46 * Get url replace array.
47 *
48 * @return array
49 */
50 private function get_urls_to_replace( $markup ) {
51 $regex = '/(?:http(?:s?):)(?:[\/\\\\\\\\|.|\w|\s|-])*\.(?:' . implode( '|', array_keys( $this->extensions ) ) . ')/m';
52
53 if ( ! is_string( $markup ) ) {
54 return array();
55 }
56
57 preg_match_all( $regex, $markup, $urls );
58
59 $urls = array_map(
60 function ( $value ) {
61 return rtrim( html_entity_decode( $value ), '\\' );
62 },
63 $urls[0]
64 );
65
66 $urls = array_unique( $urls );
67
68 return array_values( $urls );
69 }
70
71 /**
72 * Remap URLs host.
73 *
74 * @param $url
75 *
76 * @return string
77 */
78 private function remap_host( $url ) {
79 if ( ! strpos( $url, '/uploads/' ) ) {
80 return $url;
81 }
82 $old_url = $url;
83 $url_parts = parse_url( $url );
84
85 if ( ! isset( $url_parts['host'] ) ) {
86 return $url;
87 }
88 $url_parts['path'] = preg_split( '/\//', $url_parts['path'] );
89 $url_parts['path'] = array_slice( $url_parts['path'], - 3 );
90
91 $uploads_dir = wp_get_upload_dir();
92 $uploads_url = $uploads_dir['baseurl'];
93
94 $new_url = esc_url( $uploads_url . '/' . join( '/', $url_parts['path'] ) );
95
96 return str_replace( $old_url, $new_url, $url );
97 }
98
99 /**
100 * Hash the demo slug and prefix the page name with it. Drop words like demo, neve, or the demo slug from page slug.
101 *
102 * @param string $slug page slug.
103 * @param string $demo_slug demo slug.
104 * @param bool $check_collisions should check if slug collisions exist before hashing.
105 * @param array $reserved_slugs additional reserved slugs from current import run.
106 *
107 * @return string
108 */
109 public function cleanup_page_slug( $slug, $demo_slug, $check_collisions = false, $reserved_slugs = array() ) {
110 $unhashed = array( 'shop', 'my-account', 'checkout', 'cart', 'blog', 'news', 'lifter-courses', 'courses', 'dashboard', 'my-courses', 'memberships' );
111 $slug = $this->normalize_page_slug( $slug, $demo_slug );
112
113 if ( $slug === '' ) {
114 $slug = sanitize_title( $demo_slug );
115 }
116
117 if ( in_array( $slug, $unhashed, true ) ) {
118 return $slug;
119 }
120
121 $hash = substr( md5( $demo_slug ), 0, 5 );
122 if ( ! $check_collisions ) {
123 return $hash . '-' . $slug;
124 }
125
126 if ( ! $this->is_page_slug_taken( $slug, $reserved_slugs ) ) {
127 return $slug;
128 }
129
130 $hashed_slug = $hash . '-' . $slug;
131
132 if ( ! $this->is_page_slug_taken( $hashed_slug, $reserved_slugs ) ) {
133 return $hashed_slug;
134 }
135
136 return $this->generate_unique_page_slug( $hashed_slug, $reserved_slugs );
137 }
138
139 /**
140 * Normalize page slug before collision checks.
141 *
142 * @param string $slug page slug.
143 * @param string $demo_slug demo slug.
144 *
145 * @return string
146 */
147 public function normalize_page_slug( $slug, $demo_slug ) {
148 $slug = str_replace( $demo_slug, '', $slug );
149 $slug = str_replace( 'demo', '', $slug );
150 $slug = ltrim( $slug, '-' );
151
152 return $slug;
153 }
154
155 /**
156 * Check if page slug is already taken.
157 *
158 * @param string $slug slug to check.
159 * @param array $reserved_slugs additional reserved slugs from current import.
160 *
161 * @return bool
162 */
163 private function is_page_slug_taken( $slug, $reserved_slugs = array() ) {
164 if ( ! empty( $reserved_slugs ) && in_array( $slug, $reserved_slugs, true ) ) {
165 return true;
166 }
167
168 if ( $slug === '' ) {
169 return false;
170 }
171
172 return get_page_by_path( $slug, OBJECT, 'page' ) !== null;
173 }
174
175 /**
176 * Generate unique page slug.
177 *
178 * @param string $base_slug base slug.
179 * @param array $reserved_slugs additional reserved slugs from current import.
180 *
181 * @return string
182 */
183 private function generate_unique_page_slug( $base_slug, $reserved_slugs = array() ) {
184 if ( function_exists( 'wp_unique_post_slug' ) ) {
185 $unique_slug = wp_unique_post_slug( $base_slug, 0, 'publish', 'page', 0 );
186 if ( ! in_array( $unique_slug, $reserved_slugs, true ) ) {
187 return $unique_slug;
188 }
189
190 $suffix = 2;
191 while ( in_array( $unique_slug, $reserved_slugs, true ) ) {
192 $unique_slug = wp_unique_post_slug( $base_slug . '-' . $suffix, 0, 'publish', 'page', 0 );
193 $suffix++;
194 }
195
196 return $unique_slug;
197 }
198
199 $suffix = 2;
200 $slug = $base_slug;
201
202 while ( $this->is_page_slug_taken( $slug, $reserved_slugs ) ) {
203 $slug = $base_slug . '-' . $suffix;
204 $suffix++;
205 }
206
207 return $slug;
208 }
209 }
210