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