PluginProbe ʕ •ᴥ•ʔ
Permalink Manager Lite / 2.2.8.9
Permalink Manager Lite v2.2.8.9
2.6.0 2.5.5 2.5.4 2.5.3.4 2.2.18 2.2.19.2 2.2.19.3 2.2.19.3.1 2.2.2 2.2.20 2.2.20.1 2.2.20.3 2.2.4 2.2.5 2.2.6 2.2.7.2 2.2.7.3 2.2.7.5 2.2.7.6 2.2.8.4 2.2.8.5 2.2.8.6 2.2.8.7 2.2.8.9 2.2.9.1 2.2.9.2 2.2.9.2.1 2.2.9.3 2.2.9.4 2.2.9.6 2.2.9.7 2.2.9.9 2.3.0 2.3.1.1 2.4.0 2.4.1 2.4.1.2 2.4.1.3 2.4.1.4 2.4.1.5 2.4.1.6 2.4.2 2.4.2.1 2.4.3 2.4.3.1 2.4.3.2 2.4.3.3 2.4.3.4 2.4.4 2.4.4.1 2.4.4.2 2.4.4.3 2.5.0 2.5.1 2.5.1.1 2.5.1.2 2.5.1.3 2.5.1.4 2.5.2 2.5.2.1 2.5.2.2 2.5.2.3 2.5.2.4 2.5.3 2.5.3.1 2.5.3.2 2.5.3.3 trunk 0.2 0.3 0.3.1 0.3.2 0.3.3 0.3.4 0.4 0.4.1 0.4.2 0.4.3 0.4.4 0.4.6 0.4.7 0.4.8 0.4.9 0.5.3 0.5.4 1.0.0 1.0.1 1.0.4 1.1.0 1.1.1 1.1.2 1.11.6.3 2.0.0 2.0.3 2.0.4 2.0.4.3 2.0.5.1 2.0.5.2 2.0.5.3 2.0.5.3.1 2.0.5.4 2.0.5.4a 2.0.5.5 2.0.5.6 2.0.5.6.1 2.0.5.7 2.0.5.9a 2.0.6.2.1 2.0.6.2a 2.0.6.3 2.1.0 2.1.1 2.1.2.4 2.2.0 2.2.1.1 2.2.1.2 2.2.11 2.2.12 2.2.13.1 2.2.14 2.2.15.1 2.2.16 2.2.17
permalink-manager / includes / core / permalink-manager-language-plugins.php
permalink-manager / includes / core Last commit date
permalink-manager-actions.php 5 years ago permalink-manager-admin-functions.php 5 years ago permalink-manager-core-functions.php 5 years ago permalink-manager-debug.php 5 years ago permalink-manager-gutenberg.php 5 years ago permalink-manager-helper-functions.php 5 years ago permalink-manager-language-plugins.php 5 years ago permalink-manager-third-parties.php 5 years ago permalink-manager-uri-functions-post.php 5 years ago
permalink-manager-language-plugins.php
556 lines
1 <?php
2
3 /**
4 * Third parties integration
5 */
6 class Permalink_Manager_Language_Plugins extends Permalink_Manager_Class {
7
8 public function __construct() {
9 add_action('init', array($this, 'init_hooks'), 99);
10 }
11
12 function init_hooks() {
13 global $sitepress_settings, $permalink_manager_options, $polylang, $translate_press_settings;
14
15 // 1. WPML, Polylang & TranslatePress
16 if($sitepress_settings || !empty($polylang->links_model->options) || class_exists('TRP_Translate_Press')) {
17 // Detect Post/Term function
18 if(!empty($permalink_manager_options['general']['fix_language_mismatch'])) {
19 add_filter('permalink_manager_detected_post_id', array($this, 'fix_language_mismatch'), 9, 3);
20 add_filter('permalink_manager_detected_term_id', array($this, 'fix_language_mismatch'), 9, 3);
21 }
22 // Fix posts page
23 else {
24 add_filter('permalink_manager_filter_query', array($this, 'fix_posts_page'), 5, 5);
25 }
26
27 // URI Editor
28 add_filter('permalink_manager_uri_editor_extra_info', array($this, 'language_column_uri_editor'), 9, 3);
29
30 // Adjust front page ID
31 add_filter('permalink_manager_is_front_page', array($this, 'wpml_is_front_page'), 9, 3);
32
33 // Get translation mode
34 $mode = 0;
35
36 // A. WPML
37 if(isset($sitepress_settings['language_negotiation_type'])) {
38 $url_settings = $sitepress_settings['language_negotiation_type'];
39
40 if(in_array($sitepress_settings['language_negotiation_type'], array(1, 2))) {
41 $mode = 'prepend';
42 } else if($sitepress_settings['language_negotiation_type'] == 3) {
43 $mode = 'append';
44 }
45 }
46 // B. Polylang
47 else if(isset($polylang->links_model->options['force_lang'])) {
48 $url_settings = $polylang->links_model->options['force_lang'];
49
50 if(in_array($url_settings, array(1, 2, 3))) {
51 $mode = 'prepend';
52 }
53 }
54 // C. TranslatePress
55 else if(class_exists('TRP_Translate_Press')) {
56 $translate_press_settings = get_option('trp_settings');
57
58 $mode = 'prepend';
59 }
60
61 if($mode === 'prepend') {
62 add_filter('permalink_manager_detect_uri', array($this, 'detect_uri_language'), 9, 3);
63 add_filter('permalink_manager_filter_permalink_base', array($this, 'prepend_lang_prefix'), 9, 2);
64 add_filter('template_redirect', array($this, 'wpml_redirect'), 0, 998 );
65 } else if($mode === 'append') {
66 add_filter('permalink_manager_filter_final_post_permalink', array($this, 'append_lang_prefix'), 5, 2);
67 add_filter('permalink_manager_filter_final_term_permalink', array($this, 'append_lang_prefix'), 5, 2);
68 add_filter('permalink_manager_detect_uri', array($this, 'wpml_ignore_lang_query_parameter'), 9);
69 }
70
71 // Translate permastructures
72 add_filter('permalink_manager_filter_permastructure', array($this, 'translate_permastructure'), 9, 2);
73
74 // Translate post type slug
75 if(class_exists('WPML_Slug_Translation')) {
76 add_filter('permalink_manager_filter_post_type_slug', array($this, 'wpml_translate_post_type_slug'), 9, 3);
77 }
78
79 // Translate WooCommerce endpoints
80 if(class_exists('WCML_Endpoints')) {
81 add_filter('request', array($this, 'wpml_translate_wc_endpoints'), 99999);
82 }
83
84 // Edit custom URI using WPML Classic Translation Editor
85 if(class_exists('WPML_Translation_Editor_UI')) {
86 add_filter('wpml_tm_adjust_translation_fields', array($this, 'wpml_translation_edit_uri'), 999, 2);
87 add_filter('wpml-translation-editor-fetch-job', array($this, 'wpml_translation_save_uri'), 999, 2);
88 }
89
90 // Generate custom permalink after WPML's Advanced Translation editor is used
91 if(!empty($sitepress_settings['translation-management']) && !empty($sitepress_settings['translation-management']['doc_translation_method']) && $sitepress_settings['translation-management']['doc_translation_method'] == 'ATE') {
92 add_action('icl_pro_translation_completed', array($this, 'regenerate_uri_after_wpml_translation_completed'), 99, 3);
93 }
94
95 add_action('icl_make_duplicate', array($this, 'wpml_duplicate_uri'), 999, 4);
96 }
97 }
98
99 /**
100 * WPML/Polylang/TranslatePress filters
101 */
102 public static function get_language_code($element) {
103 global $TRP_LANGUAGE, $translate_press_settings, $icl_adjust_id_url_filter_off;
104
105 // Disable WPML adjust ID filter
106 $icl_adjust_id_url_filter_off = true;
107
108 // Fallback
109 if(is_string($element) && strpos($element, 'tax-') !== false) {
110 $element_id = intval(preg_replace("/[^0-9]/", "", $element));
111 $element = get_term($element_id);
112 } else if(is_numeric($element)) {
113 $element = get_post($element);
114 }
115
116 // A. TranslatePress
117 if(!empty($TRP_LANGUAGE)) {
118 $lang_code = self::get_translatepress_language_code($TRP_LANGUAGE);
119 }
120 // B. WPML & Polylang
121 else {
122 if(isset($element->post_type)) {
123 $element_id = $element->ID;
124 $element_type = $element->post_type;
125 } else if(isset($element->taxonomy)) {
126 $element_id = $element->term_taxonomy_id;
127 $element_type = $element->taxonomy;
128 } else {
129 return false;
130 }
131
132 $lang_code = apply_filters('wpml_element_language_code', null, array('element_id' => $element_id, 'element_type' => $element_type));
133 }
134
135 // Enable WPML adjust ID filter
136 $icl_adjust_id_url_filter_off = false;
137
138 // Use default language if nothing detected
139 return ($lang_code) ? $lang_code : self::get_default_language();
140 }
141
142 public static function get_translatepress_language_code($lang) {
143 global $translate_press_settings;
144
145 if(!empty($translate_press_settings['url-slugs'])) {
146 $lang_code = (!empty($translate_press_settings['url-slugs'][$lang])) ? $translate_press_settings['url-slugs'][$lang] : '';
147 }
148
149 return (!empty($lang_code)) ? $lang_code : false;
150 }
151
152 public static function get_default_language() {
153 global $sitepress, $translate_press_settings;
154
155 if(function_exists('pll_default_language')) {
156 $def_lang = pll_default_language('slug');
157 } else if(is_object($sitepress)) {
158 $def_lang = $sitepress->get_default_language();
159 } else if(!empty($translate_press_settings['default-language'])) {
160 $def_lang = self::get_translatepress_language_code($translate_press_settings['default-language']);
161 } else {
162 $def_lang = '';
163 }
164
165 return $def_lang;
166 }
167
168 public static function get_all_languages($exclude_default_language = false) {
169 global $sitepress, $sitepress_settings, $polylang, $translate_press_settings;
170
171 $languages_array = $active_languages = array();
172 $default_language = self::get_default_language();
173
174 if(!empty($sitepress_settings['active_languages'])) {
175 $languages_array = $sitepress_settings['active_languages'];
176 } elseif(function_exists('pll_languages_list')) {
177 $languages_array = pll_languages_list(array('fields' => null));
178 } if(!empty($translate_press_settings['url-slugs'])) {
179 // $languages_array = $translate_press_settings['url-slugs'];
180 }
181
182 // Get native language names as value
183 if($languages_array) {
184 foreach($languages_array as $val) {
185 if(!empty($sitepress)) {
186 $lang = $val;
187 $lang_details = $sitepress->get_language_details($lang);
188 $language_name = $lang_details['native_name'];
189 } else if(!empty($val->name)) {
190 $lang = $val->slug;
191 $language_name = $val->name;
192 }
193
194 $active_languages[$lang] = (!empty($language_name)) ? sprintf('%s <span>(%s)</span>', $language_name, $lang) : '-';
195 }
196
197 // Exclude default language if needed
198 if($exclude_default_language && $default_language && !empty($active_languages[$default_language])) {
199 unset($active_languages[$default_language]);
200 }
201 }
202
203 return (array) $active_languages;
204 }
205
206 function fix_language_mismatch($item_id, $uri_parts, $is_term = false) {
207 global $wp, $language_code;
208
209 if($is_term) {
210 $element = get_term($item_id);
211 if(!empty($element) && !is_wp_error($element)) {
212 $element_id = $element->term_taxonomy_id;
213 $element_type = $element->taxonomy;
214 } else {
215 return false;
216 }
217 } else {
218 $element = get_post($item_id);
219
220 if(!empty($element->post_type)) {
221 $element_id = $item_id;
222 $element_type = $element->post_type;
223 }
224 }
225
226 // Stop if no term or post is detected
227 if(empty($element)) { return false; }
228
229 $language_code = self::get_language_code($element);
230
231 if(!empty($uri_parts['lang']) && ($uri_parts['lang'] != $language_code)) {
232 $wpml_item_id = apply_filters('wpml_object_id', $element_id, $element_type);
233 $item_id = (is_numeric($wpml_item_id)) ? $wpml_item_id : $item_id;
234 }
235
236 return $item_id;
237 }
238
239 /**
240 * 5C. Fix for WPML (language switcher on blog page)
241 */
242 function fix_posts_page($query, $old_query, $uri_parts, $pm_query, $content_type) {
243 if(empty($pm_query['id']) || !is_numeric($pm_query['id'])) {
244 return $query;
245 }
246
247 $blog_page_id = apply_filters('wpml_object_id', get_option('page_for_posts'), 'page');
248 $element_id = apply_filters('wpml_object_id', $pm_query['id'], 'page');
249
250 if(!empty($blog_page_id) && !empty($blog_page_id) && ($blog_page_id == $element_id) && !isset($query['page'])) {
251 $query['page'] = '';
252 }
253
254 return $query;
255 }
256
257 function detect_uri_language($uri_parts, $request_url, $endpoints) {
258 global $sitepress, $sitepress_settings, $polylang, $translate_press_settings;
259
260 if(!empty($sitepress_settings['active_languages'])) {
261 $languages_list = (array) $sitepress_settings['active_languages'];
262 } elseif(function_exists('pll_languages_list')) {
263 $languages_array = pll_languages_list();
264 $languages_list = (is_array($languages_array)) ? (array) $languages_array : "";
265 } elseif($translate_press_settings['url-slugs']) {
266 $languages_list = $translate_press_settings['url-slugs'];
267 }
268
269 if(is_array($languages_list)) {
270 $languages_list = implode("|", $languages_list);
271 } else {
272 return $uri_parts;
273 }
274
275 $default_language = self::get_default_language();
276
277 // Fix for multidomain language configuration
278 if((isset($sitepress_settings['language_negotiation_type']) && $sitepress_settings['language_negotiation_type'] == 2) || (!empty($polylang->options['force_lang']) && $polylang->options['force_lang'] == 3)) {
279 if(!empty($polylang->options['domains'])) {
280 $domains = (array) $polylang->options['domains'];
281 } else if(!empty($sitepress_settings['language_domains'])) {
282 $domains = (array) $sitepress_settings['language_domains'];
283 }
284
285 foreach($domains as &$domain) {
286 $domain = preg_replace('/((http(s)?:\/\/(www\.)?)|(www\.))?(.+?)\/?$/', 'http://$6', $domain);
287 }
288
289 $request_url = trim(str_replace($domains, "", $request_url), "/");
290 }
291
292 if(!empty($languages_list)) {
293 //preg_match("/^(?:({$languages_list})\/)?(.+?)(?|\/({$endpoints})[\/$]([^\/]*)|\/()([\d+]))?\/?$/i", $request_url, $regex_parts);
294 preg_match("/^(?:({$languages_list})\/)?(.+?)(?|\/({$endpoints})(?|\/(.*)|$)|\/()([\d]+)\/?)?$/i", $request_url, $regex_parts);
295
296 $uri_parts['lang'] = (!empty($regex_parts[1])) ? $regex_parts[1] : $default_language;
297 $uri_parts['uri'] = (!empty($regex_parts[2])) ? $regex_parts[2] : "";
298 $uri_parts['endpoint'] = (!empty($regex_parts[3])) ? $regex_parts[3] : "";
299 $uri_parts['endpoint_value'] = (!empty($regex_parts[4])) ? $regex_parts[4] : "";
300 }
301
302 return $uri_parts;
303 }
304
305 function prepend_lang_prefix($base, $element) {
306 global $sitepress_settings, $polylang, $permalink_manager_uris, $translate_press_settings;
307
308 $language_code = self::get_language_code($element);
309 $default_language_code = self::get_default_language();
310 $home_url = get_home_url();
311
312 // Hide language code if "Use directory for default language" option is enabled
313 $hide_prefix_for_default_lang = ((isset($sitepress_settings['urls']['directory_for_default_language']) && $sitepress_settings['urls']['directory_for_default_language'] != 1) || !empty($polylang->links_model->options['hide_default']) || !empty($translate_press_settings['add-subdirectory-to-default-language'])) ? true : false;
314
315 // Last instance - use language paramater from &_GET array
316 if(is_admin()) {
317 $language_code = (empty($language_code) && !empty($_GET['lang'])) ? $_GET['lang'] : $language_code;
318 }
319
320 // Adjust URL base
321 if(!empty($language_code)) {
322 // A. Different domain per language
323 if((isset($sitepress_settings['language_negotiation_type']) && $sitepress_settings['language_negotiation_type'] == 2) || (!empty($polylang->options['force_lang']) && $polylang->options['force_lang'] == 3)) {
324
325 if(!empty($polylang->options['domains'])) {
326 $domains = $polylang->options['domains'];
327 } else if(!empty($sitepress_settings['language_domains'])) {
328 $domains = $sitepress_settings['language_domains'];
329 }
330
331 $is_term = (!empty($element->term_taxonomy_id)) ? true : false;
332 $element_id = ($is_term) ? "tax-{$element->term_taxonomy_id}" : $element->ID;
333
334 // Filter only custom permalinks
335 if(empty($permalink_manager_uris[$element_id]) || empty($domains)) { return $base; }
336
337 // Replace the domain name
338 if(!empty($domains[$language_code])) {
339 $base = trim($domains[$language_code], "/");
340
341 // Append URL scheme
342 if(!preg_match("~^(?:f|ht)tps?://~i", $base)) {
343 $scehme = parse_url($home_url, PHP_URL_SCHEME);
344 $base = "{$scehme}://{$base}";
345 }
346 }
347 }
348 // B. Prepend language code
349 else if(!empty($polylang->options['force_lang']) && $polylang->options['force_lang'] == 2) {
350 if($hide_prefix_for_default_lang && ($default_language_code == $language_code)) {
351 return $base;
352 } else {
353 $base = preg_replace('/(https?:\/\/)/', "$1{$language_code}.", $home_url);
354 }
355 }
356 // C. Append prefix
357 else {
358 if($hide_prefix_for_default_lang && ($default_language_code == $language_code)) {
359 return $base;
360 } else {
361 $base .= "/{$language_code}";
362 }
363 }
364 }
365
366 return $base;
367 }
368
369 function append_lang_prefix($permalink, $element) {
370 global $sitepress_settings, $polylang, $permalink_manager_uris;
371
372 $language_code = self::get_language_code($element);
373 $default_language_code = self::get_default_language();
374
375 // Last instance - use language paramater from &_GET array
376 if(is_admin()) {
377 $language_code = (empty($language_code) && !empty($_GET['lang'])) ? $_GET['lang'] : $language_code;
378 }
379
380 // B. Append ?lang query parameter
381 if(isset($sitepress_settings['language_negotiation_type']) && $sitepress_settings['language_negotiation_type'] == 3) {
382 if($default_language_code == $language_code) {
383 return $permalink;
384 } else {
385 $permalink .= "?lang={$language_code}";
386 }
387 }
388
389 return $permalink;
390 }
391
392 function language_column_uri_editor($output, $column, $element) {
393 $language_code = self::get_language_code($element);
394 $output .= (!empty($language_code)) ? sprintf(" | <span><strong>%s:</strong> %s</span>", __("Language"), $language_code) : "";
395
396 return $output;
397 }
398
399 function wpml_is_front_page($bool, $page_id, $front_page_id) {
400 $default_language_code = self::get_default_language();
401 $page_id = apply_filters('wpml_object_id', $page_id, 'page', true, $default_language_code);
402
403 return (!empty($page_id) && $page_id == $front_page_id) ? true : $bool;
404 }
405
406 function wpml_ignore_lang_query_parameter($uri_parts) {
407 global $permalink_manager_uris;
408
409 foreach($permalink_manager_uris as &$uri) {
410 $uri = trim(strtok($uri, '?'), "/");
411 }
412
413 return $uri_parts;
414 }
415
416 function wpml_redirect() {
417 global $language_code, $wp_query;
418
419 if(!empty($language_code) && defined('ICL_LANGUAGE_CODE') && ICL_LANGUAGE_CODE != $language_code && !empty($wp_query->query['do_not_redirect'])) {
420 unset($wp_query->query['do_not_redirect']);
421 }
422 }
423
424 function translate_permastructure($permastructure, $element) {
425 global $permalink_manager_permastructs, $pagenow;;
426
427 // Get element language code
428 if(!empty($_REQUEST['data']) && strpos($_REQUEST['data'], "target_lang")) {
429 $language_code = preg_replace('/(.*target_lang=)([^=&]+)(.*)/', '$2', $_REQUEST['data']);
430 } else if(in_array($pagenow, array('post.php', 'post-new.php')) && !empty($_GET['lang'])) {
431 $language_code = $_GET['lang'];
432 } else if(!empty($_REQUEST['icl_post_language'])) {
433 $language_code = $_REQUEST['icl_post_language'];
434 } else if(!empty($_POST['action']) && $_POST['action'] == 'pm_save_permalink' && defined('ICL_LANGUAGE_CODE')) {
435 $language_code = ICL_LANGUAGE_CODE;
436 } else {
437 $language_code = self::get_language_code($element);
438 }
439
440 if(!empty($element->ID)) {
441 $translated_permastructure = (!empty($permalink_manager_permastructs["post_types"]["{$element->post_type}_{$language_code}"])) ? $permalink_manager_permastructs["post_types"]["{$element->post_type}_{$language_code}"] : '';
442 } else if(!empty($element->term_id)) {
443 $translated_permastructure = (!empty($permalink_manager_permastructs["taxonomies"]["{$element->taxonomy}_{$language_code}"])) ? $permalink_manager_permastructs["taxonomies"]["{$element->taxonomy}_{$language_code}"] : '';
444 }
445
446 return (!empty($translated_permastructure)) ? $translated_permastructure : $permastructure;
447 }
448
449 function wpml_translate_post_type_slug($post_type_slug, $element, $post_type) {
450 $post = (is_integer($element)) ? get_post($element) : $element;
451 $language_code = self::get_language_code($post);
452
453 $post_type_slug = apply_filters('wpml_get_translated_slug', $post_type_slug, $post_type, $language_code);
454
455 // Translate %post_type% tag in custom permastructures
456 return $post_type_slug;
457 }
458
459 function wpml_translate_wc_endpoints($request) {
460 global $woocommerce, $wpdb;
461
462 if(!empty($woocommerce->query->query_vars)) {
463 // Get WooCommerce original endpoints
464 $endpoints = $woocommerce->query->query_vars;
465
466 // Get all endppoint translations
467 $endpoint_translations = $wpdb->get_results("SELECT t.value AS translated_endpoint, t.language, s.value AS endpoint FROM {$wpdb->prefix}icl_string_translations AS t LEFT JOIN {$wpdb->prefix}icl_strings AS s ON t.string_id = s.id WHERE context = 'WP Endpoints'");
468
469 // Replace translate endpoint with its original name
470 foreach($endpoint_translations as $endpoint) {
471 if(isset($request[$endpoint->translated_endpoint]) && ($endpoint->endpoint !== $endpoint->translated_endpoint)) {
472 $request[$endpoint->endpoint] = $request[$endpoint->translated_endpoint];
473 unset($request[$endpoint->translated_endpoint]);
474 }
475 }
476 }
477
478 return $request;
479 }
480
481 /**
482 * Generate custom permalink after WPML's Advanced Translation editor is used
483 */
484 function regenerate_uri_after_wpml_translation_completed($post_id, $postdata, $job) {
485 global $permalink_manager_uris;
486
487 // Get the default custom permalink based on a permastructure set with Permalink Manager
488 $permalink_manager_uris[$post_id] = Permalink_Manager_URI_Functions_Post::get_default_post_uri($post_id);
489
490 // Save the update
491 update_option('permalink-manager-uris', $permalink_manager_uris);
492 }
493
494 /**
495 * Edit custom URI using WPML Classic Translation Editor
496 */
497 function wpml_translation_edit_uri($fields, $job) {
498 global $permalink_manager_uris;
499
500 $element_type = (!empty($job->original_post_type) && strpos($job->original_post_type, 'post_') !== false) ? preg_replace('/^(post_)/', '', $job->original_post_type) : '';
501
502 if(!empty($element_type)) {
503 $original_id = $job->original_doc_id;
504 $translation_id = apply_filters('wpml_object_id', $original_id, $element_type, false, $job->language_code);
505
506 $original_custom_uri = Permalink_Manager_URI_Functions_Post::get_post_uri($original_id, true);
507 $translation_custom_uri = Permalink_Manager_URI_Functions_Post::get_post_uri($translation_id, true);
508
509 $fields[] = array(
510 'field_type' => 'pm-custom_uri',
511 //'tid' => 9999,
512 'field_data' => $original_custom_uri,
513 'field_data_translated' => $translation_custom_uri,
514 'field_style' => '0',
515 'title' => 'Custom URI',
516 );
517 }
518
519 return $fields;
520 }
521
522 function wpml_translation_save_uri($job, $job_details) {
523 global $permalink_manager_uris;
524
525 if(!empty($_POST['data'])) {
526 $data = array();
527 $post_data = \WPML_TM_Post_Data::strip_slashes_for_single_quote($_POST['data']);
528 parse_str($post_data, $data);
529
530 if(isset($data['fields']['pm-custom_uri'])) {
531 $original_id = $data['job_post_id'];
532 $element_type = (strpos($data['job_post_type'], 'post_') !== false) ? preg_replace('/^(post_)/', '', $data['job_post_type']) : '';
533
534 $translation_id = apply_filters('wpml_object_id', $original_id, $element_type, false, $data['target_lang']);
535 $permalink_manager_uris[$translation_id] = (!empty($data['fields']['pm-custom_uri']['data'])) ? Permalink_Manager_Helper_Functions::sanitize_title($data['fields']['pm-custom_uri']['data'], true) : Permalink_Manager_URI_Functions_Post::get_default_post_uri($translation_id);
536
537 update_option('permalink-manager-uris', $permalink_manager_uris);
538 }
539 }
540
541 return $job;
542 }
543
544 function wpml_duplicate_uri($master_post_id, $lang, $post_array, $id) {
545 global $permalink_manager_uris;
546
547 // Trigger the function only if duplicate is created in the metabox
548 if(empty($_POST['action']) || $_POST['action'] !== 'make_duplicates') { return; }
549
550 $permalink_manager_uris[$id] = Permalink_Manager_URI_Functions_Post::get_default_post_uri($id);
551
552 update_option('permalink-manager-uris', $permalink_manager_uris);
553 }
554
555 }
556