PluginProbe ʕ •ᴥ•ʔ
Permalink Manager Lite / 2.2.12
Permalink Manager Lite v2.2.12
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 4 years ago permalink-manager-admin-functions.php 4 years ago permalink-manager-core-functions.php 4 years ago permalink-manager-debug.php 4 years ago permalink-manager-gutenberg.php 4 years ago permalink-manager-helper-functions.php 4 years ago permalink-manager-language-plugins.php 4 years ago permalink-manager-third-parties.php 4 years ago permalink-manager-uri-functions-post.php 4 years ago permalink-manager-uri-functions.php 4 years ago
permalink-manager-language-plugins.php
589 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_action('icl_pro_translation_saved', array($this, 'wpml_translation_save_uri'), 999, 3);
87 add_filter('wpml_translation_editor_save_job_data', 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, $permalink_manager_options;
208
209 $mode = (!empty($permalink_manager_options['general']['fix_language_mismatch'])) ? $permalink_manager_options['general']['fix_language_mismatch'] : 0;
210
211 if($is_term) {
212 $element = get_term($item_id);
213 if(!empty($element) && !is_wp_error($element)) {
214 $element_id = $element->term_taxonomy_id;
215 $element_type = $element->taxonomy;
216 } else {
217 return false;
218 }
219 } else {
220 $element = get_post($item_id);
221
222 if(!empty($element->post_type)) {
223 $element_id = $item_id;
224 $element_type = $element->post_type;
225 }
226 }
227
228 // Stop if no term or post is detected
229 if(empty($element)) { return false; }
230
231 // Get the language code of the found post/term
232 $element_language_code = self::get_language_code($element);
233
234 // Get the detected language code
235 if(defined('ICL_LANGUAGE_CODE')) {
236 $detected_language_code = ICL_LANGUAGE_CODE;
237 } else if(!empty($uri_parts['lang'])) {
238 $detected_language_code = $uri_parts['lang'];
239 } else {
240 return $item_id;
241 }
242
243 if($detected_language_code !== $element_language_code) {
244 // A. Display the content in requested language
245 if($mode == 1) {
246 $item_id = apply_filters('wpml_object_id', $element_id, $element_type);
247 }
248 // C. Display "404 error"
249 else {
250 $item_id = 0;
251 }
252 }
253
254 return $item_id;
255 }
256
257 /**
258 * 5C. Fix for WPML (language switcher on blog page)
259 */
260 function fix_posts_page($query, $old_query, $uri_parts, $pm_query, $content_type) {
261 if(empty($pm_query['id']) || !is_numeric($pm_query['id'])) {
262 return $query;
263 }
264
265 $blog_page_id = apply_filters('wpml_object_id', get_option('page_for_posts'), 'page');
266 $element_id = apply_filters('wpml_object_id', $pm_query['id'], 'page');
267
268 if(!empty($blog_page_id) && !empty($blog_page_id) && ($blog_page_id == $element_id) && !isset($query['page'])) {
269 $query['page'] = '';
270 }
271
272 return $query;
273 }
274
275 function detect_uri_language($uri_parts, $request_url, $endpoints) {
276 global $sitepress, $sitepress_settings, $polylang, $translate_press_settings;
277
278 if(!empty($sitepress_settings['active_languages'])) {
279 $languages_list = (array) $sitepress_settings['active_languages'];
280 } elseif(function_exists('pll_languages_list')) {
281 $languages_array = pll_languages_list();
282 $languages_list = (is_array($languages_array)) ? (array) $languages_array : "";
283 } elseif($translate_press_settings['url-slugs']) {
284 $languages_list = $translate_press_settings['url-slugs'];
285 }
286
287 if(is_array($languages_list)) {
288 $languages_list = implode("|", $languages_list);
289 } else {
290 return $uri_parts;
291 }
292
293 $default_language = self::get_default_language();
294
295 // Fix for multidomain language configuration
296 if((isset($sitepress_settings['language_negotiation_type']) && $sitepress_settings['language_negotiation_type'] == 2) || (!empty($polylang->options['force_lang']) && $polylang->options['force_lang'] == 3)) {
297 if(!empty($polylang->options['domains'])) {
298 $domains = (array) $polylang->options['domains'];
299 } else if(!empty($sitepress_settings['language_domains'])) {
300 $domains = (array) $sitepress_settings['language_domains'];
301 }
302
303 foreach($domains as &$domain) {
304 $domain = preg_replace('/((http(s)?:\/\/(www\.)?)|(www\.))?(.+?)\/?$/', 'http://$6', $domain);
305 }
306
307 $request_url = trim(str_replace($domains, "", $request_url), "/");
308 }
309
310 if(!empty($languages_list)) {
311 //preg_match("/^(?:({$languages_list})\/)?(.+?)(?|\/({$endpoints})[\/$]([^\/]*)|\/()([\d+]))?\/?$/i", $request_url, $regex_parts);
312 preg_match("/^(?:({$languages_list})\/)?(.+?)(?|\/({$endpoints})(?|\/(.*)|$)|\/()([\d]+)\/?)?$/i", $request_url, $regex_parts);
313
314 $uri_parts['lang'] = (!empty($regex_parts[1])) ? $regex_parts[1] : $default_language;
315 $uri_parts['uri'] = (!empty($regex_parts[2])) ? $regex_parts[2] : "";
316 $uri_parts['endpoint'] = (!empty($regex_parts[3])) ? $regex_parts[3] : "";
317 $uri_parts['endpoint_value'] = (!empty($regex_parts[4])) ? $regex_parts[4] : "";
318 }
319
320 return $uri_parts;
321 }
322
323 function prepend_lang_prefix($base, $element) {
324 global $sitepress_settings, $polylang, $permalink_manager_uris, $translate_press_settings;
325
326 $language_code = self::get_language_code($element);
327 $default_language_code = self::get_default_language();
328 $home_url = get_home_url();
329
330 // Hide language code if "Use directory for default language" option is enabled
331 $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) && $translate_press_settings['add-subdirectory-to-default-language'] !== 'yes')) ? true : false;
332
333 // Last instance - use language paramater from &_GET array
334 if(is_admin()) {
335 $language_code = (empty($language_code) && !empty($_GET['lang'])) ? $_GET['lang'] : $language_code;
336 }
337
338 // Adjust URL base
339 if(!empty($language_code)) {
340 // A. Different domain per language
341 if((isset($sitepress_settings['language_negotiation_type']) && $sitepress_settings['language_negotiation_type'] == 2) || (!empty($polylang->options['force_lang']) && $polylang->options['force_lang'] == 3)) {
342
343 if(!empty($polylang->options['domains'])) {
344 $domains = $polylang->options['domains'];
345 } else if(!empty($sitepress_settings['language_domains'])) {
346 $domains = $sitepress_settings['language_domains'];
347 }
348
349 $is_term = (!empty($element->term_taxonomy_id)) ? true : false;
350 $element_id = ($is_term) ? "tax-{$element->term_taxonomy_id}" : $element->ID;
351
352 // Filter only custom permalinks
353 if(empty($permalink_manager_uris[$element_id]) || empty($domains)) { return $base; }
354
355 // Replace the domain name
356 if(!empty($domains[$language_code])) {
357 $base = trim($domains[$language_code], "/");
358
359 // Append URL scheme
360 if(!preg_match("~^(?:f|ht)tps?://~i", $base)) {
361 $scehme = parse_url($home_url, PHP_URL_SCHEME);
362 $base = "{$scehme}://{$base}";
363 }
364 }
365 }
366 // B. Prepend language code
367 else if(!empty($polylang->options['force_lang']) && $polylang->options['force_lang'] == 2) {
368 if($hide_prefix_for_default_lang && ($default_language_code == $language_code)) {
369 return $base;
370 } else {
371 $base = preg_replace('/(https?:\/\/)/', "$1{$language_code}.", $home_url);
372 }
373 }
374 // C. Append prefix
375 else {
376 if($hide_prefix_for_default_lang && ($default_language_code == $language_code)) {
377 return $base;
378 } else {
379 $base .= "/{$language_code}";
380 }
381 }
382 }
383
384 return $base;
385 }
386
387 function append_lang_prefix($permalink, $element) {
388 global $sitepress_settings, $polylang, $permalink_manager_uris;
389
390 $language_code = self::get_language_code($element);
391 $default_language_code = self::get_default_language();
392
393 // Last instance - use language paramater from &_GET array
394 if(is_admin()) {
395 $language_code = (empty($language_code) && !empty($_GET['lang'])) ? $_GET['lang'] : $language_code;
396 }
397
398 // B. Append ?lang query parameter
399 if(isset($sitepress_settings['language_negotiation_type']) && $sitepress_settings['language_negotiation_type'] == 3) {
400 if($default_language_code == $language_code) {
401 return $permalink;
402 } else if(strpos($permalink, "lang=") === false) {
403 $permalink .= "?lang={$language_code}";
404 }
405 }
406
407 return $permalink;
408 }
409
410 function language_column_uri_editor($output, $column, $element) {
411 $language_code = self::get_language_code($element);
412 $output .= (!empty($language_code)) ? sprintf(" | <span><strong>%s:</strong> %s</span>", __("Language"), $language_code) : "";
413
414 return $output;
415 }
416
417 function wpml_is_front_page($bool, $page_id, $front_page_id) {
418 $default_language_code = self::get_default_language();
419 $page_id = apply_filters('wpml_object_id', $page_id, 'page', true, $default_language_code);
420
421 return (!empty($page_id) && $page_id == $front_page_id) ? true : $bool;
422 }
423
424 function wpml_ignore_lang_query_parameter($uri_parts) {
425 global $permalink_manager_uris;
426
427 foreach($permalink_manager_uris as &$uri) {
428 $uri = trim(strtok($uri, '?'), "/");
429 }
430
431 return $uri_parts;
432 }
433
434 function wpml_redirect() {
435 global $language_code, $wp_query;
436
437 if(!empty($language_code) && defined('ICL_LANGUAGE_CODE') && ICL_LANGUAGE_CODE != $language_code && !empty($wp_query->query['do_not_redirect'])) {
438 unset($wp_query->query['do_not_redirect']);
439 }
440 }
441
442 function translate_permastructure($permastructure, $element) {
443 global $permalink_manager_permastructs, $pagenow;;
444
445 // Get element language code
446 if(!empty($_REQUEST['data']) && strpos($_REQUEST['data'], "target_lang")) {
447 $language_code = preg_replace('/(.*target_lang=)([^=&]+)(.*)/', '$2', $_REQUEST['data']);
448 } else if(in_array($pagenow, array('post.php', 'post-new.php')) && !empty($_GET['lang'])) {
449 $language_code = $_GET['lang'];
450 } else if(!empty($_REQUEST['icl_post_language'])) {
451 $language_code = $_REQUEST['icl_post_language'];
452 } else if(!empty($_POST['action']) && $_POST['action'] == 'pm_save_permalink' && defined('ICL_LANGUAGE_CODE')) {
453 $language_code = ICL_LANGUAGE_CODE;
454 } else {
455 $language_code = self::get_language_code($element);
456 }
457
458 if(!empty($element->ID)) {
459 $translated_permastructure = (!empty($permalink_manager_permastructs["post_types"]["{$element->post_type}_{$language_code}"])) ? $permalink_manager_permastructs["post_types"]["{$element->post_type}_{$language_code}"] : '';
460 } else if(!empty($element->term_id)) {
461 $translated_permastructure = (!empty($permalink_manager_permastructs["taxonomies"]["{$element->taxonomy}_{$language_code}"])) ? $permalink_manager_permastructs["taxonomies"]["{$element->taxonomy}_{$language_code}"] : '';
462 }
463
464 return (!empty($translated_permastructure)) ? $translated_permastructure : $permastructure;
465 }
466
467 function wpml_translate_post_type_slug($post_type_slug, $element, $post_type) {
468 $post = (is_integer($element)) ? get_post($element) : $element;
469 $language_code = self::get_language_code($post);
470
471 $post_type_slug = apply_filters('wpml_get_translated_slug', $post_type_slug, $post_type, $language_code);
472
473 // Translate %post_type% tag in custom permastructures
474 return $post_type_slug;
475 }
476
477 function wpml_translate_wc_endpoints($request) {
478 global $woocommerce, $wpdb;
479
480 if(!empty($woocommerce->query->query_vars)) {
481 // Get WooCommerce original endpoints
482 $endpoints = $woocommerce->query->query_vars;
483
484 // Get all endppoint translations
485 $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'");
486
487 // Replace translate endpoint with its original name
488 foreach($endpoint_translations as $endpoint) {
489 if(isset($request[$endpoint->translated_endpoint]) && ($endpoint->endpoint !== $endpoint->translated_endpoint)) {
490 $request[$endpoint->endpoint] = $request[$endpoint->translated_endpoint];
491 unset($request[$endpoint->translated_endpoint]);
492 }
493 }
494 }
495
496 return $request;
497 }
498
499 /**
500 * Generate custom permalink after WPML's Advanced Translation editor is used
501 */
502 function regenerate_uri_after_wpml_translation_completed($post_id, $postdata, $job) {
503 global $permalink_manager_uris;
504
505 // Get the default custom permalink based on a permastructure set with Permalink Manager
506 $permalink_manager_uris[$post_id] = Permalink_Manager_URI_Functions_Post::get_default_post_uri($post_id);
507
508 // Save the update
509 update_option('permalink-manager-uris', $permalink_manager_uris);
510 }
511
512 /**
513 * Edit custom URI using WPML Classic Translation Editor
514 */
515 function wpml_translation_edit_uri($fields, $job) {
516 global $permalink_manager_uris;
517
518 $element_type = (!empty($job->original_post_type) && strpos($job->original_post_type, 'post_') !== false) ? preg_replace('/^(post_)/', '', $job->original_post_type) : '';
519
520 if(!empty($element_type)) {
521 $original_id = $job->original_doc_id;
522 $translation_id = apply_filters('wpml_object_id', $original_id, $element_type, false, $job->language_code);
523
524 $original_custom_uri = Permalink_Manager_URI_Functions_Post::get_post_uri($original_id, true);
525
526 if(!empty($translation_id)) {
527 $translation_custom_uri = Permalink_Manager_URI_Functions_Post::get_post_uri($translation_id, true);
528 $uri_translation_complete = (!empty($permalink_manager_uris[$translation_id])) ? '1' : '0';
529 } else {
530 $translation_custom_uri = $original_custom_uri;
531 $uri_translation_complete = '0';
532 }
533
534 $fields[] = array(
535 'field_type' => 'pm-custom_uri',
536 //'tid' => 9999,
537 'field_data' => $original_custom_uri,
538 'field_data_translated' => $translation_custom_uri,
539 'field_finished' => $uri_translation_complete,
540 'field_style' => '0',
541 'title' => 'Custom URI',
542 );
543 }
544
545 return $fields;
546 }
547
548 function wpml_translation_save_uri($in = '', $data = '', $job = '') {
549 global $permalink_manager_uris;
550
551 // A. Save the URI also when the translation is uncompleted
552 if(!empty($in['fields'])) {
553 $data = $in['fields'];
554
555 $original_id = $in['job_post_id'];
556 $element_type = (strpos($in['job_post_type'], 'post_') !== false) ? preg_replace('/^(post_)/', '', $in['job_post_type']) : '';
557
558 $translation_id = apply_filters('wpml_object_id', $original_id, $element_type, false, $in['target_lang']);
559 }
560 // B. Save the URI also when the translation is completed
561 else if(is_numeric($in)) {
562 $translation_id = $in;
563 }
564
565 if(isset($data['pm-custom_uri']) && isset($data['pm-custom_uri']['data']) && !empty($translation_id)) {
566 $permalink_manager_uris[$translation_id] = (!empty($data['pm-custom_uri']['data'])) ? Permalink_Manager_Helper_Functions::sanitize_title($data['pm-custom_uri']['data'], true) : Permalink_Manager_URI_Functions_Post::get_default_post_uri($translation_id);
567
568 update_option('permalink-manager-uris', $permalink_manager_uris);
569 }
570
571 // Return the data when the translation is uncompleted
572 if(!empty($in['fields'])) {
573 return $in;
574 }
575 }
576
577 function wpml_duplicate_uri($master_post_id, $lang, $post_array, $id) {
578 global $permalink_manager_uris;
579
580 // Trigger the function only if duplicate is created in the metabox
581 if(empty($_POST['action']) || $_POST['action'] !== 'make_duplicates') { return; }
582
583 $permalink_manager_uris[$id] = Permalink_Manager_URI_Functions_Post::get_default_post_uri($id);
584
585 update_option('permalink-manager-uris', $permalink_manager_uris);
586 }
587
588 }
589