Permalink Manager Lite - Version 2.2.7.2

Version Description

Download this release

Release Info

Developer mbis
Plugin Icon 128x128 Permalink Manager Lite
Version 2.2.7.2
Comparing to
See all releases

Code changes from version 2.2.5 to 2.2.7.2

README.txt CHANGED
@@ -3,13 +3,13 @@ Contributors: mbis
3
  Donate link: https://www.paypal.me/Bismit
4
  License: GPLv3
5
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
6
- Tags: urls, permalinks, custom permalinks, url, permalink, woocommerce permalinks
7
  Requires at least: 4.4.0
8
  Requires PHP: 5.4
9
- Tested up to: 5.2.1
10
- Stable tag: 2.2.4
11
 
12
- Advanced plugin that allows to set-up custom permalinks (bulk editors included), slugs and permastructures (WooCommerce compatible).
13
 
14
  == Description ==
15
 
@@ -17,6 +17,8 @@ Permalink Manager is a most advanced and highly rated Wordpress permalink plugin
17
 
18
  The plugin supports all custom post types & custom taxonomies and popular 3rd party plugins including WooCommerce, Yoast SEO, WPML, and Polylang. To improve SEO performance even more, the plugin settings provide a possibility to disable the canonical redirect (used natively by Wordpress) and control the trailing slashes settings.
19
 
 
 
20
  = All features =
21
 
22
  * **Edit full permalinks**<br/>A completely custom permalink can be set for each post, page and public custom post type individually *(categories, tags & custom taxonomies terms permalinks can be edited in Permalink Manager Pro)*
@@ -29,8 +31,10 @@ The plugin supports all custom post types & custom taxonomies and popular 3rd pa
29
  * **Trailing slashes settings**<br/>They can be forced or removed from all permalinks.
30
 
31
  = Need additional features & priority support? =
32
- Buy <a href="https://permalinkmanager.pro?utm_source=wordpress">Permalink Manager Pro here</a>.
33
-
 
 
34
  = Additional features available in Permalink Manager Pro =
35
 
36
  * **Taxonomies**<br/>Full support for taxonomies (categories, tags & custom taxonomies).
@@ -66,16 +70,25 @@ To display the URI editor metabox click on gray "Permalink Editor" displayed bel
66
 
67
  == Frequently Asked Questions ==
68
 
69
- = Q. Can I delete/disable Permalink Manager after the permalinks are updated? =
70
- A. Yes, if you used Permalink Manager only to regenerate the slugs (native post names). Please note that if you use custom permalinks (that differ from the native ones), they will no longer be used after the plugin is disabled.
71
 
72
- It is because Permalink Manager overwrites one of the core Wordpress functionalities to bypass the rewrite rules ("regular expressions" to detect the posts/pages/taxonomies/etc. and another parameters from the URL) by using the array of custom permalinks (you can check them in "Debug" tab) that are used only by my plugin.
 
 
 
 
73
 
74
- = Q. Can I use Permalink Manager to change the terms permalinks (eg. post or product categories)?
75
- A. This feature is available only in Permalink Manager Pro.
76
 
77
- = Q. Does this plugin support Buddypress?
78
- A. Currently there is no 100% guarantee that Permalink Manager will work correctly with Buddypress.
 
 
 
 
 
79
 
80
  == Screenshots ==
81
 
@@ -90,9 +103,27 @@ A. Currently there is no 100% guarantee that Permalink Manager will work correct
90
 
91
  == Changelog ==
92
 
93
- = 2.2.4=
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
94
  * Minor code improvements
95
  * Yoast SEO Breadcrumbs - further improvements
 
 
96
 
97
  = 2.2.3 =
98
  * Code improvements for WP All Import integration functions
3
  Donate link: https://www.paypal.me/Bismit
4
  License: GPLv3
5
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
6
+ Tags: permalinks, custom permalinks, translate permalinks, woocommerce permalinks
7
  Requires at least: 4.4.0
8
  Requires PHP: 5.4
9
+ Tested up to: 5.2.3
10
+ Stable tag: 2.2.7.2
11
 
12
+ Permalink Manager Pro allows to easily change full URL addresses of posts, pages, custom post types, terms and WooCommerce links. You can also set different permalink formats per language or bulk change the URLs.
13
 
14
  == Description ==
15
 
17
 
18
  The plugin supports all custom post types & custom taxonomies and popular 3rd party plugins including WooCommerce, Yoast SEO, WPML, and Polylang. To improve SEO performance even more, the plugin settings provide a possibility to disable the canonical redirect (used natively by Wordpress) and control the trailing slashes settings.
19
 
20
+ <a href="https://permalinkmanager.pro/docs/?utm_source=wordpressorg">Documentation</a> | <a href="https://permalinkmanager.pro/buy-permalink-manager-pro/?utm_source=wordpressorg">Permalink Manager Pro</a>
21
+
22
  = All features =
23
 
24
  * **Edit full permalinks**<br/>A completely custom permalink can be set for each post, page and public custom post type individually *(categories, tags & custom taxonomies terms permalinks can be edited in Permalink Manager Pro)*
31
  * **Trailing slashes settings**<br/>They can be forced or removed from all permalinks.
32
 
33
  = Need additional features & priority support? =
34
+ Buy <a href="https://permalinkmanager.pro?utm_source=wordpress">Permalink Manager Pro here</a>.
35
+
36
+ https://www.youtube.com/watch?v=KMOtAK5c7t8
37
+
38
  = Additional features available in Permalink Manager Pro =
39
 
40
  * **Taxonomies**<br/>Full support for taxonomies (categories, tags & custom taxonomies).
70
 
71
  == Frequently Asked Questions ==
72
 
73
+ = Can I define different permalink formats per each language.
74
+ Yes, it is possible if you are using either WPML or Polylang. You can find <a href="https://permalinkmanager.pro/docs/tutorials/how-to-translate-permalinks/">the full instructions here</a>.
75
 
76
+ = Can I use Permalink Manager to change the terms permalinks (eg. post or product categories)?
77
+ This feature is available only in Permalink Manager Pro.
78
+
79
+ = Will the old permalink automatically redirect the new custom ones?
80
+ Yes, Permalink Manager will automatically redirect the native permalinks (used when the plugin is disabled or before it was activated) to the actual, custom permalinks.
81
 
82
+ = Can I add custom fields to the permalinks?
83
+ This feature is available in paid version of plugin. Please go <a href="https://permalinkmanager.pro/docs/tutorials/how-to-use-custom-fields-inside-wordpress-permalinks/">here for more details</a>.
84
 
85
+ = Does this plugin support Buddypress?
86
+ Currently there is no 100% guarantee that Permalink Manager will work correctly with Buddypress.
87
+
88
+ = Can I delete/disable Permalink Manager after the permalinks are updated? =
89
+ Yes, if you used Permalink Manager only to regenerate the slugs (native post names). Please note that if you use custom permalinks (that differ from the native ones), they will no longer be used after the plugin is disabled.
90
+
91
+ It is because Permalink Manager overwrites one of the core Wordpress functionalities to bypass the rewrite rules ("regular expressions" to detect the posts/pages/taxonomies/etc. and another parameters from the URL) by using the array of custom permalinks (you can check them in "Debug" tab) that are used only by my plugin.
92
 
93
  == Screenshots ==
94
 
103
 
104
  == Changelog ==
105
 
106
+ = 2.2.7.1/2.2.7.2 =
107
+ * Hotfix for PHP Fatal error
108
+ * Hotfix for sanitization function: The dashes are no longer removed from custom permalinks.
109
+
110
+ = 2.2.7 =
111
+ * Force 404 for draft posts (for non-logged-in users)
112
+ * New feature: Force HTTPs/WWW in URLs
113
+ * New setting fields: "URI Editor role capability" & "Force HTTPS in URLs"
114
+ * Minor improvements
115
+
116
+ = 2.2.6 =
117
+ * More debug functions added
118
+ * Better support for Hebrew letters
119
+ * Support for location custom fields in WP Store Locator - CSV Manager plugin
120
+ * Improved support for Gutenberg editor (reported by Cedric Busuttil)
121
+
122
+ = 2.2.4/2.2.5=
123
  * Minor code improvements
124
  * Yoast SEO Breadcrumbs - further improvements
125
+ * Hotfix for Toolset custom fields support (Permalink Manager Pro)
126
+ * Hotfix for Polylang URL modes
127
 
128
  = 2.2.3 =
129
  * Code improvements for WP All Import integration functions
includes/core/permalink-manager-admin-functions.php CHANGED
@@ -26,8 +26,9 @@ class Permalink_Manager_Admin_Functions extends Permalink_Manager_Class {
26
  * Hooks that should be triggered with "admin_init"
27
  */
28
  public function init() {
29
- // Additional link in "Plugins" page
30
  add_filter( "plugin_action_links_{$this->plugin_basename}", array($this, "plugins_page_links") );
 
31
 
32
  // Detect current section
33
  $this->sections = apply_filters('permalink_manager_sections', array());
@@ -154,10 +155,30 @@ class Permalink_Manager_Admin_Functions extends Permalink_Manager_Class {
154
  * Additional links on "Plugins" page
155
  */
156
  public function plugins_page_links($links) {
157
- $links[] = sprintf('<a href="%s">%s</a>', $this->get_admin_url(), __( 'URI Editor', 'permalink-manager' ));
158
- if(!defined('PERMALINK_MANAGER_PRO')) {
159
- $links[] = sprintf('<a href="%s" target="_blank">%s</a>', PERMALINK_MANAGER_WEBSITE, __( 'Buy Permalink Manager Pro', 'permalink-manager' ));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
160
  }
 
161
  return $links;
162
  }
163
 
@@ -535,7 +556,7 @@ class Permalink_Manager_Admin_Functions extends Permalink_Manager_Class {
535
 
536
  $html = "<div id=\"permalink-manager\" class=\"wrap\">";
537
 
538
- $donate_link = defined('PERMALINK_MANAGER_PRO') ? "" : sprintf("<a href=\"%s\" target=\"_blank\" class=\"page-title-action\">%s</a>", PERMALINK_MANAGER_DONATE, __("Donate", "permalink-manager"));
539
  $html .= sprintf("<h2 id=\"plugin-name-heading\">%s <a href=\"http://maciejbis.net\" class=\"author-link\" target=\"_blank\">%s</a> %s</h2>", PERMALINK_MANAGER_PLUGIN_NAME, __("by Maciej Bis", "permalink-manager"), $donate_link);
540
 
541
  // Display the tab navigation
@@ -544,8 +565,11 @@ class Permalink_Manager_Admin_Functions extends Permalink_Manager_Class {
544
  $active_class = ($this->active_section === $section_name) ? 'nav-tab-active nav-tab' : 'nav-tab';
545
  $section_url = $this->get_admin_url("&section={$section_name}");
546
 
547
- $html .= "<a href=\"{$section_url}\" class=\"{$active_class} section_{$section_name}\">{$section_properties['name']}</a>";
548
  }
 
 
 
549
  $html .= "</div>";
550
 
551
  // Now display the active section
@@ -724,6 +748,12 @@ class Permalink_Manager_Admin_Functions extends Permalink_Manager_Class {
724
  public static function display_uri_box($element, $gutenberg = false) {
725
  global $permalink_manager_options, $permalink_manager_uris;
726
 
 
 
 
 
 
 
727
  if(!empty($element->ID)) {
728
  $id = $element_id = $element->ID;
729
  $native_slug = $element->post_name;
@@ -872,21 +902,22 @@ class Permalink_Manager_Admin_Functions extends Permalink_Manager_Class {
872
  global $permalink_manager_options, $permalink_manager_redirects;
873
 
874
  // Heading
875
- $html = sprintf(
876
- "<div class=\"permalink-manager redirects-row redirects-panel columns-container\"><div><a class=\"button\" href=\"#\" id=\"toggle-redirect-panel\">%s</a></span></div>",
 
 
877
  __("Manage redirects", "permalink-manager")
878
  );
879
 
880
  $html .= "<div id=\"redirect-panel-inside\">";
881
-
882
- // Table
883
- if(Permalink_Manager_Admin_Functions::is_pro_active()) {
884
  $html .= Permalink_Manager_Pro_Addons::display_redirect_form($element_id);
885
  } else {
886
  $html .= self::pro_text(true);
887
  }
 
888
 
889
- $html .= "</div></div>";
890
 
891
  return $html;
892
  }
26
  * Hooks that should be triggered with "admin_init"
27
  */
28
  public function init() {
29
+ // Additional links in "Plugins" page
30
  add_filter( "plugin_action_links_{$this->plugin_basename}", array($this, "plugins_page_links") );
31
+ add_filter( "plugin_row_meta", array($this, "plugins_page_meta"), 10, 2 );
32
 
33
  // Detect current section
34
  $this->sections = apply_filters('permalink_manager_sections', array());
155
  * Additional links on "Plugins" page
156
  */
157
  public function plugins_page_links($links) {
158
+ $new_links = array(
159
+ sprintf('<a href="%s">%s</a>', $this->get_admin_url(), __( 'URI Editor', 'permalink-manager' )),
160
+ sprintf('<a href="%s">%s</a>', $this->get_admin_url('&section=settings'), __( 'Settings', 'permalink-manager' )),
161
+ );
162
+
163
+ return array_merge($links, $new_links);
164
+ }
165
+
166
+ /**
167
+ * Additional meta links on "Plugins" page
168
+ */
169
+ public function plugins_page_meta($links, $file) {
170
+ if($file == PERMALINK_MANAGER_BASENAME) {
171
+ $new_links = array(
172
+ 'doc' => sprintf('<a href="%s?utm_source=plugin_admin_page" target="_blank">%s</a>', 'https://permalinkmanager.pro/docs/', __( 'Documentation', 'permalink-manager' ))
173
+ );
174
+
175
+ if(!defined('PERMALINK_MANAGER_PRO')) {
176
+ $new_links['upgrade'] = sprintf('<a href="%s?utm_source=plugin_admin_page" target="_blank"><strong>%s</strong></a>', PERMALINK_MANAGER_WEBSITE, __( 'Buy Permalink Manager Pro', 'permalink-manager' ));
177
+ }
178
+
179
+ $links = array_merge($links, $new_links);
180
  }
181
+
182
  return $links;
183
  }
184
 
556
 
557
  $html = "<div id=\"permalink-manager\" class=\"wrap\">";
558
 
559
+ $donate_link = (Permalink_Manager_Admin_Functions::is_pro_active()) ? "" : sprintf("<a href=\"%s\" target=\"_blank\" class=\"page-title-action\">%s</a>", PERMALINK_MANAGER_DONATE, __("Donate", "permalink-manager"));
560
  $html .= sprintf("<h2 id=\"plugin-name-heading\">%s <a href=\"http://maciejbis.net\" class=\"author-link\" target=\"_blank\">%s</a> %s</h2>", PERMALINK_MANAGER_PLUGIN_NAME, __("by Maciej Bis", "permalink-manager"), $donate_link);
561
 
562
  // Display the tab navigation
565
  $active_class = ($this->active_section === $section_name) ? 'nav-tab-active nav-tab' : 'nav-tab';
566
  $section_url = $this->get_admin_url("&section={$section_name}");
567
 
568
+ $html .= sprintf("<a href=\"%s\" class=\"%s section_%s\">%s</a>", $section_url, $active_class, $section_name, $section_properties['name']);
569
  }
570
+
571
+ // Upgrade to Pro version
572
+ $html .= (Permalink_Manager_Admin_Functions::is_pro_active() == false) ? sprintf("<a href=\"%s\" target=\"_blank\" class=\"nav-tab section_upgrade\">%s</a>", 'https://permalinkmanager.pro/buy-permalink-manager-pro/?utm_source=plugin_upgrade', __('Upgrade to PRO', 'permalink-manager')) : '';
573
  $html .= "</div>";
574
 
575
  // Now display the active section
748
  public static function display_uri_box($element, $gutenberg = false) {
749
  global $permalink_manager_options, $permalink_manager_uris;
750
 
751
+ // Check the user capabilities
752
+ $edit_uris_cap = (!empty($permalink_manager_options['general']['edit_uris_cap'])) ? $permalink_manager_options['general']['edit_uris_cap'] : 'publish_posts';
753
+ if(!current_user_can($edit_uris_cap)) {
754
+ return;
755
+ }
756
+
757
  if(!empty($element->ID)) {
758
  $id = $element_id = $element->ID;
759
  $native_slug = $element->post_name;
902
  global $permalink_manager_options, $permalink_manager_redirects;
903
 
904
  // Heading
905
+ $html = "<div class=\"permalink-manager redirects-row redirects-panel columns-container\">";
906
+
907
+ $html .= sprintf(
908
+ "<div><a class=\"button\" href=\"#\" id=\"toggle-redirect-panel\">%s</a></span></div>",
909
  __("Manage redirects", "permalink-manager")
910
  );
911
 
912
  $html .= "<div id=\"redirect-panel-inside\">";
913
+ if(Permalink_Manager_Admin_Functions::is_pro_active() && class_exists('Permalink_Manager_Pro_Addons')) {
 
 
914
  $html .= Permalink_Manager_Pro_Addons::display_redirect_form($element_id);
915
  } else {
916
  $html .= self::pro_text(true);
917
  }
918
+ $html .= "</div>";
919
 
920
+ $html .= "</div>";
921
 
922
  return $html;
923
  }
includes/core/permalink-manager-core-functions.php CHANGED
@@ -54,7 +54,7 @@ class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
54
  * The most important Permalink Manager function
55
  */
56
  public static function detect_post($query, $request_url = false, $return_object = false) {
57
- global $wpdb, $wp, $wp_rewrite, $permalink_manager, $permalink_manager_uris, $wp_filter, $permalink_manager_options, $pm_query, $pm_uri_parts;
58
 
59
  // Check if the array with custom URIs is set
60
  //if(!(is_array($permalink_manager_uris)) || (empty($query) && empty($request_url))) return $query;
@@ -216,7 +216,8 @@ class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
216
 
217
  //$query["term"] = $final_uri;
218
  $query["term"] = $term->slug;
219
- $query[$query_parameter] = $final_uri;
 
220
  } else {
221
  $broken_uri = true;
222
  }
@@ -255,9 +256,18 @@ class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
255
 
256
  // Alter query parameters + support drafts URLs
257
  if($post_to_load->post_status == 'draft' || empty($final_uri)) {
258
- $query['p'] = $element_id;
259
- $query['preview'] = true;
260
- $query['post_type'] = $post_type;
 
 
 
 
 
 
 
 
 
261
  } else if($post_type == 'page') {
262
  $query['pagename'] = $final_uri;
263
  // $query['post_type'] = $post_type;
@@ -336,17 +346,7 @@ class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
336
  }
337
 
338
  /**
339
- * 6. WWW prefix mismatch detect
340
- */
341
- $home_url_has_www = (strpos($raw_home_url, 'www.') !== false) ? true : false;
342
- $requested_url_has_www = (strpos($_SERVER['HTTP_HOST'], 'www.') !== false) ? true : false;
343
-
344
- if($home_url_has_www != $requested_url_has_www) {
345
- unset($query['do_not_redirect']);
346
- }
347
-
348
- /**
349
- * 7. Set global with detected item id
350
  */
351
  if(!empty($element_id)) {
352
  $pm_query['id'] = $element_id;
@@ -357,31 +357,16 @@ class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
357
  }
358
 
359
  /**
360
- * 8. Debug mode
361
  */
362
- if(isset($_REQUEST['debug_url'])) {
363
- $debug_info['uri_parts'] = $uri_parts;
364
- $debug_info['old_query_vars'] = $old_query;
365
- $debug_info['new_query_vars'] = $query;
366
- $debug_info['detected_id'] = (!empty($pm_query['id'])) ? $pm_query['id'] : "-";
367
-
368
- if(isset($post_type)) {
369
- $debug_info['post_type'] = $post_type;
370
- } else if(isset($term_taxonomy)) {
371
- $debug_info['taxonomy'] = $term_taxonomy;
372
- }
373
-
374
- // License key info
375
- if(class_exists('Permalink_Manager_Pro_Functions')) {
376
- $license_key = $permalink_manager->functions['pro-functions']->get_license_key();
377
-
378
- // Mask the license key
379
- $debug_info['license_key'] = preg_replace('/([^-]+)-([^-]+)-([^-]+)-([^-]+)$/', '***-***-$3', $license_key);
380
- }
381
-
382
- $debug_txt = sprintf("<pre style=\"display:block;\">%s</pre>", print_r($debug_info, true));
383
- wp_die($debug_txt);
384
  }
 
385
 
386
  if($return_object && !empty($term)) {
387
  return $term;
@@ -426,24 +411,30 @@ class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
426
  /**
427
  * Display 404 if requested page does not exist in pagination
428
  */
429
- function fix_pagination_pages() {
430
- global $wp_query;
431
 
432
- // 1. Get the post object
433
- $post = get_queried_object();
434
 
435
  // 2. Check if post object is defined
436
- if(empty($post->post_type)) { return; }
 
 
 
437
 
438
- // 3. Check if pagination is detected
439
- $current_page = (!empty($wp_query->query_vars['page'])) ? $wp_query->query_vars['page'] : 1;
440
- $current_page = (empty($wp_query->query_vars['page']) && !empty($wp_query->query_vars['paged'])) ? $wp_query->query_vars['paged'] : $current_page;
441
 
442
- // 4. Count post pages
443
- $num_pages = substr_count(strtolower($post->post_content), '<!--nextpage-->') + 1;
 
 
 
 
444
 
445
  // 5. Block non-existent pages (Force 404 error)
446
- if($current_page > 1 && ($current_page > $num_pages)) {
447
  $wp_query->is_404 = true;
448
  $wp_query->query = $wp_query->queried_object = $wp_query->queried_object_id = null;
449
  $wp_query->set_404();
@@ -453,25 +444,14 @@ class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
453
  include(get_query_template('404'));
454
 
455
  die();
456
- }
457
- }
458
 
459
  /**
460
  * Redirects
461
  */
462
  function new_uri_redirect_and_404() {
463
- global $wp_query, $permalink_manager_uris, $permalink_manager_redirects, $permalink_manager_external_redirects, $permalink_manager_options, $wp, $pm_query, $pm_uri_parts;
464
-
465
- // Do not redirect on author pages & front page
466
- if(is_author() || is_front_page() || is_home() || is_feed()) { return false; }
467
-
468
- // Unset 404 if custom URI is detected
469
- if(isset($pm_query['id'])) {
470
- $wp_query->is_404 = false;
471
- }
472
-
473
- // Sometimes $wp_query indicates the wrong object if requested directly
474
- $queried_object = get_queried_object();
475
 
476
  // Get the redirection mode & trailing slashes settings
477
  $redirect_mode = (!empty($permalink_manager_options['general']['redirect'])) ? $permalink_manager_options['general']['redirect'] : false;
@@ -479,162 +459,190 @@ class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
479
  $trailing_slashes_redirect_mode = (!empty($permalink_manager_options['general']['trailing_slashes_redirect'])) ? $permalink_manager_options['general']['trailing_slashes_redirect'] : 301;
480
  $redirect_type = '-';
481
 
482
- // Get query string & URI
483
- $query_string = $_SERVER['QUERY_STRING'];
484
- $old_uri = $_SERVER['REQUEST_URI'];
485
-
486
  // Get home URL
487
  $home_url = rtrim(get_option('home'), "/");
488
  $home_dir = parse_url($home_url, PHP_URL_PATH);
489
 
 
 
 
 
 
 
 
490
  // Fix for WP installed in directories (remove the directory name from the URI)
491
  if(!empty($home_dir)) {
492
  $home_dir_regex = preg_quote(trim($home_dir), "/");
493
  $old_uri = preg_replace("/{$home_dir_regex}/", "", $old_uri, 1);
494
  }
495
 
496
- /**
497
- * 1A. External redirect
498
- */
499
- if(!empty($pm_query['id']) && !empty($permalink_manager_external_redirects[$pm_query['id']])) {
500
- $external_url = $permalink_manager_external_redirects[$pm_query['id']];
 
 
501
 
502
- if(filter_var($external_url, FILTER_VALIDATE_URL)) {
503
- // Allow redirect
504
- $wp_query->query_vars['do_not_redirect'] = 0;
505
 
506
- wp_redirect($external_url, 301);
507
- exit();
 
 
 
 
 
 
 
 
 
 
 
508
  }
509
- }
510
 
511
- /**
512
- * 1B. Custom redirects
513
- */
514
- if(empty($wp_query->query_vars['do_not_redirect']) && !empty($permalink_manager_redirects) && is_array($permalink_manager_redirects) && !empty($wp->request) && !empty($pm_query['uri'])) {
515
- $uri = $pm_query['uri'];
 
516
 
517
- // Make sure that URIs with non-ASCII characters are also detected
518
- $decoded_url = urldecode($uri);
 
519
 
520
- // Check if the URI is not assigned to any post/term's redirects
521
- foreach($permalink_manager_redirects as $element => $redirects) {
522
- if(is_array($redirects) && (in_array($uri, $redirects) || in_array($decoded_url, $redirects))) {
523
 
524
- // Post is detected
525
- if(is_numeric($element)) {
526
- $correct_permalink = get_permalink($element);
527
- }
528
- // Term is detected
529
- else {
530
- $term_id = intval(preg_replace("/[^0-9]/", "", $element));
531
- $correct_permalink = get_term_link($term_id);
 
 
 
532
  }
533
  }
 
 
534
  }
535
 
536
- $redirect_type = (!empty($correct_permalink)) ? 'custom_redirect' : $redirect_type;
537
- }
538
 
539
- // Ignore WP-Content links
540
- if(!empty($_SERVER['REQUEST_URI']) && (strpos($_SERVER['REQUEST_URI'], '/wp-content') !== false)) { return false; }
 
 
541
 
542
- /**
543
- * 1C. Enhance native redirect
544
- */
545
- if(empty($wp_query->query_vars['do_not_redirect']) && $redirect_mode && !empty($queried_object) && empty($correct_permalink)) {
 
 
546
 
547
- // Affect only posts with custom URI and old URIs
548
- if(!empty($queried_object->ID) && isset($permalink_manager_uris[$queried_object->ID]) && empty($wp_query->query['preview'])) {
549
- // Ignore posts with specific statuses
550
- if(!(empty($queried_object->post_status)) && in_array($queried_object->post_status, array('draft', 'pending', 'auto-draft', 'future'))) {
551
- return '';
552
- }
553
 
554
- // Check if post type is allowed
555
- if(Permalink_Manager_Helper_Functions::is_disabled($queried_object->post_type, 'post_type')) { return ''; }
 
 
 
 
 
556
 
557
- // Get the real URL
558
- $correct_permalink = get_permalink($queried_object->ID);
559
- }
560
- // Affect only terms with custom URI and old URIs
561
- else if(!empty($queried_object->term_id) && isset($permalink_manager_uris["tax-{$queried_object->term_id}"]) && defined('PERMALINK_MANAGER_PRO')) {
562
- // Check if taxonomy is allowed
563
- if(Permalink_Manager_Helper_Functions::is_disabled($queried_object->taxonomy, "taxonomy")) { return ''; }
564
 
565
- // Get the real URL
566
- $correct_permalink = get_term_link($queried_object->term_id, $queried_object->taxonomy);
567
- }
568
 
569
- $redirect_type = (!empty($correct_permalink)) ? 'native_redirect' : $redirect_type;
570
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
571
 
572
- /**
573
- * 2. Check trailing slashes (ignore links with query parameters)
574
- */
575
- if($trailing_slashes_mode && empty($_SERVER['QUERY_STRING']) && !empty($_SERVER['REQUEST_URI'])) {
576
- // Check if $old_uri ends with slash or not
577
- $ends_with_slash = (substr($old_uri, -1) == "/") ? true : false;
578
- $trailing_slashes_mode = (preg_match("/.*\.([a-zA-Z]{3,4})\/?$/", $old_uri) && $trailing_slashes_mode == 10) ? 20 : $trailing_slashes_mode;
579
-
580
- // Ignore empty URIs
581
- if($old_uri != "/") {
582
- // Remove the trailing slashes (and add them again if needed below)
583
- $old_uri = trim($old_uri, "/");
584
- $correct_permalink = (!empty($correct_permalink)) ? trim($correct_permalink, "/") : "";
585
-
586
- // 2A. Force trailing slashes
587
- if($trailing_slashes_mode == 10 && $ends_with_slash == false) {
588
- $correct_permalink = (!empty($correct_permalink)) ? "{$correct_permalink}/" : "{$home_url}/{$old_uri}/";
589
- }
590
- // 2B. Remove trailing slashes
591
- else if($trailing_slashes_mode == 20 && $ends_with_slash == true) {
592
- $correct_permalink = (!empty($correct_permalink)) ? $correct_permalink : "{$home_url}/{$old_uri}";
593
- $correct_permalink = trim($correct_permalink, "/");
594
  }
595
 
596
- // Use redirect mode set for trailing slash redirect
597
- if(($trailing_slashes_mode == 20 && $ends_with_slash == true) || ($trailing_slashes_mode == 10 && $ends_with_slash == false)) {
598
- $redirect_mode = $trailing_slashes_redirect_mode;
599
- }
600
  }
601
 
602
- $redirect_type = (!empty($correct_permalink)) ? 'slash_redirect' : '-';
603
- }
 
 
 
 
 
604
 
605
- /**
606
- * 3. Check if URL contains duplicated slashes
607
- */
608
- if(!empty($old_uri) && ($old_uri != '/') && preg_match('/\/{2,}/', $old_uri)) {
609
- $new_uri = ltrim(preg_replace('/([^:])([\/]+)/', '$1/', $old_uri), "/");
610
- $correct_permalink = "{$home_url}/{$new_uri}";
 
 
 
 
 
611
  }
612
 
613
  /**
614
- * 4. Prevent redirect loop
615
  */
616
- if(!empty($correct_permalink) && is_string($correct_permalink) && !empty($wp->request) && !empty($redirect_type) && $redirect_type != 'slash_redirect') {
617
- $current_uri = trim($wp->request, "/");
618
- $redirect_uri = trim(parse_url($correct_permalink, PHP_URL_PATH), "/");
 
 
619
 
620
- $correct_permalink = ($redirect_uri == $current_uri) ? null : $correct_permalink;
 
 
 
621
  }
622
 
623
  /**
624
- * 5. Debug redirect
625
  */
626
- if(isset($_REQUEST['debug_redirect'])) {
627
- $debug_info['query_vars'] = $wp_query->query_vars;
628
- $debug_info['redirect_url'] = (!empty($correct_permalink)) ? $correct_permalink : '-';
629
- $debug_info['redirect_mode'] = (!empty($redirect_mode)) ? $redirect_mode : "-";
630
- $debug_info['queried_object'] = (!empty($queried_object)) ? $queried_object : "-";
631
-
632
- $debug_txt = sprintf("<pre style=\"display:block;\">%s</pre>", print_r($debug_info, true));
633
- wp_die($debug_txt);
634
- }
635
 
636
  /**
637
- * 6. Ignore default URIs (or do nothing if redirects are disabled)
638
  */
639
  if(!empty($correct_permalink) && is_string($correct_permalink) && !empty($redirect_mode)) {
640
  // Allow redirect
54
  * The most important Permalink Manager function
55
  */
56
  public static function detect_post($query, $request_url = false, $return_object = false) {
57
+ global $wpdb, $wp, $wp_rewrite, $permalink_manager, $permalink_manager_uris, $wp_filter, $permalink_manager_options, $pm_query;
58
 
59
  // Check if the array with custom URIs is set
60
  //if(!(is_array($permalink_manager_uris)) || (empty($query) && empty($request_url))) return $query;
216
 
217
  //$query["term"] = $final_uri;
218
  $query["term"] = $term->slug;
219
+ //$query[$query_parameter] = $final_uri;
220
+ $query[$query_parameter] = $term->slug;
221
  } else {
222
  $broken_uri = true;
223
  }
256
 
257
  // Alter query parameters + support drafts URLs
258
  if($post_to_load->post_status == 'draft' || empty($final_uri)) {
259
+ if(is_user_logged_in()) {
260
+ $query['p'] = $element_id;
261
+ $query['preview'] = true;
262
+ $query['post_type'] = $post_type;
263
+ } else if($post_to_load->post_status == 'draft') {
264
+ $query['pagename'] = '-';
265
+ $query['error'] = '404';
266
+
267
+ $element_id = 0;
268
+ } else {
269
+ $query = $old_query;
270
+ }
271
  } else if($post_type == 'page') {
272
  $query['pagename'] = $final_uri;
273
  // $query['post_type'] = $post_type;
346
  }
347
 
348
  /**
349
+ * 6. Set global with detected item id
 
 
 
 
 
 
 
 
 
 
350
  */
351
  if(!empty($element_id)) {
352
  $pm_query['id'] = $element_id;
357
  }
358
 
359
  /**
360
+ * 7. Debug data
361
  */
362
+ if(!empty($taxonomy)) {
363
+ $content_type = "Taxonomy: {$term_taxonomy}";
364
+ } else if(!empty($post_type)) {
365
+ $content_type = "Post type: {$post_type}";
366
+ } else {
367
+ $content_type = '';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
368
  }
369
+ $query = apply_filters('permalink_manager_filter_query', $query, $old_query, $uri_parts, $pm_query, $content_type);
370
 
371
  if($return_object && !empty($term)) {
372
  return $term;
411
  /**
412
  * Display 404 if requested page does not exist in pagination
413
  */
414
+ function fix_pagination_pages() {
415
+ global $wp_query;
416
 
417
+ // 1. Get the queried object
418
+ $post = get_queried_object();
419
 
420
  // 2. Check if post object is defined
421
+ if(!empty($post->post_type)) {
422
+ // 2A. Check if pagination is detected
423
+ $current_page = (!empty($wp_query->query_vars['page'])) ? $wp_query->query_vars['page'] : 1;
424
+ $current_page = (empty($wp_query->query_vars['page']) && !empty($wp_query->query_vars['paged'])) ? $wp_query->query_vars['paged'] : $current_page;
425
 
426
+ // 2B. Count post pages
427
+ $num_pages = substr_count(strtolower($post->post_content), '<!--nextpage-->') + 1;
 
428
 
429
+ $is_404 = ($current_page > 1 && ($current_page > $num_pages)) ? true : false;
430
+ }
431
+ // 3. Force 404 if no posts are loaded
432
+ else if(!empty($wp_query->query['paged']) && $wp_query->post_count == 0) {
433
+ $is_404 = true;
434
+ }
435
 
436
  // 5. Block non-existent pages (Force 404 error)
437
+ if(!empty($is_404)) {
438
  $wp_query->is_404 = true;
439
  $wp_query->query = $wp_query->queried_object = $wp_query->queried_object_id = null;
440
  $wp_query->set_404();
444
  include(get_query_template('404'));
445
 
446
  die();
447
+ }
448
+ }
449
 
450
  /**
451
  * Redirects
452
  */
453
  function new_uri_redirect_and_404() {
454
+ global $wp_query, $permalink_manager_uris, $permalink_manager_redirects, $permalink_manager_external_redirects, $permalink_manager_options, $wp, $pm_query;
 
 
 
 
 
 
 
 
 
 
 
455
 
456
  // Get the redirection mode & trailing slashes settings
457
  $redirect_mode = (!empty($permalink_manager_options['general']['redirect'])) ? $permalink_manager_options['general']['redirect'] : false;
459
  $trailing_slashes_redirect_mode = (!empty($permalink_manager_options['general']['trailing_slashes_redirect'])) ? $permalink_manager_options['general']['trailing_slashes_redirect'] : 301;
460
  $redirect_type = '-';
461
 
 
 
 
 
462
  // Get home URL
463
  $home_url = rtrim(get_option('home'), "/");
464
  $home_dir = parse_url($home_url, PHP_URL_PATH);
465
 
466
+ // Set up $correct_permalink variable
467
+ $correct_permalink = '';
468
+
469
+ // Get query string & URI
470
+ $query_string = $_SERVER['QUERY_STRING'];
471
+ $old_uri = $_SERVER['REQUEST_URI'];
472
+
473
  // Fix for WP installed in directories (remove the directory name from the URI)
474
  if(!empty($home_dir)) {
475
  $home_dir_regex = preg_quote(trim($home_dir), "/");
476
  $old_uri = preg_replace("/{$home_dir_regex}/", "", $old_uri, 1);
477
  }
478
 
479
+ // Do not use custom redirects on author pages & front page
480
+ if(!is_author() && !is_front_page() && !is_home() && !is_feed()) {
481
+
482
+ // Unset 404 if custom URI is detected
483
+ if(isset($pm_query['id'])) {
484
+ $wp_query->is_404 = false;
485
+ }
486
 
487
+ // Sometimes $wp_query indicates the wrong object if requested directly
488
+ $queried_object = get_queried_object();
 
489
 
490
+ /**
491
+ * 1A. External redirect
492
+ */
493
+ if(!empty($pm_query['id']) && !empty($permalink_manager_external_redirects[$pm_query['id']])) {
494
+ $external_url = $permalink_manager_external_redirects[$pm_query['id']];
495
+
496
+ if(filter_var($external_url, FILTER_VALIDATE_URL)) {
497
+ // Allow redirect
498
+ $wp_query->query_vars['do_not_redirect'] = 0;
499
+
500
+ wp_redirect($external_url, 301);
501
+ exit();
502
+ }
503
  }
 
504
 
505
+ /**
506
+ * 1B. Custom redirects
507
+ */
508
+ if(empty($wp_query->query_vars['do_not_redirect']) && !empty($permalink_manager_redirects) && is_array($permalink_manager_redirects) && !empty($wp->request) && !empty($pm_query['uri'])) {
509
+ $uri = $pm_query['uri'];
510
+ $endpoint_value = $pm_query['endpoint_value'];
511
 
512
+ // Make sure that URIs with non-ASCII characters are also detected + Check the URLs that end with number
513
+ $decoded_url = urldecode($uri);
514
+ $endpoint_url = "{$uri}/{$endpoint_value}";
515
 
516
+ // Check if the URI is not assigned to any post/term's redirects
517
+ foreach($permalink_manager_redirects as $element => $redirects) {
518
+ if(!is_array($redirects)) { continue; }
519
 
520
+ if(in_array($uri, $redirects) || in_array($decoded_url, $redirects) || (is_numeric($endpoint_value) && in_array($endpoint_url, $redirects))) {
521
+
522
+ // Post is detected
523
+ if(is_numeric($element)) {
524
+ $correct_permalink = get_permalink($element);
525
+ }
526
+ // Term is detected
527
+ else {
528
+ $term_id = intval(preg_replace("/[^0-9]/", "", $element));
529
+ $correct_permalink = get_term_link($term_id);
530
+ }
531
  }
532
  }
533
+
534
+ $redirect_type = (!empty($correct_permalink)) ? 'custom_redirect' : $redirect_type;
535
  }
536
 
537
+ // Ignore WP-Content links
538
+ if(!empty($_SERVER['REQUEST_URI']) && (strpos($_SERVER['REQUEST_URI'], '/wp-content') !== false)) { return false; }
539
 
540
+ /**
541
+ * 1C. Enhance native redirect
542
+ */
543
+ if(empty($wp_query->query_vars['do_not_redirect']) && $redirect_mode && !empty($queried_object) && empty($correct_permalink)) {
544
 
545
+ // Affect only posts with custom URI and old URIs
546
+ if(!empty($queried_object->ID) && isset($permalink_manager_uris[$queried_object->ID]) && empty($wp_query->query['preview'])) {
547
+ // Ignore posts with specific statuses
548
+ if(!(empty($queried_object->post_status)) && in_array($queried_object->post_status, array('draft', 'pending', 'auto-draft', 'future'))) {
549
+ return '';
550
+ }
551
 
552
+ // Check if post type is allowed
553
+ if(Permalink_Manager_Helper_Functions::is_disabled($queried_object->post_type, 'post_type')) { return ''; }
 
 
 
 
554
 
555
+ // Get the real URL
556
+ $correct_permalink = get_permalink($queried_object->ID);
557
+ }
558
+ // Affect only terms with custom URI and old URIs
559
+ else if(!empty($queried_object->term_id) && isset($permalink_manager_uris["tax-{$queried_object->term_id}"]) && defined('PERMALINK_MANAGER_PRO')) {
560
+ // Check if taxonomy is allowed
561
+ if(Permalink_Manager_Helper_Functions::is_disabled($queried_object->taxonomy, "taxonomy")) { return ''; }
562
 
563
+ // Get the real URL
564
+ $correct_permalink = get_term_link($queried_object->term_id, $queried_object->taxonomy);
565
+ }
 
 
 
 
566
 
567
+ $redirect_type = (!empty($correct_permalink)) ? 'native_redirect' : $redirect_type;
568
+ }
 
569
 
570
+ /**
571
+ * 2. Check trailing slashes (ignore links with query parameters)
572
+ */
573
+ if($trailing_slashes_mode && empty($_SERVER['QUERY_STRING']) && !empty($_SERVER['REQUEST_URI'])) {
574
+ // Check if $old_uri ends with slash or not
575
+ $ends_with_slash = (substr($old_uri, -1) == "/") ? true : false;
576
+ $trailing_slashes_mode = (preg_match("/.*\.([a-zA-Z]{3,4})\/?$/", $old_uri) && $trailing_slashes_mode == 10) ? 20 : $trailing_slashes_mode;
577
+
578
+ // Ignore empty URIs
579
+ if($old_uri != "/") {
580
+ // Remove the trailing slashes (and add them again if needed below)
581
+ $old_uri = trim($old_uri, "/");
582
+ $correct_permalink = (!empty($correct_permalink)) ? trim($correct_permalink, "/") : "";
583
+
584
+ // 2A. Force trailing slashes
585
+ if($trailing_slashes_mode == 10 && $ends_with_slash == false) {
586
+ $correct_permalink = (!empty($correct_permalink)) ? "{$correct_permalink}/" : "{$home_url}/{$old_uri}/";
587
+ }
588
+ // 2B. Remove trailing slashes
589
+ else if($trailing_slashes_mode == 20 && $ends_with_slash == true) {
590
+ $correct_permalink = (!empty($correct_permalink)) ? $correct_permalink : "{$home_url}/{$old_uri}";
591
+ $correct_permalink = trim($correct_permalink, "/");
592
+ }
593
 
594
+ // Use redirect mode set for trailing slash redirect
595
+ if(($trailing_slashes_mode == 20 && $ends_with_slash == true) || ($trailing_slashes_mode == 10 && $ends_with_slash == false)) {
596
+ $redirect_mode = $trailing_slashes_redirect_mode;
597
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
598
  }
599
 
600
+ $redirect_type = (!empty($correct_permalink)) ? 'slash_redirect' : '-';
 
 
 
601
  }
602
 
603
+ /**
604
+ * 3. Check if URL contains duplicated slashes
605
+ */
606
+ if(!empty($old_uri) && ($old_uri != '/') && preg_match('/\/{2,}/', $old_uri)) {
607
+ $new_uri = ltrim(preg_replace('/([^:])([\/]+)/', '$1/', $old_uri), "/");
608
+ $correct_permalink = "{$home_url}/{$new_uri}";
609
+ }
610
 
611
+ /**
612
+ * 4. Prevent redirect loop
613
+ */
614
+ if(!empty($correct_permalink) && is_string($correct_permalink) && !empty($wp->request) && !empty($redirect_type) && $redirect_type !== 'slash_redirect') {
615
+ $current_uri = trim($wp->request, "/");
616
+ $redirect_uri = trim(parse_url($correct_permalink, PHP_URL_PATH), "/");
617
+
618
+ $correct_permalink = ($redirect_uri == $current_uri) ? null : $correct_permalink;
619
+ }
620
+ } else {
621
+ $queried_object = '-';
622
  }
623
 
624
  /**
625
+ * 5. WWW prefix | SSL mismatch redirect
626
  */
627
+ if(!empty($permalink_manager_options['general']['sslwww_redirect'])) {
628
+ $home_url_has_www = (strpos($home_url, 'www.') !== false) ? true : false;
629
+ $requested_url_has_www = (strpos($_SERVER['HTTP_HOST'], 'www.') !== false) ? true : false;
630
+ $home_url_has_ssl = (strpos($home_url, 'https') !== false) ? true : false;
631
+ $requested_url_has_ssl = is_ssl();
632
 
633
+ if(($home_url_has_www !==$requested_url_has_www) || ($home_url_has_ssl !== $requested_url_has_ssl)) {
634
+ $correct_permalink = "{$home_url}/{$old_uri}";
635
+ $redirect_type = 'www_redirect';
636
+ }
637
  }
638
 
639
  /**
640
+ * 6. Debug redirect
641
  */
642
+ $correct_permalink = apply_filters('permalink_manager_filter_redirect', $correct_permalink, $redirect_type, $queried_object);
 
 
 
 
 
 
 
 
643
 
644
  /**
645
+ * 7. Ignore default URIs (or do nothing if redirects are disabled)
646
  */
647
  if(!empty($correct_permalink) && is_string($correct_permalink) && !empty($redirect_mode)) {
648
  // Allow redirect
includes/core/permalink-manager-debug.php ADDED
@@ -0,0 +1,198 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Additional debug functions for "Permalink Manager Pro"
5
+ */
6
+ class Permalink_Manager_Debug_Functions extends Permalink_Manager_Class {
7
+
8
+ public function __construct() {
9
+ add_action('init', array($this, 'debug_data'), 99);
10
+ }
11
+
12
+ public function debug_data() {
13
+ add_filter('permalink_manager_filter_query', array($this, 'debug_query'), 9, 5);
14
+ add_filter('permalink_manager_filter_redirect', array($this, 'debug_redirect'), 9, 3);
15
+
16
+ self::debug_custom_redirects();
17
+ self::debug_custom_fields();
18
+ }
19
+
20
+ /**
21
+ * 1. Used in Permalink_Manager_Core_Functions::detect_post();
22
+ */
23
+ public function debug_query($query, $old_query = null, $uri_parts = null, $pm_query = null, $content_type = null) {
24
+ global $permalink_manager;
25
+
26
+ if(isset($_REQUEST['debug_url'])) {
27
+ $debug_info['uri_parts'] = $uri_parts;
28
+ $debug_info['old_query_vars'] = $old_query;
29
+ $debug_info['new_query_vars'] = $query;
30
+ $debug_info['pm_query'] = (!empty($pm_query['id'])) ? $pm_query['id'] : "-";
31
+ $debug_info['content_type'] = (!empty($content_type)) ? $content_type : "-";
32
+
33
+ // License key info
34
+ if(class_exists('Permalink_Manager_Pro_Functions')) {
35
+ $license_key = $permalink_manager->functions['pro-functions']->get_license_key();
36
+
37
+ // Mask the license key
38
+ $debug_info['license_key'] = preg_replace('/([^-]+)-([^-]+)-([^-]+)-([^-]+)$/', '***-***-$3', $license_key);
39
+ }
40
+
41
+ // Plugin version
42
+ $debug_info['version'] = PERMALINK_MANAGER_VERSION;
43
+
44
+ self::display_debug_data($debug_info);
45
+ }
46
+
47
+ return $query;
48
+ }
49
+
50
+ /**
51
+ * 2. Used in Permalink_Manager_Core_Functions::new_uri_redirect_and_404();
52
+ */
53
+ public function debug_redirect($correct_permalink, $redirect_type, $queried_object) {
54
+ global $wp_query;
55
+
56
+ if(isset($_REQUEST['debug_redirect'])) {
57
+ $debug_info['query_vars'] = $wp_query->query_vars;
58
+ $debug_info['redirect_url'] = (!empty($correct_permalink)) ? $correct_permalink : '-';
59
+ $debug_info['redirect_type'] = (!empty($redirect_type)) ? $redirect_type : "-";
60
+ $debug_info['queried_object'] = (!empty($queried_object)) ? $queried_object : "-";
61
+
62
+ self::display_debug_data($debug_info);
63
+ }
64
+
65
+ return $correct_permalink;
66
+ }
67
+
68
+ /**
69
+ * 3. Outputs a list of native & custom redirects
70
+ */
71
+ public function debug_custom_redirects() {
72
+ global $permalink_manager, $permalink_manager_uris, $permalink_manager_redirects;
73
+
74
+ if(isset($_GET['debug_custom_redirects']) && current_user_can('manage_options')) {
75
+ if(!empty($permalink_manager_uris)) {
76
+ $uri_post_class = $permalink_manager->functions['uri-functions-post'];
77
+ $uri_tax_class = $permalink_manager->functions['uri-functions-tax'];
78
+ $home_url = Permalink_Manager_Helper_Functions::get_permalink_base();
79
+
80
+ remove_filter('_get_page_link', array($uri_post_class, 'custom_post_permalinks'), 99, 2);
81
+ remove_filter('page_link', array($uri_post_class, 'custom_post_permalinks'), 99, 2);
82
+ remove_filter('post_link', array($uri_post_class, 'custom_post_permalinks'), 99, 2);
83
+ remove_filter('post_type_link', array($uri_post_class, 'custom_post_permalinks'), 99, 2);
84
+ remove_filter('attachment_link', array($uri_post_class, 'custom_post_permalinks'), 99, 2);
85
+ remove_filter('term_link', array($uri_tax_class, 'custom_tax_permalinks'), 999, 2 );
86
+ remove_filter('category_link', array($uri_tax_class, 'custom_tax_permalinks'), 999, 2 );
87
+ remove_filter('tag_link', array($uri_tax_class, 'custom_tax_permalinks'), 999, 2 );
88
+
89
+ $csv = array();
90
+
91
+ // Native redirects
92
+ foreach($permalink_manager_uris as $element_id => $uri) {
93
+ if(is_numeric($element_id)) {
94
+ $original_permalink = user_trailingslashit(get_permalink($element_id));
95
+ $custom_permalink = user_trailingslashit($home_url . "/" . $uri);
96
+ } else {
97
+ $term_id = preg_replace("/[^0-9]/", "", $element_id);
98
+ $term = get_term($term_id);
99
+
100
+ if(empty($term->taxonomy)) { continue; }
101
+
102
+ $original_permalink = user_trailingslashit(get_term_link($term->term_id, $term->taxonomy));
103
+ $custom_permalink = user_trailingslashit($home_url . "/" . $uri);
104
+ }
105
+
106
+ if($original_permalink == $custom_permalink && $original_permalink !== '/') { continue; }
107
+
108
+ $csv[$element_id] = array(
109
+ 'type' => 'native_redirect',
110
+ 'from' => $original_permalink,
111
+ 'to' => $custom_permalink
112
+ );
113
+ }
114
+ }
115
+
116
+ // Custom redirects
117
+ if($permalink_manager_redirects) {
118
+ foreach($permalink_manager_redirects as $element_id => $redirects) {
119
+ if(empty($permalink_manager_uris[$element_id])) { continue; }
120
+ $custom_permalink = user_trailingslashit($home_url . "/" . $permalink_manager_uris[$element_id]);
121
+
122
+ if(is_array($redirects)) {
123
+ $redirects = array_values($redirects);
124
+ $redirects_count = count($redirects);
125
+
126
+ foreach($redirects as $index => $redirect) {
127
+ $redirect_url = user_trailingslashit($home_url . "/" . $redirect);
128
+
129
+ $csv["extra-redirect-{$index}-{$element_id}"] = array(
130
+ 'type' => 'extra_redirect',
131
+ 'from' => $redirect_url,
132
+ 'to' => $custom_permalink
133
+ );
134
+ }
135
+ }
136
+ }
137
+ }
138
+
139
+ echo self::output_csv($csv);
140
+ die();
141
+ }
142
+ }
143
+
144
+ public static function debug_custom_fields() {
145
+ global $pagenow, $post;
146
+
147
+ if($pagenow == 'post.php' && isset($_GET['debug_custom_fields']) && isset($_GET['post'])) {
148
+ $post_id = intval($_GET['post']);
149
+ $custom_fields = get_post_meta($post_id);
150
+
151
+ self::display_debug_data($custom_fields);
152
+ }
153
+ }
154
+
155
+ /**
156
+ * A function used to display the debug data in various functions
157
+ */
158
+ public static function display_debug_data($debug_info) {
159
+ $debug_txt = sprintf("<pre style=\"display:block;\">%s</pre>", print_r($debug_info, true));
160
+ wp_die($debug_txt);
161
+ }
162
+
163
+ public static function output_csv($array) {
164
+ if(count($array) == 0) {
165
+ return null;
166
+ }
167
+
168
+ // Disable caching
169
+ $now = gmdate("D, d M Y H:i:s");
170
+ header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
171
+ header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
172
+ header("Last-Modified: {$now} GMT");
173
+
174
+ // Force download
175
+ header("Content-Type: application/force-download");
176
+ header("Content-Type: application/octet-stream");
177
+ header("Content-Type: application/download");
178
+
179
+ // Disposition / encoding on response body
180
+ header("Content-Disposition: attachment;filename=debug.csv");
181
+ header("Content-Transfer-Encoding: binary");
182
+
183
+ ob_start();
184
+
185
+ $df = fopen("php://output", 'w');
186
+
187
+ fputcsv($df, array_keys(reset($array)));
188
+ foreach ($array as $row) {
189
+ fputcsv($df, $row);
190
+ }
191
+ fclose($df);
192
+
193
+ return ob_get_clean();
194
+ }
195
+
196
+ }
197
+
198
+ ?>
includes/core/permalink-manager-helper-functions.php CHANGED
@@ -136,9 +136,9 @@ class Permalink_Manager_Helper_Functions extends Permalink_Manager_Class {
136
 
137
  static function content_types_disabled_by_default($is_taxonomy = false) {
138
  if($is_taxonomy) {
139
- return array('product_shipping_class');
140
  } else {
141
- return array('revision', 'algolia_task', 'fl_builder', 'fl-builder', 'fl-theme-layout', 'wc_product_tab', 'wc_voucher', 'wc_voucher_template', 'sliders', 'thirstylink');
142
  }
143
  }
144
 
@@ -442,12 +442,13 @@ class Permalink_Manager_Helper_Functions extends Permalink_Manager_Class {
442
 
443
  // $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $clean);
444
  $percent_sign = ($keep_percent_sign) ? "\%" : "";
445
- $clean = preg_replace("/[^\p{Thai}\p{Xwd}a-zA-Z0-9{$percent_sign}\/_\.|+ -]/u", '', $clean);
446
  $clean = ($force_lowercase) ? strtolower(trim($clean, '-')) : trim($clean, '-');
447
 
448
  // Remove special characters
449
  if($sanitize_slugs !== false) {
450
  $clean = preg_replace("/[\s_|+-]+/", "-", $clean);
 
451
  $clean = preg_replace('/([\.]+)(?![a-z]{3,4}$)/i', '', $clean);
452
  $clean = preg_replace('/([-\s+]\/[-\s+])/', '-', $clean);
453
  } else {
@@ -488,6 +489,10 @@ class Permalink_Manager_Helper_Functions extends Permalink_Manager_Class {
488
  $force_custom_slugs = apply_filters('permalink_manager_force_custom_slugs', $force_custom_slugs, $slug, $object);
489
 
490
  if($force_custom_slugs) {
 
 
 
 
491
  $title = (!empty($object->name)) ? $object->name : $object->post_title;
492
  $title = self::remove_slashes($title);
493
 
136
 
137
  static function content_types_disabled_by_default($is_taxonomy = false) {
138
  if($is_taxonomy) {
139
+ return array('product_shipping_class', 'post_status');
140
  } else {
141
+ return array('revision', 'algolia_task', 'fl_builder', 'fl-builder', 'fl-theme-layout', 'wc_product_tab', 'wc_voucher', 'wc_voucher_template', 'sliders', 'thirstylink', 'elementor_library', 'cms_block');
142
  }
143
  }
144
 
442
 
443
  // $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $clean);
444
  $percent_sign = ($keep_percent_sign) ? "\%" : "";
445
+ $clean = preg_replace("/[^\p{Thai}\p{Xwd}\p{Hebrew}a-zA-Z0-9{$percent_sign}\/_\.|+, -]/u", '', $clean);
446
  $clean = ($force_lowercase) ? strtolower(trim($clean, '-')) : trim($clean, '-');
447
 
448
  // Remove special characters
449
  if($sanitize_slugs !== false) {
450
  $clean = preg_replace("/[\s_|+-]+/", "-", $clean);
451
+ $clean = preg_replace("/[,]+/", "", $clean);
452
  $clean = preg_replace('/([\.]+)(?![a-z]{3,4}$)/i', '', $clean);
453
  $clean = preg_replace('/([-\s+]\/[-\s+])/', '-', $clean);
454
  } else {
489
  $force_custom_slugs = apply_filters('permalink_manager_force_custom_slugs', $force_custom_slugs, $slug, $object);
490
 
491
  if($force_custom_slugs) {
492
+ // Decode URI-encoded characters
493
+ //$slug = urldecode($slug);
494
+ //$title = urldecode($title);
495
+
496
  $title = (!empty($object->name)) ? $object->name : $object->post_title;
497
  $title = self::remove_slashes($title);
498
 
includes/core/permalink-manager-third-parties.php CHANGED
@@ -7,6 +7,7 @@ class Permalink_Manager_Third_Parties extends Permalink_Manager_Class {
7
 
8
  public function __construct() {
9
  add_action('init', array($this, 'init_hooks'), 99);
 
10
  }
11
 
12
  function init_hooks() {
@@ -137,6 +138,17 @@ class Permalink_Manager_Third_Parties extends Permalink_Manager_Class {
137
  }
138
  }
139
 
 
 
 
 
 
 
 
 
 
 
 
140
  /**
141
  * 0. Stop redirect
142
  */
@@ -173,7 +185,8 @@ class Permalink_Manager_Third_Parties extends Permalink_Manager_Class {
173
 
174
  // Fallback
175
  if(is_string($element) && strpos($element, 'tax-') !== false) {
176
- $element = get_term($element);
 
177
  } else if(is_numeric($element)) {
178
  $element = get_post($element);
179
  }
@@ -272,6 +285,7 @@ class Permalink_Manager_Third_Parties extends Permalink_Manager_Class {
272
  $element = get_term($item_id);
273
  if(!empty($element) && !is_wp_error($element)) {
274
  $element_id = $element->term_taxonomy_id;
 
275
  } else {
276
  return false;
277
  }
@@ -279,8 +293,8 @@ class Permalink_Manager_Third_Parties extends Permalink_Manager_Class {
279
  $element = get_post($item_id);
280
 
281
  if(!empty($element->post_type)) {
282
- $element_type = $element->post_type;
283
  $element_id = $item_id;
 
284
  }
285
  }
286
 
@@ -290,7 +304,7 @@ class Permalink_Manager_Third_Parties extends Permalink_Manager_Class {
290
  $language_code = self::get_language_code($element);
291
 
292
  if(!empty($uri_parts['lang']) && ($uri_parts['lang'] != $language_code)) {
293
- $wpml_item_id = apply_filters('wpml_object_id', $element_id);
294
  $item_id = (is_numeric($wpml_item_id)) ? $wpml_item_id : $item_id;
295
  }
296
 
@@ -438,8 +452,12 @@ class Permalink_Manager_Third_Parties extends Permalink_Manager_Class {
438
  // Get element language code
439
  if(!empty($_REQUEST['data']) && strpos($_REQUEST['data'], "target_lang")) {
440
  $language_code = preg_replace('/(.*target_lang=)([^=&]+)(.*)/', '$2', $_REQUEST['data']);
441
- } else if($pagenow == 'post.php' && !empty($_GET['lang'])) {
442
  $language_code = $_GET['lang'];
 
 
 
 
443
  } else {
444
  $language_code = self::get_language_code($element);
445
  }
@@ -639,11 +657,12 @@ class Permalink_Manager_Third_Parties extends Permalink_Manager_Class {
639
 
640
  if(!empty($object)) {
641
  $product_id = $object->get_id();
642
- $product_uri = Permalink_Manager_URI_Functions_Post::get_default_post_uri($product_id, false, true);
643
 
644
- $permalink_manager_uris[$product_id] = $product_uri;
 
645
 
646
- update_option('permalink-manager-uris', $permalink_manager_uris);
 
647
  }
648
  }
649
 
@@ -673,102 +692,99 @@ class Permalink_Manager_Third_Parties extends Permalink_Manager_Class {
673
 
674
  function yoast_fix_breadcrumbs($links) {
675
  // Get post type permastructure settings
676
- global $permalink_manager_permastructs, $permalink_manager_uris, $permalink_manager_options, $post, $wpdb, $wp;
677
 
678
- // Check if filter should be activated
679
  if(empty($permalink_manager_options['general']['yoast_breadcrumbs']) || empty($permalink_manager_uris)) { return $links; }
680
 
681
- // Get post type
682
- $post_type = (!empty($post->post_type)) ? $post->post_type : '';
683
-
684
- if(!empty($post_type) && !empty($permalink_manager_permastructs) && !empty($permalink_manager_permastructs['post_types'][$post_type])) {
685
- $queried_element = get_queried_object();
686
- if(!empty($queried_element->ID)) {
687
- $element_id = $queried_element->ID;
688
- } else if(!empty($queried_element->term_id)) {
689
- $element_id = "tax-{$queried_element->term_id}";
690
- } /*else {
691
- return $links;
692
- }*/
693
-
694
- if(!empty($element_id) && !empty($permalink_manager_uris[$element_id])) {
695
- $custom_uri = preg_replace("/([^\/]+)$/", '', $permalink_manager_uris[$element_id]);
696
- } else {
697
- $custom_uri = trim(preg_replace("/([^\/]+)$/", '', $wp->request), "/");
698
- //return $links;
699
- }
700
 
701
- $all_uris = array_flip($permalink_manager_uris);
702
- $custom_uri_parts = explode('/', trim($custom_uri));
703
- $breadcrumbs = array();
704
- $snowball = '';
 
 
705
 
706
- // Get Yoast meta
707
- $yoast_meta_terms = get_option('wpseo_taxonomy_meta');
 
 
 
 
708
 
709
- // Get internal breadcrumb elements
710
- foreach($custom_uri_parts as $slug) {
711
- if(empty($slug)) { continue; }
712
 
713
- $available_taxonomies = Permalink_Manager_Helper_Functions::get_taxonomies_array();
714
- $available_post_types = Permalink_Manager_Helper_Functions::get_post_types_array();
 
715
 
716
- $snowball = (empty($snowball)) ? $slug : "{$snowball}/{$slug}";
717
 
718
- // A. Try to match any custom URI
719
- if($snowball) {
720
- $uri = trim($snowball, "/");
721
- $element = (!empty($all_uris[$uri])) ? $all_uris[$uri] : false;
722
 
723
- if(!empty($element) && strpos($element, 'tax-') !== false) {
724
- $element = get_term($element);
725
- } else if(is_numeric($element)) {
726
- $element = get_post($element);
727
- }
728
  }
 
729
 
730
- // B. Try to get term
731
- if(empty($element) && !empty($available_taxonomies)) {
732
- $sql = sprintf("SELECT t.term_id, t.name, tt.taxonomy FROM {$wpdb->terms} AS t LEFT JOIN {$wpdb->term_taxonomy} AS tt ON t.term_id = tt.term_id WHERE slug = '%s' AND tt.taxonomy IN ('%s') LIMIT 1", $slug, implode("','", array_keys($available_taxonomies)));
733
-
734
- $element = $wpdb->get_row($sql);
735
- }
736
 
737
- // C. Try to get page/post
738
- if(empty($element) && !empty($available_post_types)) {
739
- $sql = sprintf("SELECT ID, post_title FROM {$wpdb->posts} WHERE post_name = '%s' AND post_status = 'publish' AND post_type IN ('%s') AND post_type != 'attachment' LIMIT 1", $slug, implode("','", array_keys($available_post_types)));
740
 
741
- $element = $wpdb->get_row($sql);
742
- }
 
743
 
744
- if(!empty($element->term_id)) {
745
- $title = (!empty($yoast_meta_terms[$element->taxonomy][$element->term_id]['wpseo_bctitle'])) ? $yoast_meta_terms[$element->taxonomy][$element->term_id]['wpseo_bctitle'] : $element->name;
746
-
747
- $breadcrumbs[] = array(
748
- 'text' => $title,
749
- 'url' => get_term_link((int) $element->term_id, $element->taxonomy),
750
- );
751
- } else if(!empty($element->ID)) {
752
- $title = get_post_meta($element->ID, '_yoast_wpseo_bctitle', true);
753
- $title = (!empty($title)) ? $title : $element->post_title;
754
-
755
- $breadcrumbs[] = array(
756
- 'text' => $title,
757
- 'url' => get_permalink($element->ID),
758
- );
759
- }
760
  }
761
 
762
- // Get new links
763
- if(!empty($links) && is_array($links)) {
764
- $first_element = reset($links);
765
- $last_element = end($links);
766
- $breadcrumbs = (!empty($breadcrumbs)) ? $breadcrumbs : array();
 
 
 
 
 
 
 
 
767
 
768
- $links = array_merge(array($first_element), $breadcrumbs, array($last_element));
 
 
 
769
  }
770
  }
771
 
 
 
 
 
 
 
 
 
 
772
  return array_filter($links);
773
  }
774
 
@@ -964,5 +980,21 @@ class Permalink_Manager_Third_Parties extends Permalink_Manager_Class {
964
  update_option('permalink-manager-uris', $permalink_manager_uris);
965
  }
966
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
967
  }
968
  ?>
7
 
8
  public function __construct() {
9
  add_action('init', array($this, 'init_hooks'), 99);
10
+ add_action('plugins_loaded', array($this, 'init_early_hooks'), 99);
11
  }
12
 
13
  function init_hooks() {
138
  }
139
  }
140
 
141
+ /**
142
+ * Some of the hooks must be called shortly after all the plugins are loaded
143
+ */
144
+ public function init_early_hooks() {
145
+ // 1. WP Store Locator
146
+ if(class_exists('WPSL_CSV')) {
147
+ add_action('added_post_meta', array($this, 'wpsl_regenerate_after_import'), 10, 4);
148
+ add_action('updated_post_meta', array($this, 'wpsl_regenerate_after_import'), 10, 4);
149
+ }
150
+ }
151
+
152
  /**
153
  * 0. Stop redirect
154
  */
185
 
186
  // Fallback
187
  if(is_string($element) && strpos($element, 'tax-') !== false) {
188
+ $element_id = intval(preg_replace("/[^0-9]/", "", $element));
189
+ $element = get_term($element_id);
190
  } else if(is_numeric($element)) {
191
  $element = get_post($element);
192
  }
285
  $element = get_term($item_id);
286
  if(!empty($element) && !is_wp_error($element)) {
287
  $element_id = $element->term_taxonomy_id;
288
+ $element_type = $element->taxonomy;
289
  } else {
290
  return false;
291
  }
293
  $element = get_post($item_id);
294
 
295
  if(!empty($element->post_type)) {
 
296
  $element_id = $item_id;
297
+ $element_type = $element->post_type;
298
  }
299
  }
300
 
304
  $language_code = self::get_language_code($element);
305
 
306
  if(!empty($uri_parts['lang']) && ($uri_parts['lang'] != $language_code)) {
307
+ $wpml_item_id = apply_filters('wpml_object_id', $element_id, $element_type);
308
  $item_id = (is_numeric($wpml_item_id)) ? $wpml_item_id : $item_id;
309
  }
310
 
452
  // Get element language code
453
  if(!empty($_REQUEST['data']) && strpos($_REQUEST['data'], "target_lang")) {
454
  $language_code = preg_replace('/(.*target_lang=)([^=&]+)(.*)/', '$2', $_REQUEST['data']);
455
+ } else if(in_array($pagenow, array('post.php', 'post-new.php')) && !empty($_GET['lang'])) {
456
  $language_code = $_GET['lang'];
457
+ } else if(!empty($_REQUEST['icl_post_language'])) {
458
+ $language_code = $_REQUEST['icl_post_language'];
459
+ } else if(!empty($_POST['action']) && $_POST['action'] == 'pm_save_permalink' && defined('ICL_LANGUAGE_CODE')) {
460
+ $language_code = ICL_LANGUAGE_CODE;
461
  } else {
462
  $language_code = self::get_language_code($element);
463
  }
657
 
658
  if(!empty($object)) {
659
  $product_id = $object->get_id();
 
660
 
661
+ if(empty($permalink_manager_uris[$product_id])) {
662
+ $permalink_manager_uris[$product_id] = Permalink_Manager_URI_Functions_Post::get_default_post_uri($product_id, false, true);
663
 
664
+ update_option('permalink-manager-uris', $permalink_manager_uris);
665
+ }
666
  }
667
  }
668
 
692
 
693
  function yoast_fix_breadcrumbs($links) {
694
  // Get post type permastructure settings
695
+ global $permalink_manager_uris, $permalink_manager_options, $post, $wpdb, $wp;
696
 
697
+ // Check if the filter should be activated
698
  if(empty($permalink_manager_options['general']['yoast_breadcrumbs']) || empty($permalink_manager_uris)) { return $links; }
699
 
700
+ // Get current post/page/term (if available)
701
+ $queried_element = get_queried_object();
702
+ if(!empty($queried_element->ID)) {
703
+ $element_id = $queried_element->ID;
704
+ } else if(!empty($queried_element->term_id)) {
705
+ $element_id = "tax-{$queried_element->term_id}";
706
+ }
 
 
 
 
 
 
 
 
 
 
 
 
707
 
708
+ // Get the custom permalink (if available) or the current request URL (if unavailable)
709
+ if(!empty($element_id) && !empty($permalink_manager_uris[$element_id])) {
710
+ $custom_uri = preg_replace("/([^\/]+)$/", '', $permalink_manager_uris[$element_id]);
711
+ } else {
712
+ $custom_uri = trim(preg_replace("/([^\/]+)$/", '', $wp->request), "/");
713
+ }
714
 
715
+ $all_uris = array_flip($permalink_manager_uris);
716
+ $custom_uri_parts = explode('/', trim($custom_uri));
717
+ $breadcrumbs = array();
718
+ $snowball = '';
719
+ $available_taxonomies = Permalink_Manager_Helper_Functions::get_taxonomies_array();
720
+ $available_post_types = Permalink_Manager_Helper_Functions::get_post_types_array();
721
 
722
+ // Get Yoast Meta (the breadcrumbs titles can be changed in Yoast metabox)
723
+ $yoast_meta_terms = get_option('wpseo_taxonomy_meta');
 
724
 
725
+ // Get internal breadcrumb elements
726
+ foreach($custom_uri_parts as $slug) {
727
+ if(empty($slug)) { continue; }
728
 
729
+ $snowball = (empty($snowball)) ? $slug : "{$snowball}/{$slug}";
730
 
731
+ // 1A. Try to match any custom URI
732
+ if($snowball) {
733
+ $uri = trim($snowball, "/");
734
+ $element = (!empty($all_uris[$uri])) ? $all_uris[$uri] : false;
735
 
736
+ if(!empty($element) && strpos($element, 'tax-') !== false) {
737
+ $element_id = intval(preg_replace("/[^0-9]/", "", $element));
738
+ $element = get_term($element_id);
739
+ } else if(is_numeric($element)) {
740
+ $element = get_post($element);
741
  }
742
+ }
743
 
744
+ // 1B. Try to get term
745
+ if(empty($element) && !empty($available_taxonomies)) {
746
+ $sql = sprintf("SELECT t.term_id, t.name, tt.taxonomy FROM {$wpdb->terms} AS t LEFT JOIN {$wpdb->term_taxonomy} AS tt ON t.term_id = tt.term_id WHERE slug = '%s' AND tt.taxonomy IN ('%s') LIMIT 1", $slug, implode("','", array_keys($available_taxonomies)));
 
 
 
747
 
748
+ $element = $wpdb->get_row($sql);
749
+ }
 
750
 
751
+ // 1C. Try to get page/post
752
+ if(empty($element) && !empty($available_post_types)) {
753
+ $sql = sprintf("SELECT ID, post_title FROM {$wpdb->posts} WHERE post_name = '%s' AND post_status = 'publish' AND post_type IN ('%s') AND post_type != 'attachment' LIMIT 1", $slug, implode("','", array_keys($available_post_types)));
754
 
755
+ $element = $wpdb->get_row($sql);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
756
  }
757
 
758
+ // 2A. When the term is found, we can add it to the breadcrumbs
759
+ if(!empty($element->term_id)) {
760
+ $title = (!empty($yoast_meta_terms[$element->taxonomy][$element->term_id]['wpseo_bctitle'])) ? $yoast_meta_terms[$element->taxonomy][$element->term_id]['wpseo_bctitle'] : $element->name;
761
+
762
+ $breadcrumbs[] = array(
763
+ 'text' => $title,
764
+ 'url' => get_term_link((int) $element->term_id, $element->taxonomy),
765
+ );
766
+ }
767
+ // 2B. When the post/page is found, we can add it to the breadcrumbs
768
+ else if(!empty($element->ID)) {
769
+ $title = get_post_meta($element->ID, '_yoast_wpseo_bctitle', true);
770
+ $title = (!empty($title)) ? $title : $element->post_title;
771
 
772
+ $breadcrumbs[] = array(
773
+ 'text' => $title,
774
+ 'url' => get_permalink($element->ID),
775
+ );
776
  }
777
  }
778
 
779
+ // Add new links to current breadcrumbs array
780
+ if(!empty($links) && is_array($links)) {
781
+ $first_element = reset($links);
782
+ $last_element = end($links);
783
+ $breadcrumbs = (!empty($breadcrumbs)) ? $breadcrumbs : array();
784
+
785
+ $links = array_merge(array($first_element), $breadcrumbs, array($last_element));
786
+ }
787
+
788
  return array_filter($links);
789
  }
790
 
980
  update_option('permalink-manager-uris', $permalink_manager_uris);
981
  }
982
 
983
+ /**
984
+ * 10. Store Locator - CSV Manager
985
+ */
986
+ public function wpsl_regenerate_after_import($meta_id, $post_id, $meta_key, $meta_value) {
987
+ global $permalink_manager_uris;
988
+
989
+ if(strpos($meta_key, 'wpsl_') !== false && isset($_POST['wpsl_csv_import_nonce'])) {
990
+ $default_uri = Permalink_Manager_URI_Functions_Post::get_default_post_uri($post_id);
991
+
992
+ if($default_uri) {
993
+ $permalink_manager_uris[$post_id] = $default_uri;
994
+ update_option('permalink-manager-uris', $permalink_manager_uris);
995
+ }
996
+ }
997
+ }
998
+
999
  }
1000
  ?>
includes/core/permalink-manager-uri-functions-post.php CHANGED
@@ -56,6 +56,9 @@ class Permalink_Manager_URI_Functions_Post extends Permalink_Manager_Class {
56
  // Do not filter in Elementor
57
  if(!empty($_GET['action']) && $_GET['action'] == 'elementor') { return $permalink; }
58
 
 
 
 
59
  $post = (is_integer($post)) ? get_post($post) : $post;
60
 
61
  // Start with homepage URL
56
  // Do not filter in Elementor
57
  if(!empty($_GET['action']) && $_GET['action'] == 'elementor') { return $permalink; }
58
 
59
+ // Do not filter in WPML String Editor
60
+ if(!empty($_REQUEST['icl_ajx_action']) && $_REQUEST['icl_ajx_action'] == 'icl_st_save_translation') { return $permalink; }
61
+
62
  $post = (is_integer($post)) ? get_post($post) : $post;
63
 
64
  // Start with homepage URL
includes/views/permalink-manager-settings.php CHANGED
@@ -45,6 +45,18 @@ class Permalink_Manager_Settings extends Permalink_Manager_Class {
45
  'label' => __('Show "Native slug" field', 'permalink-manager'),
46
  'input_class' => '',
47
  'description' => __('If enabled, it would be possible to edit the native slug via URI Editor on single post/term edit page.', 'permalink-manager')
 
 
 
 
 
 
 
 
 
 
 
 
48
  )
49
  )
50
  ),
@@ -61,18 +73,18 @@ class Permalink_Manager_Settings extends Permalink_Manager_Class {
61
  ),
62
  'setup_redirects' => array(
63
  'type' => 'single_checkbox',
64
- 'label' => __('Auto-create "Extra Redirects" for old permalinks', 'permalink-manager'),
65
  'input_class' => '',
66
  'pro' => true,
67
  'disabled' => true,
68
- 'description' => __('If enabled, the redirects will be automatially created for old custom permalinks, after posts or terms are updated.', 'permalink-manager')
69
  ),
70
  'redirect' => array(
71
  'type' => 'select',
72
  'label' => __('Redirect', 'permalink-manager'),
73
  'input_class' => 'settings-select',
74
  'choices' => array(0 => __('Disable', 'permalink-manager'), "301" => __('Enable "301 redirect"', 'permalink-manager'), "302" => __('Enable "302 redirect"', 'permalink-manager')),
75
- 'description' => __('If enabled - the visitors will be redirected from native permalinks to your custom permalinks.<br /><strong>Only native permalinks & extra redirects will be redirected to new custom permalinks</strong>.', 'permalink-manager')
76
  ),
77
  'trailing_slashes' => array(
78
  'type' => 'select',
@@ -80,13 +92,7 @@ class Permalink_Manager_Settings extends Permalink_Manager_Class {
80
  'input_class' => 'settings-select',
81
  'choices' => array(0 => __('Use default settings', 'permalink-manager'), 1 => __('Add trailing slashes', 'permalink-manager'), 10 => __('Add trailing slashes (+ auto-redirect links without them)', 'permalink-manager'), 2 => __('Remove trailing slashes', 'permalink-manager'), 20 => __('Remove trailing slashes (+ auto-redirect links with them)', 'permalink-manager'),),
82
  'description' => __('This option can be used to alter the native settings and control if trailing slash should be added or removed from the end of posts & terms permalinks.', 'permalink-manager')
83
- ),
84
- 'pagination_redirect' => array(
85
- 'type' => 'single_checkbox',
86
- 'label' => __('Force 404 on non-existing pagination pages', 'permalink-manager'),
87
- 'input_class' => '',
88
- 'description' => __('If enabled, the non-existing pagination pages (for single posts) will return 404 ("Not Found") error.<br /><strong>Please disable it, if you encounter any problems with pagination pages or use custom pagination system.</strong>', 'permalink-manager')
89
- ),
90
  )
91
  ),
92
  'advanced' => array(
@@ -134,9 +140,15 @@ class Permalink_Manager_Settings extends Permalink_Manager_Class {
134
  ),
135
  'partial_disable' => array(
136
  'type' => 'checkbox',
137
- 'label' => __('Disable Permalink Manager functionalities', 'permalink-manager'),
138
  'choices' => $content_types,
139
- 'description' => __('Select the post types & taxonomies where the functionalities of Permalink Manager should be completely disabled.', 'permalink-manager')
 
 
 
 
 
 
140
  ),
141
  )
142
  )
45
  'label' => __('Show "Native slug" field', 'permalink-manager'),
46
  'input_class' => '',
47
  'description' => __('If enabled, it would be possible to edit the native slug via URI Editor on single post/term edit page.', 'permalink-manager')
48
+ ),
49
+ 'pagination_redirect' => array(
50
+ 'type' => 'single_checkbox',
51
+ 'label' => __('Force 404 on non-existing pagination pages', 'permalink-manager'),
52
+ 'input_class' => '',
53
+ 'description' => __('If enabled, the non-existing pagination pages (for single posts) will return 404 ("Not Found") error.<br /><strong>Please disable it, if you encounter any problems with pagination pages or use custom pagination system.</strong>', 'permalink-manager')
54
+ ),
55
+ 'sslwww_redirect' => array(
56
+ 'type' => 'single_checkbox',
57
+ 'label' => __('Force HTTPS in URLs', 'permalink-manager'),
58
+ 'input_class' => '',
59
+ 'description' => __('<strong>Please disable it, if you encounter any redirect loop issues.</strong>', 'permalink-manager')
60
  )
61
  )
62
  ),
73
  ),
74
  'setup_redirects' => array(
75
  'type' => 'single_checkbox',
76
+ 'label' => __('Auto-create "Extra Redirects" for old version of permalinks', 'permalink-manager'),
77
  'input_class' => '',
78
  'pro' => true,
79
  'disabled' => true,
80
+ 'description' => __('If enabled, the redirects will be automatially created for old custom permalinks, after posts or terms URLs are changed.', 'permalink-manager')
81
  ),
82
  'redirect' => array(
83
  'type' => 'select',
84
  'label' => __('Redirect', 'permalink-manager'),
85
  'input_class' => 'settings-select',
86
  'choices' => array(0 => __('Disable', 'permalink-manager'), "301" => __('Enable "301 redirect"', 'permalink-manager'), "302" => __('Enable "302 redirect"', 'permalink-manager')),
87
+ 'description' => __('If enabled - the visitors will be redirected from native permalinks to your custom permalinks.', 'permalink-manager')
88
  ),
89
  'trailing_slashes' => array(
90
  'type' => 'select',
92
  'input_class' => 'settings-select',
93
  'choices' => array(0 => __('Use default settings', 'permalink-manager'), 1 => __('Add trailing slashes', 'permalink-manager'), 10 => __('Add trailing slashes (+ auto-redirect links without them)', 'permalink-manager'), 2 => __('Remove trailing slashes', 'permalink-manager'), 20 => __('Remove trailing slashes (+ auto-redirect links with them)', 'permalink-manager'),),
94
  'description' => __('This option can be used to alter the native settings and control if trailing slash should be added or removed from the end of posts & terms permalinks.', 'permalink-manager')
95
+ )
 
 
 
 
 
 
96
  )
97
  ),
98
  'advanced' => array(
140
  ),
141
  'partial_disable' => array(
142
  'type' => 'checkbox',
143
+ 'label' => __('Exclude content types', 'permalink-manager'),
144
  'choices' => $content_types,
145
+ 'description' => __('Permalink Manager will ignore and not filter the custom permalinks of all selected above post types & taxonomies.', 'permalink-manager')
146
+ ),
147
+ 'edit_uris_cap' => array(
148
+ 'type' => 'select',
149
+ 'label' => __('URI Editor role capability', 'permalink-manager'),
150
+ 'choices' => array('edit_theme_options' => __('Administrator (edit_theme_options)', 'permalink-manager'), 'publish_pages' => __('Editor (publish_pages)', 'permalink-manager'), 'publish_posts' => __('Author (publish_posts)', 'permalink-manager'), 'edit_posts' => __('Contributor (edit_posts)', 'permalink-manager')),
151
+ 'description' => sprintf(__('Only the users who have selected capability will be able to access URI Editor.<br />The list of capabilities <a href="%s" target="_blank">can be found here</a>.', 'permalink-manager'), 'https://wordpress.org/support/article/roles-and-capabilities/#capability-vs-role-table')
152
  ),
153
  )
154
  )
includes/views/permalink-manager-upgrade.php DELETED
@@ -1,64 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Display the page where the slugs could be regenerated or replaced
5
- */
6
- class Permalink_Manager_Upgrade extends Permalink_Manager_Class {
7
-
8
- public function __construct() {
9
- if(!defined('PERMALINK_MANAGER_PRO')) {
10
- add_filter( 'permalink_manager_sections', array($this, 'add_upgrade_section'), 1 );
11
- }
12
- }
13
-
14
- public function add_upgrade_section($admin_sections) {
15
- $admin_sections['upgrade'] = array(
16
- 'name' => __('Extra features', 'permalink-manager'),
17
- 'function' => array('class' => 'Permalink_Manager_Upgrade', 'method' => 'output')
18
- );
19
-
20
- return $admin_sections;
21
- }
22
-
23
- public function output() {
24
- $output = sprintf("<h3>%s</h3>", __("Permalink Manager Pro extra features", "permalink-manager"));
25
-
26
- $output .= sprintf("<p class=\"lead\">%s</p>", __('Take full control of your permalinks! Permalink Manager Pro contains a bunch of useful extra functionalities!', 'permalink-manager'));
27
- $output .= sprintf("<p class=\"\">%s</p>", __('Not certain if Permalink Manager Pro will fix your permalink problem?<br />Contact us at <a href="mailto:contact@permalinkmanager.pro">contact@permalinkmanager.pro</a>!', 'permalink-manager'));
28
-
29
- $output .= "<div class=\"columns-container\">";
30
- $output .= "<div class=\"column-1_3\">";
31
- $output .= sprintf("<h5>%s</h5>", __("Full Taxonomy Support", "permalink-manager"));
32
- $output .= wpautop(__("With Permalink Manager Pro you can easily alter the default taxonomies’ permastructures & edit the full permalink in all the categories, tags and custom taxonomies terms!", "permalink-manager"));
33
- $output .= wpautop(__("You can also bulk edit the taxonomies permalinks (eg. reset the native terms slugs) with included tools - “Find & replace” or “Regnerate/reset”", "permalink-manager"));
34
- $output .= "</div>";
35
- $output .= "<div class=\"column-1_3\">";
36
- $output .= sprintf("<h5>%s</h5>", __("Full WooCommerce Support", "permalink-manager"));
37
- $output .= wpautop(__("Adjust your shop, product category, tags or single product permalinks and set your e-commerce URLs any way you want!", "permalink-manager"));
38
- $output .= wpautop(__("Remove <em>product-category</em>, <em>product-tag</em> and <em>product</em> or replace them with another permalink tags. Furthermore, the plugin allows to set completely custom permalinks for each product &#038; product taxonomies individually.", "permalink-manager"));
39
- $output .= "</div>";
40
- $output .= "<div class=\"column-1_3\">";
41
- $output .= sprintf("<h5>%s</h5>", __("Custom fields inside permalinks", "permalink-manager"));
42
- $output .= wpautop(__("Automatically embed your custom fields values inside the permalinks, by adding the custom field tags to the permastructures.", "permalink-manager"));
43
- $output .= wpautop(__("This functionality is compatible with meta keys set with Advanced Custom Fields plugin.", "permalink-manager"));
44
- $output .= "</div>";
45
- $output .= "<div class=\"column-1_3\">";
46
- $output .= sprintf("<h5>%s</h5>", __("Extra Redirects", "permalink-manager"));
47
- $output .= wpautop(__("Set-up extra redirects and/or aliases for each post or term. Permalink Manager would also automatically create redirects for previously used custom permalinks.", "permalink-manager"));
48
- $output .= "</div>";
49
- $output .= "<div class=\"column-1_3\">";
50
- $output .= sprintf("<h5>%s</h5>", __("Import permalinks from \"Custom Permalinks\"", "permalink-manager"));
51
- $output .= wpautop(__("Additionally, Permalink Manager Pro allows to import the custom URIs defined previously with \"Custom Permalinks\" plugin. ", "permalink-manager"));
52
- $output .= "</div>";
53
- $output .= "<div class=\"column-1_3\">";
54
- $output .= sprintf("<h5>%s</h5>", __("Remove \"stop words\" from permalinks", "permalink-manager"));
55
- $output .= wpautop(__("Set your own list of stop words or use a predefined one available in 21 languages. If enabled, all the words will be automatically removed from the default permalinks.", "permalink-manager"));
56
- $output .= "</div>";
57
- $output .= "</div>";
58
-
59
- $output .= sprintf("<p><a class=\"button button-default margin-top\" href=\"%s\" target=\"_blank\">%s</a>&nbsp;&nbsp;<a class=\"button button-primary margin-top\" href=\"%s\" target=\"_blank\">%s</a></p>", PERMALINK_MANAGER_WEBSITE, __("More info about Permalink Manager Pro", "permalink-manager"), "https://gumroad.com/l/permalink-manager", __("Buy Permalink Manager Pro", "permalink-manager"));
60
-
61
- return $output;
62
- }
63
-
64
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
languages/permalink-manager.pot CHANGED
@@ -3,7 +3,7 @@ msgid ""
3
  msgstr ""
4
  "Project-Id-Version: PACKAGE VERSION\n"
5
  "Report-Msgid-Bugs-To: \n"
6
- "POT-Creation-Date: 2018-06-13 10:15+0000\n"
7
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
8
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
9
  "Language-Team: \n"
@@ -14,7 +14,7 @@ msgstr ""
14
  "Content-Transfer-Encoding: 8bit\n"
15
  "X-Generator: Loco https://localise.biz/"
16
 
17
- #: permalink-manager.php:185
18
  #, php-format
19
  msgid ""
20
  "Get access to extra features: full taxonomy and WooCommerce support, "
@@ -23,750 +23,642 @@ msgid ""
23
  "and save %s using \"%s\" coupon code!</strong> Valid until %s!"
24
  msgstr ""
25
 
26
- #: includes/views/permalink-manager-upgrade.php:16
27
- msgid "Extra features"
28
  msgstr ""
29
 
30
- #: includes/views/permalink-manager-upgrade.php:24
31
- msgid "Permalink Manager Pro extra features"
32
  msgstr ""
33
 
34
- #: includes/views/permalink-manager-upgrade.php:26
35
- msgid ""
36
- "Take full control of your permalinks! Permalink Manager Pro contains a bunch "
37
- "of useful extra functionalities!"
 
 
 
 
 
 
38
  msgstr ""
39
 
40
- #: includes/views/permalink-manager-upgrade.php:27
41
- msgid ""
42
- "Not certain if Permalink Manager Pro will fix your permalink problem?<br />"
43
- "Contact us at <a href=\"mailto:contact@permalinkmanager.pro\">"
44
- "contact@permalinkmanager.pro</a>!"
45
  msgstr ""
46
 
47
- #: includes/views/permalink-manager-upgrade.php:31
48
- msgid "Full Taxonomy Support"
 
 
 
49
  msgstr ""
50
 
51
- #: includes/views/permalink-manager-upgrade.php:32
52
- msgid ""
53
- "With Permalink Manager Pro you can easily alter the default taxonomies’ "
54
- "permastructures & edit the full permalink in all the categories, tags and "
55
- "custom taxonomies terms!"
56
  msgstr ""
57
 
58
- #: includes/views/permalink-manager-upgrade.php:33
59
- msgid ""
60
- "You can also bulk edit the taxonomies permalinks (eg. reset the native terms "
61
- "slugs) with included tools - “Find & replace” or “Regnerate/reset”"
 
62
  msgstr ""
63
 
64
- #: includes/views/permalink-manager-upgrade.php:36
65
- msgid "Full WooCommerce Support"
66
  msgstr ""
67
 
68
- #: includes/views/permalink-manager-upgrade.php:37
69
- msgid ""
70
- "Adjust your shop, product category, tags or single product permalinks and "
71
- "set your e-commerce URLs any way you want!"
72
  msgstr ""
73
 
74
- #: includes/views/permalink-manager-upgrade.php:38
75
- msgid ""
76
- "Remove <em>product-category</em>, <em>product-tag</em> and <em>product</em> "
77
- "or replace them with another permalink tags. Furthermore, the plugin allows "
78
- "to set completely custom permalinks for each product &#038; product "
79
- "taxonomies individually."
80
  msgstr ""
81
 
82
- #: includes/views/permalink-manager-upgrade.php:41
83
- msgid "Custom fields inside permalinks"
84
  msgstr ""
85
 
86
- #: includes/views/permalink-manager-upgrade.php:42
87
- msgid ""
88
- "Automatically embed your custom fields values inside the permalinks, by "
89
- "adding the custom field tags to the permastructures."
90
  msgstr ""
91
 
92
- #: includes/views/permalink-manager-upgrade.php:43
93
- msgid ""
94
- "This functionality is compatible with meta keys set with Advanced Custom "
95
- "Fields plugin."
96
  msgstr ""
97
 
98
- #: includes/views/permalink-manager-upgrade.php:46
99
- msgid "Extra Redirects"
100
  msgstr ""
101
 
102
- #: includes/views/permalink-manager-upgrade.php:47
103
  msgid ""
104
- "Set-up extra redirects and/or aliases for each post or term. Permalink "
105
- "Manager would also automatically create redirects for previously used custom "
106
- "permalinks."
 
107
  msgstr ""
108
 
109
- #: includes/views/permalink-manager-upgrade.php:50
110
- msgid "Import permalinks from \"Custom Permalinks\""
111
  msgstr ""
112
 
113
- #: includes/views/permalink-manager-upgrade.php:51
114
- msgid ""
115
- "Additionally, Permalink Manager Pro allows to import the custom URIs defined "
116
- "previously with \"Custom Permalinks\" plugin. "
117
  msgstr ""
118
 
119
- #: includes/views/permalink-manager-upgrade.php:54
120
- msgid "Remove \"stop words\" from permalinks"
121
  msgstr ""
122
 
123
- #: includes/views/permalink-manager-upgrade.php:55
124
- msgid ""
125
- "Set your own list of stop words or use a predefined one available in 21 "
126
- "languages. If enabled, all the words will be automatically removed from the "
127
- "default permalinks."
128
  msgstr ""
129
 
130
- #: includes/views/permalink-manager-upgrade.php:59
131
- msgid "More info about Permalink Manager Pro"
132
  msgstr ""
133
 
134
- #: includes/views/permalink-manager-upgrade.php:59
135
- #: includes/core/permalink-manager-admin-functions.php:121
136
- msgid "Buy Permalink Manager Pro"
137
  msgstr ""
138
 
139
- #: includes/views/permalink-manager-uri-editor.php:28
140
- msgid "URI editor"
141
  msgstr ""
142
 
143
- #: includes/views/permalink-manager-uri-editor.php:83
144
- msgid "Apply"
145
  msgstr ""
146
 
147
- #: includes/views/permalink-manager-uri-editor.php:89
148
- msgid "Per page"
 
149
  msgstr ""
150
 
151
- #: includes/views/permalink-manager-uri-editor.php:94
152
- msgid "Post statuses"
 
153
  msgstr ""
154
 
155
- #: includes/views/permalink-manager-uri-editor-post.php:54
156
- msgid "Post title"
 
157
  msgstr ""
158
 
159
- #: includes/views/permalink-manager-uri-editor-post.php:55
160
- #: includes/views/permalink-manager-uri-editor-tax.php:51
161
- msgid "Full URI & Permalink"
162
  msgstr ""
163
 
164
- #: includes/views/permalink-manager-uri-editor-post.php:88
165
- msgid "Inherit (Attachment)"
 
166
  msgstr ""
167
 
168
- #: includes/views/permalink-manager-uri-editor-post.php:105
169
- #: includes/views/permalink-manager-uri-editor-tax.php:94
170
- msgid "Slug"
171
  msgstr ""
172
 
173
- #: includes/views/permalink-manager-uri-editor-post.php:106
174
- msgid "Post status"
175
  msgstr ""
176
 
177
- #: includes/views/permalink-manager-uri-editor-post.php:111
178
- #: includes/views/permalink-manager-uri-editor-tax.php:99
179
- #: includes/views/permalink-manager-uri-editor-tax.php:99
180
- msgid "Edit"
181
- msgstr ""
 
182
 
183
- #: includes/views/permalink-manager-uri-editor-post.php:112
184
- #: includes/views/permalink-manager-uri-editor-tax.php:100
185
- #: includes/views/permalink-manager-uri-editor-tax.php:100
186
- msgid "View"
187
  msgstr ""
188
 
189
- #: includes/views/permalink-manager-uri-editor-post.php:140
190
- #: includes/views/permalink-manager-uri-editor-tax.php:137
191
- msgid "Update all the URIs below"
192
  msgstr ""
193
 
194
- #: includes/views/permalink-manager-uri-editor-post.php:141
195
- #: includes/views/permalink-manager-uri-editor-tax.php:138
196
- msgid "Update all the URIs above"
197
  msgstr ""
198
 
199
- #: includes/views/permalink-manager-uri-editor-post.php:159
200
- msgid "All dates"
 
201
  msgstr ""
202
 
203
- #: includes/views/permalink-manager-uri-editor-post.php:168
204
- msgid "Filter"
 
205
  msgstr ""
206
 
207
- #: includes/views/permalink-manager-debug.php:14
208
- msgid "Debug"
209
  msgstr ""
210
 
211
- #: includes/views/permalink-manager-debug.php:26
212
- msgid "Debug data"
213
  msgstr ""
214
 
215
- #: includes/views/permalink-manager-debug.php:30
216
- msgid "List of the URIs generated by this plugin."
 
 
 
217
  msgstr ""
218
 
219
- #: includes/views/permalink-manager-debug.php:31
220
- msgid "Array with URIs"
221
  msgstr ""
222
 
223
- #: includes/views/permalink-manager-debug.php:37
224
- msgid "List of custom redirects set-up by this plugin."
 
 
225
  msgstr ""
226
 
227
- #: includes/views/permalink-manager-debug.php:38
228
- msgid "Array with redirects"
229
  msgstr ""
230
 
231
- #: includes/views/permalink-manager-debug.php:44
232
- msgid "List of the permastructures."
 
 
233
  msgstr ""
234
 
235
- #: includes/views/permalink-manager-debug.php:45
236
- msgid "Array with permastructures"
237
  msgstr ""
238
 
239
- #: includes/views/permalink-manager-debug.php:51
240
- msgid "Currently used plugin settings."
241
  msgstr ""
242
 
243
- #: includes/views/permalink-manager-debug.php:52
244
- msgid "Array with settings used in this plugin."
245
  msgstr ""
246
 
247
- #: includes/views/permalink-manager-tools.php:15
248
- msgid "Tools"
 
 
 
 
249
  msgstr ""
250
 
251
- #: includes/views/permalink-manager-tools.php:18
252
- msgid "Permalink Duplicates"
253
  msgstr ""
254
 
255
- #: includes/views/permalink-manager-tools.php:22
256
- msgid "Find & Replace"
257
  msgstr ""
258
 
259
- #: includes/views/permalink-manager-tools.php:26
260
- msgid "Regenerate/Reset"
261
  msgstr ""
262
 
263
- #: includes/views/permalink-manager-tools.php:30
264
- msgid "Stop Words"
 
 
 
265
  msgstr ""
266
 
267
- #: includes/views/permalink-manager-tools.php:34
268
- #: includes/views/permalink-manager-pro-addons.php:219
269
- msgid "Custom Permalinks"
 
 
 
270
  msgstr ""
271
 
272
- #: includes/views/permalink-manager-tools.php:44
273
  msgid ""
274
- "<strong>A MySQL backup is highly recommended before using \"<em>Native "
275
- "slugs</em>\" mode!</strong>"
276
  msgstr ""
277
 
278
- #: includes/views/permalink-manager-tools.php:54
279
- msgid "List of duplicated permalinks"
280
  msgstr ""
281
 
282
- #: includes/views/permalink-manager-tools.php:55
283
- msgid "Remove all broken URIs"
 
 
 
 
284
  msgstr ""
285
 
286
- #: includes/views/permalink-manager-tools.php:70
287
- msgid "Extra Redirect"
288
  msgstr ""
289
 
290
- #: includes/views/permalink-manager-tools.php:70
291
- #: includes/core/permalink-manager-uri-functions-tax.php:476
292
- msgid "Custom URI"
 
 
293
  msgstr ""
294
 
295
- #: includes/views/permalink-manager-tools.php:81
296
- msgid "Edit term"
297
  msgstr ""
298
 
299
- #: includes/views/permalink-manager-tools.php:84
300
- msgid "(Removed term)"
301
  msgstr ""
302
 
303
- #: includes/views/permalink-manager-tools.php:85
304
- #: includes/views/permalink-manager-tools.php:98
305
- msgid "Remove broken URI"
306
  msgstr ""
307
 
308
- #: includes/views/permalink-manager-tools.php:94
309
- msgid "Edit post"
310
  msgstr ""
311
 
312
- #: includes/views/permalink-manager-tools.php:97
313
- msgid "(Removed post)"
314
  msgstr ""
315
 
316
- #: includes/views/permalink-manager-tools.php:120
317
- msgid "Congratulations! No duplicated URIs or Redirects found!"
318
  msgstr ""
319
 
320
- #: includes/views/permalink-manager-tools.php:134
321
- msgid "Find ..."
322
  msgstr ""
323
 
324
- #: includes/views/permalink-manager-tools.php:140
325
- msgid "Replace with ..."
326
  msgstr ""
327
 
328
- #: includes/views/permalink-manager-tools.php:146
329
- #: includes/views/permalink-manager-tools.php:216
330
- msgid "Mode"
331
  msgstr ""
332
 
333
- #: includes/views/permalink-manager-tools.php:149
334
- #: includes/views/permalink-manager-tools.php:219
335
- msgid "Custom URIs"
336
  msgstr ""
337
 
338
- #: includes/views/permalink-manager-tools.php:149
339
- msgid "Native slugs"
340
  msgstr ""
341
 
342
- #: includes/views/permalink-manager-tools.php:152
343
- #: includes/views/permalink-manager-tools.php:222
344
- msgid "Select content type"
345
  msgstr ""
346
 
347
- #: includes/views/permalink-manager-tools.php:158
348
- #: includes/views/permalink-manager-tools.php:228
349
- #: includes/views/permalink-manager-permastructs.php:38
350
- msgid "Post types"
351
  msgstr ""
352
 
353
- #: includes/views/permalink-manager-tools.php:158
354
- #: includes/views/permalink-manager-tools.php:228
355
- #: includes/views/permalink-manager-permastructs.php:44
356
- msgid "Taxonomies"
357
  msgstr ""
358
 
359
- #: includes/views/permalink-manager-tools.php:161
360
- #: includes/views/permalink-manager-tools.php:231
361
- msgid "Select post types"
362
  msgstr ""
363
 
364
- #: includes/views/permalink-manager-tools.php:170
365
- #: includes/views/permalink-manager-tools.php:240
366
- msgid "Select taxonomies"
367
  msgstr ""
368
 
369
- #: includes/views/permalink-manager-tools.php:181
370
- #: includes/views/permalink-manager-tools.php:251
371
- msgid "Select post statuses"
372
  msgstr ""
373
 
374
- #: includes/views/permalink-manager-tools.php:190
375
- #: includes/views/permalink-manager-tools.php:260
376
- msgid "Select IDs"
377
  msgstr ""
378
 
379
- #: includes/views/permalink-manager-tools.php:194
380
- #: includes/views/permalink-manager-tools.php:264
381
- msgid ""
382
- "To narrow the above filters you can type the post IDs (or ranges) here. Eg. "
383
- "<strong>1-8, 10, 25</strong>."
384
  msgstr ""
385
 
386
- #: includes/views/permalink-manager-tools.php:200
387
- #: includes/views/permalink-manager-tools.php:270
388
- #: includes/views/permalink-manager-permastructs.php:99
389
- msgid "Important notices"
390
  msgstr ""
391
 
392
- #: includes/views/permalink-manager-tools.php:203
393
- msgid "Find and replace"
394
  msgstr ""
395
 
396
- #: includes/views/permalink-manager-tools.php:219
397
- msgid "Restore native slugs"
398
  msgstr ""
399
 
400
- #: includes/views/permalink-manager-tools.php:219
401
- msgid "Restore native permalinks"
402
  msgstr ""
403
 
404
- #: includes/views/permalink-manager-tools.php:273
405
- msgid "Regenerate"
 
 
406
  msgstr ""
407
 
408
- #: includes/views/permalink-manager-uri-editor-tax.php:50
409
- msgid "Term title"
410
  msgstr ""
411
 
412
- #: includes/views/permalink-manager-uri-editor-tax.php:52
413
- msgid "Count"
414
  msgstr ""
415
 
416
- #: includes/views/permalink-manager-settings.php:14
417
- msgid "Settings"
 
418
  msgstr ""
419
 
420
- #: includes/views/permalink-manager-settings.php:33
421
- msgid "General settings"
422
  msgstr ""
423
 
424
- #: includes/views/permalink-manager-settings.php:39
425
- msgid "Auto-update permalinks"
 
426
  msgstr ""
427
 
428
- #: includes/views/permalink-manager-settings.php:41
429
- msgid ""
430
- "If enabled, the custom permalinks will be automatically updated every time "
431
- "the post is saved or updated."
432
  msgstr ""
433
 
434
- #: includes/views/permalink-manager-settings.php:46
435
- msgid "SEO functions"
436
  msgstr ""
437
 
438
- #: includes/views/permalink-manager-settings.php:52
439
- msgid "Canonical redirect"
440
  msgstr ""
441
 
442
- #: includes/views/permalink-manager-settings.php:54
443
- msgid ""
444
- "This function allows Wordpress to correct the URLs used by the visitors."
445
  msgstr ""
446
 
447
- #: includes/views/permalink-manager-settings.php:58
448
- msgid "Auto-create \"Extra Redirects\" for old permalinks"
449
  msgstr ""
450
 
451
- #: includes/views/permalink-manager-settings.php:62
452
- msgid ""
453
- "If enabled, the redirects will be automatially created for old custom "
454
- "permalinks, after posts or terms are updated."
455
  msgstr ""
456
 
457
- #: includes/views/permalink-manager-settings.php:66
458
- msgid "Redirect"
 
 
459
  msgstr ""
460
 
461
- #: includes/views/permalink-manager-settings.php:68
462
- msgid "Disable"
463
  msgstr ""
464
 
465
- #: includes/views/permalink-manager-settings.php:68
466
- msgid "Enable \"301 redirect\""
 
 
467
  msgstr ""
468
 
469
- #: includes/views/permalink-manager-settings.php:68
470
- msgid "Enable \"302 redirect\""
471
- msgstr ""
472
-
473
- #: includes/views/permalink-manager-settings.php:69
474
- msgid ""
475
- "If enabled - the visitors will be redirected from native permalinks to your "
476
- "custom permalinks.<br /><strong>Only native permalinks & extra redirects "
477
- "will be redirected to new custom permalinks</strong>."
478
- msgstr ""
479
-
480
- #: includes/views/permalink-manager-settings.php:73
481
- msgid "Trailing slashes"
482
- msgstr ""
483
-
484
- #: includes/views/permalink-manager-settings.php:75
485
- msgid "Use default settings"
486
- msgstr ""
487
-
488
- #: includes/views/permalink-manager-settings.php:75
489
- msgid "Add trailing slashes"
490
- msgstr ""
491
-
492
- #: includes/views/permalink-manager-settings.php:75
493
- msgid "Add trailing slashes (+ auto-redirect links without them)"
494
- msgstr ""
495
-
496
- #: includes/views/permalink-manager-settings.php:75
497
- msgid "Remove trailing slashes"
498
- msgstr ""
499
-
500
- #: includes/views/permalink-manager-settings.php:75
501
- msgid "Remove trailing slashes (+ auto-redirect links with them)"
502
- msgstr ""
503
-
504
- #: includes/views/permalink-manager-settings.php:76
505
- msgid ""
506
- "This option can be used to alter the native settings and control if trailing "
507
- "slash should be added or removed from the end of posts & terms permalinks."
508
- msgstr ""
509
-
510
- #: includes/views/permalink-manager-settings.php:80
511
- msgid "Force 404 on non-existing pagination pages"
512
- msgstr ""
513
-
514
- #: includes/views/permalink-manager-settings.php:82
515
- msgid ""
516
- "If enabled, the non-existing pagination pages (for single posts) will return "
517
- "404 (\"Not Found\") error.<br /><strong>Please disable it, if you encounter "
518
- "any problems with pagination pages or use custom pagination system.</strong>"
519
- msgstr ""
520
-
521
- #: includes/views/permalink-manager-settings.php:87
522
- msgid "Advanced settings"
523
- msgstr ""
524
-
525
- #: includes/views/permalink-manager-settings.php:93
526
- msgid "Automatically remove broken URIs"
527
- msgstr ""
528
-
529
- #: includes/views/permalink-manager-settings.php:95
530
  #, php-format
531
  msgid ""
532
- "If enabled, the custom URIs assigned to removed posts & terms will be "
533
- "automatically removed.<br />To manually remove the duplicates please go <a "
534
- "href=\"%s\">to this page</a>."
535
- msgstr ""
536
-
537
- #: includes/views/permalink-manager-settings.php:99
538
- msgid "Fix language mismatch"
539
- msgstr ""
540
-
541
- #: includes/views/permalink-manager-settings.php:101
542
- msgid ""
543
- "If enabled, the plugin will load the adjacent translation of post when the "
544
- "custom permalink is detected, but the language code in the URL does not "
545
- "match the language code assigned to the post/term."
546
- msgstr ""
547
-
548
- #: includes/views/permalink-manager-settings.php:105
549
- msgid "Force custom slugs"
550
- msgstr ""
551
-
552
- #: includes/views/permalink-manager-settings.php:107
553
- msgid "No, use native slugs"
554
- msgstr ""
555
-
556
- #: includes/views/permalink-manager-settings.php:107
557
- msgid "Yes, use post/term titles"
558
  msgstr ""
559
 
560
- #: includes/views/permalink-manager-settings.php:107
561
- msgid "Yes, use post/term titles + do not strip special characters: .|-+"
562
  msgstr ""
563
 
564
- #: includes/views/permalink-manager-settings.php:108
 
565
  msgid ""
566
- "If enabled, the slugs in the default custom permalinks will be recreated "
567
- "from the post titles.<br />This may cause permalinks duplicates when the "
568
- "post or term title is used more than once."
569
- msgstr ""
570
-
571
- #: includes/views/permalink-manager-settings.php:112
572
- msgid "Disable Permalink Manager functionalities"
573
  msgstr ""
574
 
575
- #: includes/views/permalink-manager-settings.php:114
576
- msgid ""
577
- "Select the post types & taxonomies where the functionalities of Permalink "
578
- "Manager should be completely disabled."
579
  msgstr ""
580
 
581
- #: includes/views/permalink-manager-settings.php:120
582
- msgid "Save settings"
583
  msgstr ""
584
 
585
- #: includes/views/permalink-manager-permastructs.php:15
586
- msgid "Permastructures"
 
587
  msgstr ""
588
 
589
- #: includes/views/permalink-manager-permastructs.php:29
590
- #, php-format
591
- msgid ""
592
- "All allowed <a href=\"%s\" target=\"_blank\">structure tags</a> are listed "
593
- "below."
594
  msgstr ""
595
 
596
- #: includes/views/permalink-manager-permastructs.php:31
597
- msgid ""
598
- "Please note that some of them can be used only for particular post types "
599
- "permastructures."
600
  msgstr ""
601
 
602
- #: includes/views/permalink-manager-permastructs.php:32
603
- msgid ""
604
- "<h5>Custom fields inside permastructures <small>(Permalink Manager Pro only)"
605
- "</small></h5>"
606
  msgstr ""
607
 
608
- #: includes/views/permalink-manager-permastructs.php:33
609
- msgid ""
610
- "To use the custom fields inside the permalink, please use following tag "
611
- "<code>%__custom_field_key%</code> and replace \"<em>custom_field_key</em>\" "
612
- "with the full name of your custom field key."
613
  msgstr ""
614
 
615
- #: includes/views/permalink-manager-permastructs.php:54
616
- msgid "WooCommerce"
 
 
617
  msgstr ""
618
 
619
- #: includes/views/permalink-manager-permastructs.php:88
620
- msgid "Default permastructure"
 
621
  msgstr ""
622
 
623
- #: includes/views/permalink-manager-permastructs.php:89
624
- msgid "Restore to Default Permastructure"
 
625
  msgstr ""
626
 
627
- #: includes/views/permalink-manager-permastructs.php:100
628
- msgid ""
629
- "This tool <strong>automatically appends the slug to the end of "
630
- "permastructure</strong>, so there is no need to use them within the fields. "
631
- "To prevent the overlapping URLs problem please keep the permastructures "
632
- "unique."
633
  msgstr ""
634
 
635
- #: includes/views/permalink-manager-permastructs.php:101
636
- #, php-format
637
- msgid ""
638
- "The current permastructures settings will be applied <strong>only to the new "
639
- "posts & terms</strong>. To apply the <strong>new permastructures to old "
640
- "posts & terms</strong>, please use \"Regenerate/reset\" tool available <a "
641
- "href=\"%s\">here</a>."
642
  msgstr ""
643
 
644
- #: includes/views/permalink-manager-permastructs.php:103
645
- msgid "Save permastructures"
646
  msgstr ""
647
 
648
  #: includes/views/permalink-manager-pro-addons.php:99
649
  msgid "Support"
650
  msgstr ""
651
 
652
- #: includes/views/permalink-manager-pro-addons.php:122
653
- #, php-format
654
- msgid ""
655
- "Your licence key expired! For more information please go to <a href=\"%s\" "
656
- "target=\"_blank\">this page</a>."
657
- msgstr ""
658
-
659
- #: includes/views/permalink-manager-pro-addons.php:124
660
- msgid "You own a lifetime licence key."
661
- msgstr ""
662
-
663
  #: includes/views/permalink-manager-pro-addons.php:126
664
- #, php-format
665
- msgid ""
666
- "Your licence key is valid until %s. To prolong it please go to <a "
667
- "href=\"%s\" target=\"_blank\">this page</a> for more information."
668
- msgstr ""
669
-
670
- #: includes/views/permalink-manager-pro-addons.php:128
671
- msgid ""
672
- "Please paste the licence key to access all Permalink Manager Pro updates!"
673
- msgstr ""
674
-
675
- #: includes/views/permalink-manager-pro-addons.php:133
676
  msgid "Licence"
677
  msgstr ""
678
 
679
- #: includes/views/permalink-manager-pro-addons.php:138
680
  msgid "Licence key"
681
  msgstr ""
682
 
683
- #: includes/views/permalink-manager-pro-addons.php:139
684
  msgid ""
685
  "The licence key allows you to access all the plugin updates & priority "
686
  "support."
687
  msgstr ""
688
 
689
- #: includes/views/permalink-manager-pro-addons.php:164
 
 
 
 
690
  msgid "-- Use predefined words list --"
691
  msgstr ""
692
 
693
- #: includes/views/permalink-manager-pro-addons.php:167
694
  msgid "Remove all words"
695
  msgstr ""
696
 
697
- #: includes/views/permalink-manager-pro-addons.php:169
698
  msgid "Add the words from the list"
699
  msgstr ""
700
 
701
- #: includes/views/permalink-manager-pro-addons.php:177
702
  msgid "Enable \"stop words\""
703
  msgstr ""
704
 
705
- #: includes/views/permalink-manager-pro-addons.php:183
706
  msgid "\"Stop words\" list"
707
  msgstr ""
708
 
709
- #: includes/views/permalink-manager-pro-addons.php:187
710
  msgid "The words should be comma-separated."
711
  msgstr ""
712
 
713
- #: includes/views/permalink-manager-pro-addons.php:195
714
- #: includes/views/permalink-manager-pro-addons.php:228
715
- msgid "Instructions"
716
- msgstr ""
717
-
718
- #: includes/views/permalink-manager-pro-addons.php:196
719
  msgid ""
720
  "If enabled, all selected \"stop words\" will be automatically removed from "
721
  "default URIs."
722
  msgstr ""
723
 
724
- #: includes/views/permalink-manager-pro-addons.php:197
725
  msgid ""
726
  "Each of the words can be removed and any new words can be added to the list. "
727
  "You can also use a predefined list (available in 21 languages)."
728
  msgstr ""
729
 
730
- #: includes/views/permalink-manager-pro-addons.php:199
731
  msgid "Save"
732
  msgstr ""
733
 
734
- #: includes/views/permalink-manager-pro-addons.php:220
 
 
 
 
 
735
  msgid "Deactivate after import"
736
  msgstr ""
737
 
738
- #: includes/views/permalink-manager-pro-addons.php:223
739
  msgid ""
740
  "If selected, \"Custom Permalinks\" plugin will be deactivated after its "
741
  "custom URIs are imported."
742
  msgstr ""
743
 
744
- #: includes/views/permalink-manager-pro-addons.php:229
745
  msgid ""
746
  "Please note that \"Custom Permalinks\" (if activated) may break the behavior "
747
  "of this plugin."
748
  msgstr ""
749
 
750
- #: includes/views/permalink-manager-pro-addons.php:230
751
  msgid ""
752
  "Therefore, it is recommended to disable \"Custom Permalink\" and import old "
753
  "permalinks before using Permalink Manager Pro."
754
  msgstr ""
755
 
756
- #: includes/views/permalink-manager-pro-addons.php:235
757
  #, php-format
758
  msgid "Import %d URIs"
759
  msgstr ""
760
 
761
- #: includes/views/permalink-manager-pro-addons.php:240
762
  msgid "No custom URIs to import"
763
  msgstr ""
764
 
765
- #: includes/views/permalink-manager-pro-addons.php:253
766
  msgid "Technical support"
767
  msgstr ""
768
 
769
- #: includes/views/permalink-manager-pro-addons.php:254
770
  #, php-format
771
  msgid ""
772
  "To find the answers on frequently asked questions and information about how "
@@ -774,399 +666,529 @@ msgid ""
774
  "Base</strong> using <a target=\"_blank\" href=\"%s\">this link</a>."
775
  msgstr ""
776
 
777
- #: includes/views/permalink-manager-pro-addons.php:255
778
  msgid ""
779
  "If you still did not find the answer to your question, please send us your "
780
  "question or a detailed description of your problem/issue to <a href=\"mailto:"
781
  "support@permalinkmanager.pro\">support@permalinkmanager.pro</a>."
782
  msgstr ""
783
 
784
- #: includes/views/permalink-manager-pro-addons.php:256
785
  msgid ""
786
  "To reduce the response time, please attach your licence key and if possible "
787
  "also: URL address of your website and screenshots explaining the issue."
788
  msgstr ""
789
 
790
- #: includes/views/permalink-manager-pro-addons.php:258
791
  msgid "Suggestions/feedback"
792
  msgstr ""
793
 
794
- #: includes/views/permalink-manager-pro-addons.php:259
795
  msgid ""
796
  "If you would like to suggest a new functionality or leave us feedback, we "
797
  "are open to all new ideas and would be grateful for all your comments!"
798
  msgstr ""
799
 
800
- #: includes/views/permalink-manager-pro-addons.php:260
801
  msgid ""
802
  " Please send your remarks to <a href=\"mailto:contact@permalinkmanager.pro\">"
803
  "contact@permalinkmanager.pro</a>."
804
  msgstr ""
805
 
806
- #: includes/views/permalink-manager-pro-addons.php:275
807
  msgid "Extra redirects (aliases)"
808
  msgstr ""
809
 
810
- #: includes/views/permalink-manager-pro-addons.php:276
811
  msgid ""
812
  "All URIs specified below will redirect the visitors to the custom URI "
813
  "defined above in \"Current URI\" field."
814
  msgstr ""
815
 
816
- #: includes/views/permalink-manager-pro-addons.php:282
817
  msgid "sample/custom-uri"
818
  msgstr ""
819
 
820
- #: includes/views/permalink-manager-pro-addons.php:299
 
 
 
 
821
  #, php-format
822
  msgid ""
823
  "<strong>Please use URIs only!</strong><br />For instance, to set-up a "
824
  "redirect for <code>%s/old-uri</code> please use <code>old-uri</code>."
825
  msgstr ""
826
 
827
- #: includes/views/permalink-manager-pro-addons.php:304
828
- msgid "Add new redirect"
829
- msgstr ""
830
-
831
- #: includes/views/permalink-manager-pro-addons.php:313
832
  msgid "Redirect this page to external URL"
833
  msgstr ""
834
 
835
- #: includes/views/permalink-manager-pro-addons.php:314
836
  msgid ""
837
  "If not empty, the visitors trying to access this page will be redirected to "
838
  "the URL specified below."
839
  msgstr ""
840
 
841
- #: includes/views/permalink-manager-pro-addons.php:318
842
  msgid "http://another-website.com/final-target-url"
843
  msgstr ""
844
 
845
- #: includes/views/permalink-manager-pro-addons.php:322
846
  msgid ""
847
  "<strong>Please use full URLs!</strong><br />For instance, <code>http:"
848
  "//another-website.com/final-target-url</code>."
849
  msgstr ""
850
 
851
- #: includes/core/permalink-manager-pro-functions.php:77
852
- msgid "Arabic"
853
  msgstr ""
854
 
855
- #: includes/core/permalink-manager-pro-functions.php:78
856
- msgid "Chinese"
857
  msgstr ""
858
 
859
- #: includes/core/permalink-manager-pro-functions.php:79
860
- msgid "Danish"
861
  msgstr ""
862
 
863
- #: includes/core/permalink-manager-pro-functions.php:80
864
- msgid "Dutch"
865
  msgstr ""
866
 
867
- #: includes/core/permalink-manager-pro-functions.php:81
868
- msgid "English"
869
  msgstr ""
870
 
871
- #: includes/core/permalink-manager-pro-functions.php:82
872
- msgid "Finnish"
873
  msgstr ""
874
 
875
- #: includes/core/permalink-manager-pro-functions.php:83
876
- msgid "French"
877
  msgstr ""
878
 
879
- #: includes/core/permalink-manager-pro-functions.php:84
880
- msgid "German"
881
  msgstr ""
882
 
883
- #: includes/core/permalink-manager-pro-functions.php:85
884
- msgid "Hebrew"
 
 
885
  msgstr ""
886
 
887
- #: includes/core/permalink-manager-pro-functions.php:86
888
- msgid "Hindi"
889
  msgstr ""
890
 
891
- #: includes/core/permalink-manager-pro-functions.php:87
892
- msgid "Italian"
 
 
893
  msgstr ""
894
 
895
- #: includes/core/permalink-manager-pro-functions.php:88
896
- msgid "Japanese"
897
  msgstr ""
898
 
899
- #: includes/core/permalink-manager-pro-functions.php:89
900
- msgid "Korean"
 
 
 
901
  msgstr ""
902
 
903
- #: includes/core/permalink-manager-pro-functions.php:90
904
- msgid "Norwegian"
905
  msgstr ""
906
 
907
- #: includes/core/permalink-manager-pro-functions.php:91
908
- msgid "Persian"
 
 
909
  msgstr ""
910
 
911
- #: includes/core/permalink-manager-pro-functions.php:92
912
- msgid "Polish"
913
  msgstr ""
914
 
915
- #: includes/core/permalink-manager-pro-functions.php:93
916
- msgid "Portuguese"
917
  msgstr ""
918
 
919
- #: includes/core/permalink-manager-pro-functions.php:94
920
- msgid "Russian"
 
921
  msgstr ""
922
 
923
- #: includes/core/permalink-manager-pro-functions.php:95
924
- msgid "Spanish"
925
  msgstr ""
926
 
927
- #: includes/core/permalink-manager-pro-functions.php:96
928
- msgid "Swedish"
 
 
929
  msgstr ""
930
 
931
- #: includes/core/permalink-manager-pro-functions.php:97
932
- msgid "Turkish"
933
  msgstr ""
934
 
935
- #: includes/core/permalink-manager-pro-functions.php:147
936
- #, php-format
 
 
 
 
 
 
 
 
 
 
 
937
  msgid ""
938
- "Your Permalink Manager Pro licence key expired! For more information please "
939
- "go to <a href=\"%s\" target=\"_blank\">this page</a>."
 
 
 
 
940
  msgstr ""
941
 
942
- #: includes/core/permalink-manager-pro-functions.php:149
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
943
  #, php-format
944
  msgid ""
945
- "Please paste the licence key <a href=\"%s\">here</a> to access all Permalink "
946
- "Manager Pro updates!"
 
947
  msgstr ""
948
 
949
- #: includes/core/permalink-manager-pro-functions.php:325
950
- msgid "Coupon Link"
951
  msgstr ""
952
 
953
- #: includes/core/permalink-manager-pro-functions.php:346
954
- msgid "Coupon URI"
 
 
 
 
 
 
 
955
  msgstr ""
956
 
957
- #: includes/core/permalink-manager-pro-functions.php:347
958
  msgid ""
959
- "The URIs are case-insensitive, eg. <strong>BLACKFRIDAY</strong> and <strong>"
960
- "blackfriday</strong> are equivalent."
961
  msgstr ""
962
 
963
- #: includes/core/permalink-manager-pro-functions.php:358
964
- msgid "Coupon Full URL"
965
  msgstr ""
966
 
967
- #: includes/core/permalink-manager-third-parties.php:250
968
- msgid "Language"
 
 
969
  msgstr ""
970
 
971
- #: includes/core/permalink-manager-third-parties.php:357
972
- msgid "\"Custom Permalinks\" URIs were imported!"
973
  msgstr ""
974
 
975
- #: includes/core/permalink-manager-third-parties.php:360
976
- msgid "No \"Custom Permalinks\" URIs were imported!"
977
  msgstr ""
978
 
979
- #: includes/core/permalink-manager-uri-functions-tax.php:477
980
- msgid "Clear/leave the field empty to use the default permalink."
981
  msgstr ""
982
 
983
- #: includes/core/permalink-manager-uri-functions-tax.php:513
984
- #: includes/core/permalink-manager-uri-functions-post.php:626
985
- #: includes/core/permalink-manager-admin-functions.php:561
986
- #: includes/core/permalink-manager-admin-functions.php:622
987
- msgid "Current URI"
988
  msgstr ""
989
 
990
- #: includes/core/permalink-manager-actions.php:54
991
- #, php-format
992
- msgid "<strong>%d</strong> slug was updated!"
993
- msgid_plural "<strong>%d</strong> slugs were updated!"
994
- msgstr[0] ""
995
- msgstr[1] ""
996
 
997
- #: includes/core/permalink-manager-actions.php:55
998
- #, php-format
999
- msgid "<a %s>Click here</a> to go to the list of updated slugs"
1000
  msgstr ""
1001
 
1002
- #: includes/core/permalink-manager-actions.php:60
1003
- msgid "<strong>No slugs</strong> were updated!"
1004
  msgstr ""
1005
 
1006
- #: includes/core/permalink-manager-actions.php:94
1007
- msgid "The settings are saved!"
 
 
1008
  msgstr ""
1009
 
1010
- #: includes/core/permalink-manager-actions.php:191
1011
- #, php-format
1012
- msgid "%d Custom URIs and %d Custom Redirects were removed!"
1013
  msgstr ""
1014
 
1015
- #: includes/core/permalink-manager-actions.php:193
1016
- msgid "No Custom URIs or Custom Redirects were removed!"
 
 
1017
  msgstr ""
1018
 
1019
- #: includes/core/permalink-manager-actions.php:299
1020
- #, php-format
1021
- msgid "URI \"%s\" was removed successfully!"
1022
  msgstr ""
1023
 
1024
- #: includes/core/permalink-manager-actions.php:308
1025
- msgid "Broken redirects were removed successfully!"
1026
  msgstr ""
1027
 
1028
- #: includes/core/permalink-manager-actions.php:313
1029
- msgid "URI and/or custom redirects does not exist or were already removed!"
1030
  msgstr ""
1031
 
1032
- #: includes/core/permalink-manager-actions.php:327
1033
- msgid "The redirect was removed successfully!"
1034
  msgstr ""
1035
 
1036
- #: includes/core/permalink-manager-actions.php:376
1037
- msgid "Sitemaps were updated!"
1038
  msgstr ""
1039
 
1040
- #. Name of the plugin
1041
- #: includes/core/permalink-manager-admin-functions.php:83
1042
- #: includes/core/permalink-manager-admin-functions.php:557
1043
- #: includes/core/permalink-manager-admin-functions.php:602
1044
- #: includes/core/permalink-manager-admin-functions.php:607
1045
- #: includes/core/permalink-manager-admin-functions.php:608
1046
- msgid "Permalink Manager"
1047
  msgstr ""
1048
 
1049
- #: includes/core/permalink-manager-admin-functions.php:119
1050
- msgid "URI Editor"
1051
  msgstr ""
1052
 
1053
- #: includes/core/permalink-manager-admin-functions.php:198
1054
- msgid "Select all"
1055
  msgstr ""
1056
 
1057
- #: includes/core/permalink-manager-admin-functions.php:199
1058
- msgid "Unselect all"
1059
  msgstr ""
1060
 
1061
- #: includes/core/permalink-manager-admin-functions.php:407
1062
- msgid "Donate"
1063
  msgstr ""
1064
 
1065
- #: includes/core/permalink-manager-admin-functions.php:408
1066
- msgid "by Maciej Bis"
1067
  msgstr ""
1068
 
1069
- #: includes/core/permalink-manager-admin-functions.php:487
1070
- #, php-format
 
 
 
1071
  msgid ""
1072
- "This functionality is available only in <a href=\"%s\" target=\"_blank\">"
1073
- "Permalink Manager Pro</a>."
1074
  msgstr ""
1075
 
1076
- #: includes/core/permalink-manager-admin-functions.php:508
1077
- #: includes/core/permalink-manager-admin-functions.php:534
1078
- msgid "Title"
1079
  msgstr ""
1080
 
1081
- #: includes/core/permalink-manager-admin-functions.php:509
1082
- #: includes/core/permalink-manager-admin-functions.php:535
1083
- msgid "Old URI"
1084
  msgstr ""
1085
 
1086
- #: includes/core/permalink-manager-admin-functions.php:510
1087
- #: includes/core/permalink-manager-admin-functions.php:536
1088
- msgid "New URI"
1089
  msgstr ""
1090
 
1091
- #: includes/core/permalink-manager-admin-functions.php:511
1092
- #: includes/core/permalink-manager-admin-functions.php:537
1093
- msgid "Old Slug"
1094
  msgstr ""
1095
 
1096
- #: includes/core/permalink-manager-admin-functions.php:512
1097
- #: includes/core/permalink-manager-admin-functions.php:538
1098
- msgid "New Slug"
1099
  msgstr ""
1100
 
1101
- #: includes/core/permalink-manager-admin-functions.php:534
1102
- msgid "Show more details"
 
1103
  msgstr ""
1104
 
1105
- #: includes/core/permalink-manager-admin-functions.php:543
1106
- msgid "List of updated items"
1107
  msgstr ""
1108
 
1109
- #: includes/core/permalink-manager-admin-functions.php:587
1110
- #: includes/core/permalink-manager-admin-functions.php:591
1111
- msgid "Yes"
1112
  msgstr ""
1113
 
1114
- #: includes/core/permalink-manager-admin-functions.php:587
1115
- #: includes/core/permalink-manager-admin-functions.php:590
1116
- msgid "No"
1117
  msgstr ""
1118
 
1119
- #: includes/core/permalink-manager-admin-functions.php:589
1120
- #, php-format
1121
- msgid "Use global settings [%s]"
1122
  msgstr ""
1123
 
1124
- #: includes/core/permalink-manager-admin-functions.php:607
1125
- msgid "Close: "
1126
  msgstr ""
1127
 
1128
- #: includes/core/permalink-manager-admin-functions.php:616
1129
- msgid "The custom URI cannot be edited on frontpage."
 
1130
  msgstr ""
1131
 
1132
- #: includes/core/permalink-manager-admin-functions.php:623
1133
- msgid ""
1134
- "The custom URI can be edited only if 'Auto-update the URI' feature is not "
1135
- "enabled."
1136
  msgstr ""
1137
 
1138
- #: includes/core/permalink-manager-admin-functions.php:632
1139
- msgid "Auto-update the URI"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1140
  msgstr ""
1141
 
1142
- #: includes/core/permalink-manager-admin-functions.php:633
 
1143
  msgid ""
1144
- "If enabled, the 'Current URI' field will be automatically changed to "
1145
- "'Default URI' (displayed below) after the post is saved or updated."
1146
  msgstr ""
1147
 
1148
- #: includes/core/permalink-manager-admin-functions.php:641
1149
- msgid "Default URI"
 
1150
  msgstr ""
1151
 
1152
- #: includes/core/permalink-manager-admin-functions.php:642
1153
- msgid "Restore to Default URI"
1154
  msgstr ""
1155
 
1156
- #: includes/core/permalink-manager-admin-functions.php:652
1157
- msgid "Automatic redirect for native URI enabled:"
1158
  msgstr ""
1159
 
1160
- #: includes/core/permalink-manager-admin-functions.php:681
1161
- msgid "Manage redirects"
1162
  msgstr ""
1163
 
1164
- #: includes/core/permalink-manager-admin-functions.php:682
1165
- msgid "[click to open]"
1166
  msgstr ""
1167
 
1168
- #: includes/core/permalink-manager-admin-functions.php:762
1169
- msgid "URI is already in use, please select another one!"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1170
  msgstr ""
1171
 
1172
  #. Name of the plugin
3
  msgstr ""
4
  "Project-Id-Version: PACKAGE VERSION\n"
5
  "Report-Msgid-Bugs-To: \n"
6
+ "POT-Creation-Date: 2019-10-04 10:34+0000\n"
7
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
8
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
9
  "Language-Team: \n"
14
  "Content-Transfer-Encoding: 8bit\n"
15
  "X-Generator: Loco https://localise.biz/"
16
 
17
+ #: permalink-manager.php:198
18
  #, php-format
19
  msgid ""
20
  "Get access to extra features: full taxonomy and WooCommerce support, "
23
  "and save %s using \"%s\" coupon code!</strong> Valid until %s!"
24
  msgstr ""
25
 
26
+ #: includes/core/permalink-manager-third-parties.php:593
27
+ msgid "\"Custom Permalinks\" URIs were imported!"
28
  msgstr ""
29
 
30
+ #: includes/core/permalink-manager-third-parties.php:596
31
+ msgid "No \"Custom Permalinks\" URIs were imported!"
32
  msgstr ""
33
 
34
+ #. Name of the plugin
35
+ #: includes/core/permalink-manager-third-parties.php:855
36
+ #: includes/core/permalink-manager-gutenberg.php:14
37
+ #: includes/core/permalink-manager-admin-functions.php:119
38
+ #: includes/core/permalink-manager-admin-functions.php:119
39
+ #: includes/core/permalink-manager-admin-functions.php:719
40
+ #: includes/core/permalink-manager-admin-functions.php:796
41
+ #: includes/core/permalink-manager-admin-functions.php:801
42
+ #: includes/core/permalink-manager-admin-functions.php:802
43
+ msgid "Permalink Manager"
44
  msgstr ""
45
 
46
+ #: includes/core/permalink-manager-third-parties.php:859
47
+ #: includes/core/permalink-manager-uri-functions-tax.php:475
48
+ #: includes/views/permalink-manager-tools.php:70
49
+ msgid "Custom URI"
 
50
  msgstr ""
51
 
52
+ #: includes/core/permalink-manager-third-parties.php:860
53
+ #, php-format
54
+ msgid ""
55
+ "If empty, a default permalink based on your current <a href=\"%s\" "
56
+ "target=\"_blank\">permastructure settings</a> will be used."
57
  msgstr ""
58
 
59
+ #: includes/core/permalink-manager-uri-functions-tax.php:476
60
+ msgid "Clear/leave the field empty to use the default permalink."
 
 
 
61
  msgstr ""
62
 
63
+ #: includes/core/permalink-manager-uri-functions-tax.php:508
64
+ #: includes/core/permalink-manager-admin-functions.php:723
65
+ #: includes/core/permalink-manager-admin-functions.php:819
66
+ #: includes/core/permalink-manager-uri-functions-post.php:650
67
+ msgid "Current URI"
68
  msgstr ""
69
 
70
+ #: includes/core/permalink-manager-admin-functions.php:159
71
+ msgid "URI Editor"
72
  msgstr ""
73
 
74
+ #: includes/core/permalink-manager-admin-functions.php:160
75
+ #: includes/views/permalink-manager-settings.php:14
76
+ msgid "Settings"
 
77
  msgstr ""
78
 
79
+ #: includes/core/permalink-manager-admin-functions.php:172
80
+ msgid "Documentation"
 
 
 
 
81
  msgstr ""
82
 
83
+ #: includes/core/permalink-manager-admin-functions.php:176
84
+ msgid "Buy Permalink Manager Pro"
85
  msgstr ""
86
 
87
+ #: includes/core/permalink-manager-admin-functions.php:263
88
+ msgid "Select all"
 
 
89
  msgstr ""
90
 
91
+ #: includes/core/permalink-manager-admin-functions.php:264
92
+ msgid "Unselect all"
 
 
93
  msgstr ""
94
 
95
+ #: includes/core/permalink-manager-admin-functions.php:379
96
+ msgid "Permastructure translations"
97
  msgstr ""
98
 
99
+ #: includes/core/permalink-manager-admin-functions.php:380
100
  msgid ""
101
+ "If you would like to translate the permastructures and set-up different "
102
+ "permalink structure per language, please fill in the fields below. Otherwise "
103
+ "the permastructure set for default language (see field above) will be "
104
+ "applied."
105
  msgstr ""
106
 
107
+ #: includes/core/permalink-manager-admin-functions.php:397
108
+ msgid "Default permastructure"
109
  msgstr ""
110
 
111
+ #: includes/core/permalink-manager-admin-functions.php:398
112
+ msgid "Restore default permastructure"
 
 
113
  msgstr ""
114
 
115
+ #: includes/core/permalink-manager-admin-functions.php:404
116
+ msgid "Permastructure settings"
117
  msgstr ""
118
 
119
+ #: includes/core/permalink-manager-admin-functions.php:405
120
+ msgid "Do not automatically append the slug"
 
 
 
121
  msgstr ""
122
 
123
+ #: includes/core/permalink-manager-admin-functions.php:413
124
+ msgid "Show additional settings"
125
  msgstr ""
126
 
127
+ #: includes/core/permalink-manager-admin-functions.php:559
128
+ msgid "Donate"
 
129
  msgstr ""
130
 
131
+ #: includes/core/permalink-manager-admin-functions.php:560
132
+ msgid "by Maciej Bis"
133
  msgstr ""
134
 
135
+ #: includes/core/permalink-manager-admin-functions.php:572
136
+ msgid "Upgrade to PRO"
137
  msgstr ""
138
 
139
+ #: includes/core/permalink-manager-admin-functions.php:639
140
+ #: includes/core/permalink-manager-admin-functions.php:666
141
+ msgid "Title"
142
  msgstr ""
143
 
144
+ #: includes/core/permalink-manager-admin-functions.php:641
145
+ #: includes/core/permalink-manager-admin-functions.php:668
146
+ msgid "Old Slug"
147
  msgstr ""
148
 
149
+ #: includes/core/permalink-manager-admin-functions.php:642
150
+ #: includes/core/permalink-manager-admin-functions.php:669
151
+ msgid "New Slug"
152
  msgstr ""
153
 
154
+ #: includes/core/permalink-manager-admin-functions.php:644
155
+ #: includes/core/permalink-manager-admin-functions.php:671
156
+ msgid "Old URI"
157
  msgstr ""
158
 
159
+ #: includes/core/permalink-manager-admin-functions.php:645
160
+ #: includes/core/permalink-manager-admin-functions.php:672
161
+ msgid "New URI"
162
  msgstr ""
163
 
164
+ #: includes/core/permalink-manager-admin-functions.php:666
165
+ msgid "Show more details"
 
166
  msgstr ""
167
 
168
+ #: includes/core/permalink-manager-admin-functions.php:679
169
+ msgid "List of updated items"
170
  msgstr ""
171
 
172
+ #: includes/core/permalink-manager-admin-functions.php:692
173
+ #, php-format
174
+ msgid "<strong class=\"updated_count\">%d</strong> slug was updated!"
175
+ msgid_plural "<strong class=\"updated_count\">%d</strong> slugs were updated!"
176
+ msgstr[0] ""
177
+ msgstr[1] ""
178
 
179
+ #: includes/core/permalink-manager-admin-functions.php:693
180
+ #, php-format
181
+ msgid "<a %s>Click here</a> to go to the list of updated slugs"
 
182
  msgstr ""
183
 
184
+ #: includes/core/permalink-manager-admin-functions.php:697
185
+ #: includes/core/permalink-manager-actions.php:100
186
+ msgid "<strong>No slugs</strong> were updated!"
187
  msgstr ""
188
 
189
+ #: includes/core/permalink-manager-admin-functions.php:766
190
+ #: includes/core/permalink-manager-admin-functions.php:770
191
+ msgid "Yes"
192
  msgstr ""
193
 
194
+ #: includes/core/permalink-manager-admin-functions.php:766
195
+ #: includes/core/permalink-manager-admin-functions.php:769
196
+ msgid "No"
197
  msgstr ""
198
 
199
+ #: includes/core/permalink-manager-admin-functions.php:768
200
+ #, php-format
201
+ msgid "Use global settings [%s]"
202
  msgstr ""
203
 
204
+ #: includes/core/permalink-manager-admin-functions.php:801
205
+ msgid "Close: "
206
  msgstr ""
207
 
208
+ #: includes/core/permalink-manager-admin-functions.php:813
209
+ msgid "The custom URI cannot be edited on frontpage."
210
  msgstr ""
211
 
212
+ #: includes/core/permalink-manager-admin-functions.php:820
213
+ msgid ""
214
+ "If custom URI is not defined, a default URI will be set (see below). The "
215
+ "custom URI can be edited only if 'Auto-update the URI' feature is not "
216
+ "enabled."
217
  msgstr ""
218
 
219
+ #: includes/core/permalink-manager-admin-functions.php:829
220
+ msgid "Native slug"
221
  msgstr ""
222
 
223
+ #: includes/core/permalink-manager-admin-functions.php:830
224
+ msgid ""
225
+ "The native slug is by default automatically used in native permalinks (when "
226
+ "Permalink Manager is disabled)."
227
  msgstr ""
228
 
229
+ #: includes/core/permalink-manager-admin-functions.php:840
230
+ msgid "Auto-update the URI"
231
  msgstr ""
232
 
233
+ #: includes/core/permalink-manager-admin-functions.php:841
234
+ msgid ""
235
+ "If enabled, the 'Current URI' field will be automatically changed to "
236
+ "'Default URI' (displayed below) after the post is saved or updated."
237
  msgstr ""
238
 
239
+ #: includes/core/permalink-manager-admin-functions.php:849
240
+ msgid "Default URI"
241
  msgstr ""
242
 
243
+ #: includes/core/permalink-manager-admin-functions.php:850
244
+ msgid "Restore Default URI"
245
  msgstr ""
246
 
247
+ #: includes/core/permalink-manager-admin-functions.php:860
248
+ msgid "Automatic redirect for native URI enabled:"
249
  msgstr ""
250
 
251
+ #: includes/core/permalink-manager-admin-functions.php:871
252
+ #, php-format
253
+ msgid ""
254
+ "<span><strong>Need more functionalities and dedicated support?</strong> Buy "
255
+ "Permalink Manager Pro and apply <a href=\"https://permalinkmanager.pro/buy-"
256
+ "permalink-manager-pro/\">PMLITE coupon code</a> to get 10% off.</a></span>"
257
  msgstr ""
258
 
259
+ #: includes/core/permalink-manager-admin-functions.php:882
260
+ msgid "Save permalink"
261
  msgstr ""
262
 
263
+ #: includes/core/permalink-manager-admin-functions.php:909
264
+ msgid "Manage redirects"
265
  msgstr ""
266
 
267
+ #: includes/core/permalink-manager-admin-functions.php:1001
268
+ msgid "URI is already in use, please select another one!"
269
  msgstr ""
270
 
271
+ #: includes/core/permalink-manager-admin-functions.php:1050
272
+ #, php-format
273
+ msgid ""
274
+ "This functionality is available only in <a href=\"%s\" target=\"_blank\">"
275
+ "Permalink Manager Pro</a>."
276
  msgstr ""
277
 
278
+ #: includes/core/permalink-manager-pro-functions.php:120
279
+ #: includes/core/permalink-manager-pro-functions.php:146
280
+ #, php-format
281
+ msgid ""
282
+ "Please paste the licence key to access all Permalink Manager Pro updates & "
283
+ "features <a href=\"%s\" target=\"_blank\">on this page</a>."
284
  msgstr ""
285
 
286
+ #: includes/core/permalink-manager-pro-functions.php:125
287
  msgid ""
288
+ "Expiration date could not be downloaded at this moment. Please try again in "
289
+ "a few minutes."
290
  msgstr ""
291
 
292
+ #: includes/core/permalink-manager-pro-functions.php:130
293
+ msgid "Your Permalink Manager Pro licence key is invalid!"
294
  msgstr ""
295
 
296
+ #: includes/core/permalink-manager-pro-functions.php:135
297
+ #, php-format
298
+ msgid ""
299
+ "Your Permalink Manager Pro licence key expired! To restore access to plugin "
300
+ "updates & technical support please go to <a href=\"%s\" target=\"_blank\">"
301
+ "this page</a>."
302
  msgstr ""
303
 
304
+ #: includes/core/permalink-manager-pro-functions.php:140
305
+ msgid "You own a lifetime licence key."
306
  msgstr ""
307
 
308
+ #: includes/core/permalink-manager-pro-functions.php:143
309
+ #, php-format
310
+ msgid ""
311
+ "Your licence key is valid until %s.<br />To prolong it please go to <a "
312
+ "href=\"%s\" target=\"_blank\">this page</a> for more information."
313
  msgstr ""
314
 
315
+ #: includes/core/permalink-manager-pro-functions.php:168
316
+ msgid "Arabic"
317
  msgstr ""
318
 
319
+ #: includes/core/permalink-manager-pro-functions.php:169
320
+ msgid "Chinese"
321
  msgstr ""
322
 
323
+ #: includes/core/permalink-manager-pro-functions.php:170
324
+ msgid "Danish"
 
325
  msgstr ""
326
 
327
+ #: includes/core/permalink-manager-pro-functions.php:171
328
+ msgid "Dutch"
329
  msgstr ""
330
 
331
+ #: includes/core/permalink-manager-pro-functions.php:172
332
+ msgid "English"
333
  msgstr ""
334
 
335
+ #: includes/core/permalink-manager-pro-functions.php:173
336
+ msgid "Finnish"
337
  msgstr ""
338
 
339
+ #: includes/core/permalink-manager-pro-functions.php:174
340
+ msgid "French"
341
  msgstr ""
342
 
343
+ #: includes/core/permalink-manager-pro-functions.php:175
344
+ msgid "German"
345
  msgstr ""
346
 
347
+ #: includes/core/permalink-manager-pro-functions.php:176
348
+ msgid "Hebrew"
 
349
  msgstr ""
350
 
351
+ #: includes/core/permalink-manager-pro-functions.php:177
352
+ msgid "Hindi"
 
353
  msgstr ""
354
 
355
+ #: includes/core/permalink-manager-pro-functions.php:178
356
+ msgid "Italian"
357
  msgstr ""
358
 
359
+ #: includes/core/permalink-manager-pro-functions.php:179
360
+ msgid "Japanese"
 
361
  msgstr ""
362
 
363
+ #: includes/core/permalink-manager-pro-functions.php:180
364
+ msgid "Korean"
 
 
365
  msgstr ""
366
 
367
+ #: includes/core/permalink-manager-pro-functions.php:181
368
+ msgid "Norwegian"
 
 
369
  msgstr ""
370
 
371
+ #: includes/core/permalink-manager-pro-functions.php:182
372
+ msgid "Persian"
 
373
  msgstr ""
374
 
375
+ #: includes/core/permalink-manager-pro-functions.php:183
376
+ msgid "Polish"
 
377
  msgstr ""
378
 
379
+ #: includes/core/permalink-manager-pro-functions.php:184
380
+ msgid "Portuguese"
 
381
  msgstr ""
382
 
383
+ #: includes/core/permalink-manager-pro-functions.php:185
384
+ msgid "Russian"
 
385
  msgstr ""
386
 
387
+ #: includes/core/permalink-manager-pro-functions.php:186
388
+ msgid "Spanish"
 
 
 
389
  msgstr ""
390
 
391
+ #: includes/core/permalink-manager-pro-functions.php:187
392
+ msgid "Swedish"
 
 
393
  msgstr ""
394
 
395
+ #: includes/core/permalink-manager-pro-functions.php:188
396
+ msgid "Turkish"
397
  msgstr ""
398
 
399
+ #: includes/core/permalink-manager-pro-functions.php:470
400
+ msgid "Coupon Link"
401
  msgstr ""
402
 
403
+ #: includes/core/permalink-manager-pro-functions.php:491
404
+ msgid "Coupon URI"
405
  msgstr ""
406
 
407
+ #: includes/core/permalink-manager-pro-functions.php:492
408
+ msgid ""
409
+ "The URIs are case-insensitive, eg. <strong>BLACKFRIDAY</strong> and <strong>"
410
+ "blackfriday</strong> are equivalent."
411
  msgstr ""
412
 
413
+ #: includes/core/permalink-manager-pro-functions.php:503
414
+ msgid "Coupon Full URL"
415
  msgstr ""
416
 
417
+ #: includes/core/permalink-manager-actions.php:90
418
+ msgid "The settings are saved!"
419
  msgstr ""
420
 
421
+ #: includes/core/permalink-manager-actions.php:355
422
+ #, php-format
423
+ msgid "%d Custom URIs and %d Custom Redirects were removed!"
424
  msgstr ""
425
 
426
+ #: includes/core/permalink-manager-actions.php:357
427
+ msgid "No Custom URIs or Custom Redirects were removed!"
428
  msgstr ""
429
 
430
+ #: includes/core/permalink-manager-actions.php:497
431
+ #, php-format
432
+ msgid "URI \"%s\" was removed successfully!"
433
  msgstr ""
434
 
435
+ #: includes/core/permalink-manager-actions.php:506
436
+ msgid "Broken redirects were removed successfully!"
 
 
437
  msgstr ""
438
 
439
+ #: includes/core/permalink-manager-actions.php:511
440
+ msgid "URI and/or custom redirects does not exist or were already removed!"
441
  msgstr ""
442
 
443
+ #: includes/core/permalink-manager-actions.php:525
444
+ msgid "The redirect was removed successfully!"
445
  msgstr ""
446
 
447
+ #: includes/core/permalink-manager-actions.php:560
448
+ msgid "Sitemaps were updated!"
 
449
  msgstr ""
450
 
451
+ #: includes/views/permalink-manager-permastructs.php:15
452
+ msgid "Permastructures"
453
  msgstr ""
454
 
455
+ #: includes/views/permalink-manager-permastructs.php:31
456
+ #: includes/views/permalink-manager-tools.php:162
457
+ #: includes/views/permalink-manager-tools.php:239
458
+ msgid "Post types"
459
  msgstr ""
460
 
461
+ #: includes/views/permalink-manager-permastructs.php:36
462
+ #: includes/views/permalink-manager-tools.php:163
463
+ #: includes/views/permalink-manager-tools.php:240
464
+ msgid "Taxonomies"
465
  msgstr ""
466
 
467
+ #: includes/views/permalink-manager-permastructs.php:46
468
+ msgid "WooCommerce"
469
  msgstr ""
470
 
471
+ #: includes/views/permalink-manager-permastructs.php:74
472
+ #: includes/views/permalink-manager-pro-addons.php:189
473
+ #: includes/views/permalink-manager-pro-addons.php:222
474
+ msgid "Instructions"
475
  msgstr ""
476
 
477
+ #: includes/views/permalink-manager-permastructs.php:75
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
478
  #, php-format
479
  msgid ""
480
+ "The current permastructures settings will be applied <strong>only to the new "
481
+ "posts & terms</strong>. To apply the <strong>new permastructures to existing "
482
+ "posts and terms</strong>, please regenerate the custom permalinks <a "
483
+ "href=\"%s\">here</a>."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
484
  msgstr ""
485
 
486
+ #: includes/views/permalink-manager-permastructs.php:77
487
+ msgid "Permastructure tags"
488
  msgstr ""
489
 
490
+ #: includes/views/permalink-manager-permastructs.php:78
491
+ #, php-format
492
  msgid ""
493
+ "All allowed <a href=\"%s\" target=\"_blank\">permastructure tags</a> are "
494
+ "listed below. Please note that some of them can be used only for particular "
495
+ "post types or taxonomies."
 
 
 
 
496
  msgstr ""
497
 
498
+ #: includes/views/permalink-manager-permastructs.php:81
499
+ msgid "Save permastructures"
 
 
500
  msgstr ""
501
 
502
+ #: includes/views/permalink-manager-uri-editor-post.php:55
503
+ msgid "Post title"
504
  msgstr ""
505
 
506
+ #: includes/views/permalink-manager-uri-editor-post.php:56
507
+ #: includes/views/permalink-manager-uri-editor-tax.php:52
508
+ msgid "Full URI & Permalink"
509
  msgstr ""
510
 
511
+ #: includes/views/permalink-manager-uri-editor-post.php:89
512
+ msgid "Inherit (Attachment)"
 
 
 
513
  msgstr ""
514
 
515
+ #: includes/views/permalink-manager-uri-editor-post.php:106
516
+ #: includes/views/permalink-manager-uri-editor-tax.php:95
517
+ msgid "Slug"
 
518
  msgstr ""
519
 
520
+ #: includes/views/permalink-manager-uri-editor-post.php:107
521
+ msgid "Post status"
 
 
522
  msgstr ""
523
 
524
+ #: includes/views/permalink-manager-uri-editor-post.php:112
525
+ #: includes/views/permalink-manager-uri-editor-tax.php:100
526
+ #: includes/views/permalink-manager-uri-editor-tax.php:100
527
+ msgid "Edit"
 
528
  msgstr ""
529
 
530
+ #: includes/views/permalink-manager-uri-editor-post.php:113
531
+ #: includes/views/permalink-manager-uri-editor-tax.php:101
532
+ #: includes/views/permalink-manager-uri-editor-tax.php:101
533
+ msgid "View"
534
  msgstr ""
535
 
536
+ #: includes/views/permalink-manager-uri-editor-post.php:141
537
+ #: includes/views/permalink-manager-uri-editor-tax.php:138
538
+ msgid "Save all the URIs below"
539
  msgstr ""
540
 
541
+ #: includes/views/permalink-manager-uri-editor-post.php:142
542
+ #: includes/views/permalink-manager-uri-editor-tax.php:139
543
+ msgid "Save all the URIs above"
544
  msgstr ""
545
 
546
+ #: includes/views/permalink-manager-uri-editor-post.php:150
547
+ #: includes/views/permalink-manager-uri-editor-tax.php:147
548
+ msgid "Search"
 
 
 
549
  msgstr ""
550
 
551
+ #: includes/views/permalink-manager-uri-editor-post.php:166
552
+ msgid "All dates"
 
 
 
 
 
553
  msgstr ""
554
 
555
+ #: includes/views/permalink-manager-uri-editor-post.php:175
556
+ msgid "Filter"
557
  msgstr ""
558
 
559
  #: includes/views/permalink-manager-pro-addons.php:99
560
  msgid "Support"
561
  msgstr ""
562
 
 
 
 
 
 
 
 
 
 
 
 
563
  #: includes/views/permalink-manager-pro-addons.php:126
 
 
 
 
 
 
 
 
 
 
 
 
564
  msgid "Licence"
565
  msgstr ""
566
 
567
+ #: includes/views/permalink-manager-pro-addons.php:132
568
  msgid "Licence key"
569
  msgstr ""
570
 
571
+ #: includes/views/permalink-manager-pro-addons.php:133
572
  msgid ""
573
  "The licence key allows you to access all the plugin updates & priority "
574
  "support."
575
  msgstr ""
576
 
577
+ #: includes/views/permalink-manager-pro-addons.php:134
578
+ msgid "Check the expiration date."
579
+ msgstr ""
580
+
581
+ #: includes/views/permalink-manager-pro-addons.php:158
582
  msgid "-- Use predefined words list --"
583
  msgstr ""
584
 
585
+ #: includes/views/permalink-manager-pro-addons.php:161
586
  msgid "Remove all words"
587
  msgstr ""
588
 
589
+ #: includes/views/permalink-manager-pro-addons.php:163
590
  msgid "Add the words from the list"
591
  msgstr ""
592
 
593
+ #: includes/views/permalink-manager-pro-addons.php:171
594
  msgid "Enable \"stop words\""
595
  msgstr ""
596
 
597
+ #: includes/views/permalink-manager-pro-addons.php:177
598
  msgid "\"Stop words\" list"
599
  msgstr ""
600
 
601
+ #: includes/views/permalink-manager-pro-addons.php:181
602
  msgid "The words should be comma-separated."
603
  msgstr ""
604
 
605
+ #: includes/views/permalink-manager-pro-addons.php:190
 
 
 
 
 
606
  msgid ""
607
  "If enabled, all selected \"stop words\" will be automatically removed from "
608
  "default URIs."
609
  msgstr ""
610
 
611
+ #: includes/views/permalink-manager-pro-addons.php:191
612
  msgid ""
613
  "Each of the words can be removed and any new words can be added to the list. "
614
  "You can also use a predefined list (available in 21 languages)."
615
  msgstr ""
616
 
617
+ #: includes/views/permalink-manager-pro-addons.php:193
618
  msgid "Save"
619
  msgstr ""
620
 
621
+ #: includes/views/permalink-manager-pro-addons.php:213
622
+ #: includes/views/permalink-manager-tools.php:34
623
+ msgid "Custom Permalinks"
624
+ msgstr ""
625
+
626
+ #: includes/views/permalink-manager-pro-addons.php:214
627
  msgid "Deactivate after import"
628
  msgstr ""
629
 
630
+ #: includes/views/permalink-manager-pro-addons.php:217
631
  msgid ""
632
  "If selected, \"Custom Permalinks\" plugin will be deactivated after its "
633
  "custom URIs are imported."
634
  msgstr ""
635
 
636
+ #: includes/views/permalink-manager-pro-addons.php:223
637
  msgid ""
638
  "Please note that \"Custom Permalinks\" (if activated) may break the behavior "
639
  "of this plugin."
640
  msgstr ""
641
 
642
+ #: includes/views/permalink-manager-pro-addons.php:224
643
  msgid ""
644
  "Therefore, it is recommended to disable \"Custom Permalink\" and import old "
645
  "permalinks before using Permalink Manager Pro."
646
  msgstr ""
647
 
648
+ #: includes/views/permalink-manager-pro-addons.php:229
649
  #, php-format
650
  msgid "Import %d URIs"
651
  msgstr ""
652
 
653
+ #: includes/views/permalink-manager-pro-addons.php:234
654
  msgid "No custom URIs to import"
655
  msgstr ""
656
 
657
+ #: includes/views/permalink-manager-pro-addons.php:247
658
  msgid "Technical support"
659
  msgstr ""
660
 
661
+ #: includes/views/permalink-manager-pro-addons.php:248
662
  #, php-format
663
  msgid ""
664
  "To find the answers on frequently asked questions and information about how "
666
  "Base</strong> using <a target=\"_blank\" href=\"%s\">this link</a>."
667
  msgstr ""
668
 
669
+ #: includes/views/permalink-manager-pro-addons.php:249
670
  msgid ""
671
  "If you still did not find the answer to your question, please send us your "
672
  "question or a detailed description of your problem/issue to <a href=\"mailto:"
673
  "support@permalinkmanager.pro\">support@permalinkmanager.pro</a>."
674
  msgstr ""
675
 
676
+ #: includes/views/permalink-manager-pro-addons.php:250
677
  msgid ""
678
  "To reduce the response time, please attach your licence key and if possible "
679
  "also: URL address of your website and screenshots explaining the issue."
680
  msgstr ""
681
 
682
+ #: includes/views/permalink-manager-pro-addons.php:252
683
  msgid "Suggestions/feedback"
684
  msgstr ""
685
 
686
+ #: includes/views/permalink-manager-pro-addons.php:253
687
  msgid ""
688
  "If you would like to suggest a new functionality or leave us feedback, we "
689
  "are open to all new ideas and would be grateful for all your comments!"
690
  msgstr ""
691
 
692
+ #: includes/views/permalink-manager-pro-addons.php:254
693
  msgid ""
694
  " Please send your remarks to <a href=\"mailto:contact@permalinkmanager.pro\">"
695
  "contact@permalinkmanager.pro</a>."
696
  msgstr ""
697
 
698
+ #: includes/views/permalink-manager-pro-addons.php:269
699
  msgid "Extra redirects (aliases)"
700
  msgstr ""
701
 
702
+ #: includes/views/permalink-manager-pro-addons.php:270
703
  msgid ""
704
  "All URIs specified below will redirect the visitors to the custom URI "
705
  "defined above in \"Current URI\" field."
706
  msgstr ""
707
 
708
+ #: includes/views/permalink-manager-pro-addons.php:276
709
  msgid "sample/custom-uri"
710
  msgstr ""
711
 
712
+ #: includes/views/permalink-manager-pro-addons.php:293
713
+ msgid "Add new redirect"
714
+ msgstr ""
715
+
716
+ #: includes/views/permalink-manager-pro-addons.php:298
717
  #, php-format
718
  msgid ""
719
  "<strong>Please use URIs only!</strong><br />For instance, to set-up a "
720
  "redirect for <code>%s/old-uri</code> please use <code>old-uri</code>."
721
  msgstr ""
722
 
723
+ #: includes/views/permalink-manager-pro-addons.php:307
 
 
 
 
724
  msgid "Redirect this page to external URL"
725
  msgstr ""
726
 
727
+ #: includes/views/permalink-manager-pro-addons.php:308
728
  msgid ""
729
  "If not empty, the visitors trying to access this page will be redirected to "
730
  "the URL specified below."
731
  msgstr ""
732
 
733
+ #: includes/views/permalink-manager-pro-addons.php:312
734
  msgid "http://another-website.com/final-target-url"
735
  msgstr ""
736
 
737
+ #: includes/views/permalink-manager-pro-addons.php:316
738
  msgid ""
739
  "<strong>Please use full URLs!</strong><br />For instance, <code>http:"
740
  "//another-website.com/final-target-url</code>."
741
  msgstr ""
742
 
743
+ #: includes/views/permalink-manager-uri-editor.php:28
744
+ msgid "URI editor"
745
  msgstr ""
746
 
747
+ #: includes/views/permalink-manager-uri-editor.php:83
748
+ msgid "Apply"
749
  msgstr ""
750
 
751
+ #: includes/views/permalink-manager-uri-editor.php:89
752
+ msgid "Per page"
753
  msgstr ""
754
 
755
+ #: includes/views/permalink-manager-uri-editor.php:94
756
+ msgid "Post statuses"
757
  msgstr ""
758
 
759
+ #: includes/views/permalink-manager-uri-editor-tax.php:51
760
+ msgid "Term title"
761
  msgstr ""
762
 
763
+ #: includes/views/permalink-manager-uri-editor-tax.php:53
764
+ msgid "Count"
765
  msgstr ""
766
 
767
+ #: includes/views/permalink-manager-settings.php:33
768
+ msgid "General settings"
769
  msgstr ""
770
 
771
+ #: includes/views/permalink-manager-settings.php:39
772
+ msgid "Auto-update permalinks"
773
  msgstr ""
774
 
775
+ #: includes/views/permalink-manager-settings.php:41
776
+ msgid ""
777
+ "If enabled, the custom permalinks will be automatically updated every time "
778
+ "the post is saved or updated."
779
  msgstr ""
780
 
781
+ #: includes/views/permalink-manager-settings.php:45
782
+ msgid "Show \"Native slug\" field"
783
  msgstr ""
784
 
785
+ #: includes/views/permalink-manager-settings.php:47
786
+ msgid ""
787
+ "If enabled, it would be possible to edit the native slug via URI Editor on "
788
+ "single post/term edit page."
789
  msgstr ""
790
 
791
+ #: includes/views/permalink-manager-settings.php:51
792
+ msgid "Force 404 on non-existing pagination pages"
793
  msgstr ""
794
 
795
+ #: includes/views/permalink-manager-settings.php:53
796
+ msgid ""
797
+ "If enabled, the non-existing pagination pages (for single posts) will return "
798
+ "404 (\"Not Found\") error.<br /><strong>Please disable it, if you encounter "
799
+ "any problems with pagination pages or use custom pagination system.</strong>"
800
  msgstr ""
801
 
802
+ #: includes/views/permalink-manager-settings.php:57
803
+ msgid "Force HTTPS in URLs"
804
  msgstr ""
805
 
806
+ #: includes/views/permalink-manager-settings.php:59
807
+ msgid ""
808
+ "<strong>Please disable it, if you encounter any redirect loop issues."
809
+ "</strong>"
810
  msgstr ""
811
 
812
+ #: includes/views/permalink-manager-settings.php:64
813
+ msgid "SEO functions"
814
  msgstr ""
815
 
816
+ #: includes/views/permalink-manager-settings.php:70
817
+ msgid "Canonical redirect"
818
  msgstr ""
819
 
820
+ #: includes/views/permalink-manager-settings.php:72
821
+ msgid ""
822
+ "This function allows Wordpress to correct the URLs used by the visitors."
823
  msgstr ""
824
 
825
+ #: includes/views/permalink-manager-settings.php:76
826
+ msgid "Auto-create \"Extra Redirects\" for old version of permalinks"
827
  msgstr ""
828
 
829
+ #: includes/views/permalink-manager-settings.php:80
830
+ msgid ""
831
+ "If enabled, the redirects will be automatially created for old custom "
832
+ "permalinks, after posts or terms URLs are changed."
833
  msgstr ""
834
 
835
+ #: includes/views/permalink-manager-settings.php:84
836
+ msgid "Redirect"
837
  msgstr ""
838
 
839
+ #: includes/views/permalink-manager-settings.php:86
840
+ msgid "Disable"
841
+ msgstr ""
842
+
843
+ #: includes/views/permalink-manager-settings.php:86
844
+ msgid "Enable \"301 redirect\""
845
+ msgstr ""
846
+
847
+ #: includes/views/permalink-manager-settings.php:86
848
+ msgid "Enable \"302 redirect\""
849
+ msgstr ""
850
+
851
+ #: includes/views/permalink-manager-settings.php:87
852
  msgid ""
853
+ "If enabled - the visitors will be redirected from native permalinks to your "
854
+ "custom permalinks."
855
+ msgstr ""
856
+
857
+ #: includes/views/permalink-manager-settings.php:91
858
+ msgid "Trailing slashes"
859
  msgstr ""
860
 
861
+ #: includes/views/permalink-manager-settings.php:93
862
+ msgid "Use default settings"
863
+ msgstr ""
864
+
865
+ #: includes/views/permalink-manager-settings.php:93
866
+ msgid "Add trailing slashes"
867
+ msgstr ""
868
+
869
+ #: includes/views/permalink-manager-settings.php:93
870
+ msgid "Add trailing slashes (+ auto-redirect links without them)"
871
+ msgstr ""
872
+
873
+ #: includes/views/permalink-manager-settings.php:93
874
+ msgid "Remove trailing slashes"
875
+ msgstr ""
876
+
877
+ #: includes/views/permalink-manager-settings.php:93
878
+ msgid "Remove trailing slashes (+ auto-redirect links with them)"
879
+ msgstr ""
880
+
881
+ #: includes/views/permalink-manager-settings.php:94
882
+ msgid ""
883
+ "This option can be used to alter the native settings and control if trailing "
884
+ "slash should be added or removed from the end of posts & terms permalinks."
885
+ msgstr ""
886
+
887
+ #: includes/views/permalink-manager-settings.php:99
888
+ msgid "Advanced settings"
889
+ msgstr ""
890
+
891
+ #: includes/views/permalink-manager-settings.php:105
892
+ msgid "Automatically remove broken URIs"
893
+ msgstr ""
894
+
895
+ #: includes/views/permalink-manager-settings.php:107
896
  #, php-format
897
  msgid ""
898
+ "If enabled, the custom URIs assigned to removed posts & terms will be "
899
+ "automatically removed.<br />To manually remove the duplicates please go <a "
900
+ "href=\"%s\">to this page</a>."
901
  msgstr ""
902
 
903
+ #: includes/views/permalink-manager-settings.php:111
904
+ msgid "Fix language mismatch"
905
  msgstr ""
906
 
907
+ #: includes/views/permalink-manager-settings.php:113
908
+ msgid ""
909
+ "If enabled, the plugin will load the adjacent translation of post when the "
910
+ "custom permalink is detected, but the language code in the URL does not "
911
+ "match the language code assigned to the post/term."
912
+ msgstr ""
913
+
914
+ #: includes/views/permalink-manager-settings.php:117
915
+ msgid "Disable support for WP All Import"
916
  msgstr ""
917
 
918
+ #: includes/views/permalink-manager-settings.php:119
919
  msgid ""
920
+ "If checked, the custom URIs will not be assigned to the posts imported by Wp "
921
+ "All Import Pro plugin."
922
  msgstr ""
923
 
924
+ #: includes/views/permalink-manager-settings.php:123
925
+ msgid "Yoast SEO breadcrumbs"
926
  msgstr ""
927
 
928
+ #: includes/views/permalink-manager-settings.php:125
929
+ msgid ""
930
+ "If checked, the Yoast SEO breadcrumbs will be filtered by Permalink Manager "
931
+ "to mimic the current URL structure."
932
  msgstr ""
933
 
934
+ #: includes/views/permalink-manager-settings.php:129
935
+ msgid "Use actual post/term titles (Force custom slugs)"
936
  msgstr ""
937
 
938
+ #: includes/views/permalink-manager-settings.php:131
939
+ msgid "No, use native slugs"
940
  msgstr ""
941
 
942
+ #: includes/views/permalink-manager-settings.php:131
943
+ msgid "Yes, use post/term titles"
944
  msgstr ""
945
 
946
+ #: includes/views/permalink-manager-settings.php:132
947
+ msgid ""
948
+ "If enabled, the slugs in the default custom permalinks will be recreated "
949
+ "from the post titles.<br />This may cause permalinks duplicates when the "
950
+ "post or term title is used more than once."
951
  msgstr ""
952
 
953
+ #: includes/views/permalink-manager-settings.php:136
954
+ msgid "Strip special characters from slugs"
955
+ msgstr ""
 
 
 
956
 
957
+ #: includes/views/permalink-manager-settings.php:138
958
+ msgid "Yes, use native settings"
 
959
  msgstr ""
960
 
961
+ #: includes/views/permalink-manager-settings.php:138
962
+ msgid "No, keep special characters (.|_+) in the slugs"
963
  msgstr ""
964
 
965
+ #: includes/views/permalink-manager-settings.php:139
966
+ msgid ""
967
+ "If enabled only alphanumeric characters, underscores and dashes will be "
968
+ "allowed for post/term slugs."
969
  msgstr ""
970
 
971
+ #: includes/views/permalink-manager-settings.php:143
972
+ msgid "Exclude content types"
 
973
  msgstr ""
974
 
975
+ #: includes/views/permalink-manager-settings.php:145
976
+ msgid ""
977
+ "Permalink Manager will ignore and not filter the custom permalinks of all "
978
+ "selected above post types & taxonomies."
979
  msgstr ""
980
 
981
+ #: includes/views/permalink-manager-settings.php:149
982
+ msgid "URI Editor role capability"
 
983
  msgstr ""
984
 
985
+ #: includes/views/permalink-manager-settings.php:150
986
+ msgid "Administrator (edit_theme_options)"
987
  msgstr ""
988
 
989
+ #: includes/views/permalink-manager-settings.php:150
990
+ msgid "Editor (publish_pages)"
991
  msgstr ""
992
 
993
+ #: includes/views/permalink-manager-settings.php:150
994
+ msgid "Author (publish_posts)"
995
  msgstr ""
996
 
997
+ #: includes/views/permalink-manager-settings.php:150
998
+ msgid "Contributor (edit_posts)"
999
  msgstr ""
1000
 
1001
+ #: includes/views/permalink-manager-settings.php:151
1002
+ #, php-format
1003
+ msgid ""
1004
+ "Only the users who have selected capability will be able to access URI "
1005
+ "Editor.<br />The list of capabilities <a href=\"%s\" target=\"_blank\">can "
1006
+ "be found here</a>."
 
1007
  msgstr ""
1008
 
1009
+ #: includes/views/permalink-manager-settings.php:157
1010
+ msgid "Save settings"
1011
  msgstr ""
1012
 
1013
+ #: includes/views/permalink-manager-tools.php:15
1014
+ msgid "Tools"
1015
  msgstr ""
1016
 
1017
+ #: includes/views/permalink-manager-tools.php:18
1018
+ msgid "Permalink Duplicates"
1019
  msgstr ""
1020
 
1021
+ #: includes/views/permalink-manager-tools.php:22
1022
+ msgid "Find & Replace"
1023
  msgstr ""
1024
 
1025
+ #: includes/views/permalink-manager-tools.php:26
1026
+ msgid "Regenerate/Reset"
1027
  msgstr ""
1028
 
1029
+ #: includes/views/permalink-manager-tools.php:30
1030
+ msgid "Stop Words"
1031
+ msgstr ""
1032
+
1033
+ #: includes/views/permalink-manager-tools.php:44
1034
  msgid ""
1035
+ "<strong>A MySQL backup is highly recommended before using \"<em>Native "
1036
+ "slugs</em>\" mode!</strong>"
1037
  msgstr ""
1038
 
1039
+ #: includes/views/permalink-manager-tools.php:54
1040
+ msgid "List of duplicated permalinks"
 
1041
  msgstr ""
1042
 
1043
+ #: includes/views/permalink-manager-tools.php:55
1044
+ msgid "Fix custom permalinks & redirects"
 
1045
  msgstr ""
1046
 
1047
+ #: includes/views/permalink-manager-tools.php:70
1048
+ msgid "Extra Redirect"
 
1049
  msgstr ""
1050
 
1051
+ #: includes/views/permalink-manager-tools.php:81
1052
+ msgid "Edit term"
 
1053
  msgstr ""
1054
 
1055
+ #: includes/views/permalink-manager-tools.php:84
1056
+ msgid "(Removed term)"
 
1057
  msgstr ""
1058
 
1059
+ #: includes/views/permalink-manager-tools.php:85
1060
+ #: includes/views/permalink-manager-tools.php:98
1061
+ msgid "Remove broken URI"
1062
  msgstr ""
1063
 
1064
+ #: includes/views/permalink-manager-tools.php:94
1065
+ msgid "Edit post"
1066
  msgstr ""
1067
 
1068
+ #: includes/views/permalink-manager-tools.php:97
1069
+ msgid "(Removed post)"
 
1070
  msgstr ""
1071
 
1072
+ #: includes/views/permalink-manager-tools.php:120
1073
+ msgid "Congratulations! No duplicated URIs or Redirects found!"
 
1074
  msgstr ""
1075
 
1076
+ #: includes/views/permalink-manager-tools.php:134
1077
+ msgid "Find ..."
 
1078
  msgstr ""
1079
 
1080
+ #: includes/views/permalink-manager-tools.php:140
1081
+ msgid "Replace with ..."
1082
  msgstr ""
1083
 
1084
+ #: includes/views/permalink-manager-tools.php:146
1085
+ #: includes/views/permalink-manager-tools.php:222
1086
+ msgid "Mode"
1087
  msgstr ""
1088
 
1089
+ #: includes/views/permalink-manager-tools.php:150
1090
+ msgid "Custom URIs"
 
 
1091
  msgstr ""
1092
 
1093
+ #: includes/views/permalink-manager-tools.php:151
1094
+ msgid "Native slugs"
1095
+ msgstr ""
1096
+
1097
+ #: includes/views/permalink-manager-tools.php:155
1098
+ #: includes/views/permalink-manager-tools.php:232
1099
+ msgid "Select content type"
1100
+ msgstr ""
1101
+
1102
+ #: includes/views/permalink-manager-tools.php:167
1103
+ #: includes/views/permalink-manager-tools.php:244
1104
+ msgid "Select post types"
1105
+ msgstr ""
1106
+
1107
+ #: includes/views/permalink-manager-tools.php:176
1108
+ #: includes/views/permalink-manager-tools.php:253
1109
+ msgid "Select taxonomies"
1110
+ msgstr ""
1111
+
1112
+ #: includes/views/permalink-manager-tools.php:187
1113
+ #: includes/views/permalink-manager-tools.php:264
1114
+ msgid "Select post statuses"
1115
+ msgstr ""
1116
+
1117
+ #: includes/views/permalink-manager-tools.php:196
1118
+ #: includes/views/permalink-manager-tools.php:273
1119
+ msgid "Select IDs"
1120
  msgstr ""
1121
 
1122
+ #: includes/views/permalink-manager-tools.php:200
1123
+ #: includes/views/permalink-manager-tools.php:277
1124
  msgid ""
1125
+ "To narrow the above filters you can type the post IDs (or ranges) here. Eg. "
1126
+ "<strong>1-8, 10, 25</strong>."
1127
  msgstr ""
1128
 
1129
+ #: includes/views/permalink-manager-tools.php:206
1130
+ #: includes/views/permalink-manager-tools.php:283
1131
+ msgid "Important notices"
1132
  msgstr ""
1133
 
1134
+ #: includes/views/permalink-manager-tools.php:209
1135
+ msgid "Find and replace"
1136
  msgstr ""
1137
 
1138
+ #: includes/views/permalink-manager-tools.php:226
1139
+ msgid "Regenerate custom permalinks"
1140
  msgstr ""
1141
 
1142
+ #: includes/views/permalink-manager-tools.php:227
1143
+ msgid "Regenerate native slugs"
1144
  msgstr ""
1145
 
1146
+ #: includes/views/permalink-manager-tools.php:228
1147
+ msgid "Use original URLs as custom permalinks"
1148
  msgstr ""
1149
 
1150
+ #: includes/views/permalink-manager-tools.php:286
1151
+ msgid "Regenerate"
1152
+ msgstr ""
1153
+
1154
+ #: includes/views/permalink-manager-debug.php:14
1155
+ msgid "Debug"
1156
+ msgstr ""
1157
+
1158
+ #: includes/views/permalink-manager-debug.php:26
1159
+ msgid "Debug data"
1160
+ msgstr ""
1161
+
1162
+ #: includes/views/permalink-manager-debug.php:30
1163
+ msgid "List of the URIs generated by this plugin."
1164
+ msgstr ""
1165
+
1166
+ #: includes/views/permalink-manager-debug.php:31
1167
+ msgid "Array with URIs"
1168
+ msgstr ""
1169
+
1170
+ #: includes/views/permalink-manager-debug.php:37
1171
+ msgid "List of custom redirects set-up by this plugin."
1172
+ msgstr ""
1173
+
1174
+ #: includes/views/permalink-manager-debug.php:38
1175
+ msgid "Array with redirects"
1176
+ msgstr ""
1177
+
1178
+ #: includes/views/permalink-manager-debug.php:44
1179
+ msgid "List of the permastructures."
1180
+ msgstr ""
1181
+
1182
+ #: includes/views/permalink-manager-debug.php:45
1183
+ msgid "Array with permastructures"
1184
+ msgstr ""
1185
+
1186
+ #: includes/views/permalink-manager-debug.php:51
1187
+ msgid "Currently used plugin settings."
1188
+ msgstr ""
1189
+
1190
+ #: includes/views/permalink-manager-debug.php:52
1191
+ msgid "Array with settings used in this plugin."
1192
  msgstr ""
1193
 
1194
  #. Name of the plugin
out/permalink-manager-admin.js CHANGED
@@ -141,7 +141,13 @@ jQuery(document).ready(function() {
141
  },
142
  success: function(data) {
143
  if(data.length > 5) {
144
- var results = JSON.parse(data);
 
 
 
 
 
 
145
 
146
  // Loop through results
147
  jQuery.each(results, function(key, is_duplicate) {
@@ -178,16 +184,16 @@ jQuery(document).ready(function() {
178
  });
179
 
180
  /**
181
- * Check if a all any of displayed custom URIs is not duplicated
182
  */
183
- if(jQuery('.custom_uri').length > 0) {
184
  permalink_manager_duplicate_check(false, true);
185
  }
186
 
187
  /**
188
  * Disable "Edit URI" input if URI should be updated automatically
189
  */
190
- jQuery('.permalink-manager-edit-uri-box select[name="auto_update_uri"]').on('change', function() {
191
  var selected = jQuery(this).find('option:selected');
192
  var auto_update_status = jQuery(selected).data('auto-update');
193
 
@@ -239,32 +245,75 @@ jQuery(document).ready(function() {
239
  */
240
  jQuery('#permalink-manager .save-row.hidden').removeClass('hidden');
241
  jQuery('#permalink-manager').on('click', '#permalink-manager-save-button', function() {
242
- var pm_container = jQuery(this).parents('#permalink-manager');
 
 
 
 
 
 
243
  var pm_fields = jQuery(pm_container).find("input, select");
244
  var pm_data = jQuery(pm_fields).serialize() + '&action=' + 'pm_save_permalink';
245
- var button = jQuery(this);
246
 
247
- jQuery.ajax({
248
- type: 'POST',
249
- url: permalink_manager.ajax_url,
250
- data: pm_data,
251
- beforeSend: function() {
252
- jQuery(pm_container).LoadingOverlay("show", {
253
- background : "rgba(0, 0, 0, 0.1)",
254
- });
255
- },
256
- success: function(html) {
257
- jQuery(pm_container).find('.permalink-manager-gutenberg').replaceWith(html);
258
- jQuery(pm_container).LoadingOverlay("hide");
259
 
260
- if(wp && wp.data !== 'undefined') {
261
- wp.data.dispatch('core/editor').refreshPost();
262
- }
263
- }
264
- });
 
 
 
 
 
 
 
 
 
265
 
266
- return false;
267
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
268
 
269
  /**
270
  * Help tooltips
@@ -397,7 +446,12 @@ jQuery(document).ready(function() {
397
  progress = updated_count = 0;
398
  jQuery(form).attr("data-updated_count", 0);
399
  }
400
- }
 
 
 
 
 
401
  });
402
 
403
  return false;
141
  },
142
  success: function(data) {
143
  if(data.length > 5) {
144
+ try {
145
+ var results = JSON.parse(data);
146
+ } catch (e) {
147
+ console.log(e);
148
+ console.log(data);
149
+ return;
150
+ }
151
 
152
  // Loop through results
153
  jQuery.each(results, function(key, is_duplicate) {
184
  });
185
 
186
  /**
187
+ * Check if any of displayed custom URIs is not duplicated
188
  */
189
+ if(jQuery('#uri_editor .custom_uri').length > 0) {
190
  permalink_manager_duplicate_check(false, true);
191
  }
192
 
193
  /**
194
  * Disable "Edit URI" input if URI should be updated automatically
195
  */
196
+ jQuery('#permalink-manager').on('change', 'select[name="auto_update_uri"]', function() {
197
  var selected = jQuery(this).find('option:selected');
198
  var auto_update_status = jQuery(selected).data('auto-update');
199
 
245
  */
246
  jQuery('#permalink-manager .save-row.hidden').removeClass('hidden');
247
  jQuery('#permalink-manager').on('click', '#permalink-manager-save-button', function() {
248
+ pm_reload_gutenberg_uri_editor();
249
+ return false;
250
+ });
251
+
252
+ var pm_reload_pending = false;
253
+ function pm_reload_gutenberg_uri_editor() {
254
+ var pm_container = jQuery('#permalink-manager.postbox');
255
  var pm_fields = jQuery(pm_container).find("input, select");
256
  var pm_data = jQuery(pm_fields).serialize() + '&action=' + 'pm_save_permalink';
 
257
 
258
+ // Do not duplicate AJAX requests
259
+ if(!pm_reload_pending) {
260
+ // console.log(pm_data);
 
 
 
 
 
 
 
 
 
261
 
262
+ jQuery.ajax({
263
+ type: 'POST',
264
+ url: permalink_manager.ajax_url,
265
+ data: pm_data,
266
+ beforeSend: function() {
267
+ pm_reload_pending = true;
268
+
269
+ jQuery(pm_container).LoadingOverlay("show", {
270
+ background : "rgba(0, 0, 0, 0.1)",
271
+ });
272
+ },
273
+ success: function(html) {
274
+ jQuery(pm_container).find('.permalink-manager-gutenberg').replaceWith(html);
275
+ jQuery(pm_container).LoadingOverlay("hide");
276
 
277
+ if(wp && wp.data !== 'undefined') {
278
+ wp.data.dispatch('core/editor').refreshPost();
279
+ }
280
+
281
+ pm_reload_pending = false;
282
+ }
283
+ });
284
+ }
285
+ }
286
+
287
+ /**
288
+ * Reload the URI Editor in Gutenberg after the post is published or the title/slug is changed
289
+ */
290
+ try {
291
+ if(typeof wp !== 'undefined' && typeof wp.data !== 'undefined' && typeof wp.data.select !== 'undefined' && typeof wp.blocks !== 'undefined' && typeof wp.data.subscribe !== 'undefined') {
292
+ wp.data.subscribe(function () {
293
+ var isSavingPost = wp.data.select('core/editor').isSavingPost();
294
+ var isAutosavingPost = wp.data.select('core/editor').isAutosavingPost();
295
+
296
+ if(isSavingPost && !isAutosavingPost) {
297
+ old_status = wp.data.select('core/editor').getCurrentPostAttribute('status');
298
+ new_status = wp.data.select('core/editor').getEditedPostAttribute('status');
299
+
300
+ old_title = wp.data.select('core/editor').getCurrentPostAttribute('title');
301
+ new_title = wp.data.select('core/editor').getEditedPostAttribute('title');
302
+
303
+ old_slug = wp.data.select('core/editor').getCurrentPostAttribute('slug');
304
+ new_slug = wp.data.select('core/editor').getEditedPostAttribute('slug');
305
+
306
+ if((old_status !== new_status && new_status == 'publish') || (old_title !== new_title) || (old_slug !== new_slug)) {
307
+ setTimeout(function() {
308
+ pm_reload_gutenberg_uri_editor();
309
+ }, 1500);
310
+ }
311
+ }
312
+ })
313
+ };
314
+ } catch (e) {
315
+ console.log(e);
316
+ }
317
 
318
  /**
319
  * Help tooltips
446
  progress = updated_count = 0;
447
  jQuery(form).attr("data-updated_count", 0);
448
  }
449
+ },
450
+ error: function(xhr, status, error_data) {
451
+ alert('Tthere was a problem running this tool and the process could not be completed. You can find more details in browser\'s console log.')
452
+ console.log('Status: ' + status);
453
+ console.log('Please send the debug data to contact@permalinkmanager.pro:\n\n' + xhr.responseText);
454
+ }
455
  });
456
 
457
  return false;
permalink-manager.php CHANGED
@@ -4,13 +4,15 @@
4
  * Plugin Name: Permalink Manager Lite
5
  * Plugin URI: https://permalinkmanager.pro?utm_source=plugin
6
  * Description: Advanced plugin that allows to set-up custom permalinks (bulk editors included), slugs and permastructures (WooCommerce compatible).
7
- * Version: 2.2.3
8
  * Author: Maciej Bis
9
  * Author URI: http://maciejbis.net/
10
  * License: GPL-2.0+
11
  * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
12
  * Text Domain: permalink-manager
13
  * Domain Path: /languages
 
 
14
  */
15
 
16
  // If this file is called directly or plugin is already defined, abort.
@@ -21,10 +23,10 @@ if (!defined('WPINC')) {
21
  // Define the directories used to load plugin files.
22
  define( 'PERMALINK_MANAGER_PLUGIN_NAME', 'Permalink Manager' );
23
  define( 'PERMALINK_MANAGER_PLUGIN_SLUG', 'permalink-manager' );
24
- define( 'PERMALINK_MANAGER_VERSION', '2.2.3' );
25
  define( 'PERMALINK_MANAGER_FILE', __FILE__ );
26
  define( 'PERMALINK_MANAGER_DIR', untrailingslashit(dirname(__FILE__)) );
27
- define( 'PERMALINK_MANAGER_BASENAME', dirname(plugin_basename(__FILE__)));
28
  define( 'PERMALINK_MANAGER_URL', untrailingslashit( plugins_url('', __FILE__) ) );
29
  define( 'PERMALINK_MANAGER_WEBSITE', 'http://permalinkmanager.pro?utm_source=plugin' );
30
  define( 'PERMALINK_MANAGER_DONATE', 'https://www.paypal.me/Bismit' );
@@ -61,6 +63,7 @@ class Permalink_Manager_Class {
61
  'third-parties' => 'Permalink_Manager_Third_Parties',
62
  'core-functions' => 'Permalink_Manager_Core_Functions',
63
  'gutenberg' => 'Permalink_Manager_Gutenberg',
 
64
  'pro-functions' => 'Permalink_Manager_Pro_Functions'
65
  ),
66
  'views' => array(
@@ -70,7 +73,6 @@ class Permalink_Manager_Class {
70
  'settings' => 'Permalink_Manager_Settings',
71
  'debug' => 'Permalink_Manager_Debug',
72
  'pro-addons' => 'Permalink_Manager_Pro_Addons',
73
- 'upgrade' => 'Permalink_Manager_Upgrade',
74
  'help' => 'Permalink_Manager_Help',
75
  'uri-editor-tax' => false,
76
  'uri-editor-post' => false
@@ -115,7 +117,7 @@ class Permalink_Manager_Class {
115
  * Localize this plugin
116
  */
117
  function localize_me() {
118
- load_plugin_textdomain( 'permalink-manager', false, PERMALINK_MANAGER_BASENAME . "/languages" );
119
  }
120
 
121
  /**
@@ -155,11 +157,12 @@ class Permalink_Manager_Class {
155
  'general' => array(
156
  'auto_update_uris' => 0,
157
  'show_native_slug_field' => 0,
 
 
158
  'canonical_redirect' => 1,
159
  'setup_redirects' => 1,
160
  'redirect' => '301',
161
  'trailing_slashes' => 0,
162
- 'pagination_redirect' => 0,
163
  'auto_remove_duplicates' => 1,
164
  'fix_language_mismatch' => 1,
165
  'pmxi_import_support' => 0,
@@ -168,6 +171,7 @@ class Permalink_Manager_Class {
168
  'disable_slug_sanitization' => 0,
169
  'partial_disable' => array(),
170
  'deep_detect' => 1,
 
171
  ),
172
  'licence' => array()
173
  ));
4
  * Plugin Name: Permalink Manager Lite
5
  * Plugin URI: https://permalinkmanager.pro?utm_source=plugin
6
  * Description: Advanced plugin that allows to set-up custom permalinks (bulk editors included), slugs and permastructures (WooCommerce compatible).
7
+ * Version: 2.2.7.2
8
  * Author: Maciej Bis
9
  * Author URI: http://maciejbis.net/
10
  * License: GPL-2.0+
11
  * License URI: http://www.gnu.org/licenses/gpl-2.0.txt
12
  * Text Domain: permalink-manager
13
  * Domain Path: /languages
14
+ * WC requires at least: 3.0.0
15
+ * WC tested up to: 3.7.0
16
  */
17
 
18
  // If this file is called directly or plugin is already defined, abort.
23
  // Define the directories used to load plugin files.
24
  define( 'PERMALINK_MANAGER_PLUGIN_NAME', 'Permalink Manager' );
25
  define( 'PERMALINK_MANAGER_PLUGIN_SLUG', 'permalink-manager' );
26
+ define( 'PERMALINK_MANAGER_VERSION', '2.2.7.2' );
27
  define( 'PERMALINK_MANAGER_FILE', __FILE__ );
28
  define( 'PERMALINK_MANAGER_DIR', untrailingslashit(dirname(__FILE__)) );
29
+ define( 'PERMALINK_MANAGER_BASENAME', plugin_basename(__FILE__));
30
  define( 'PERMALINK_MANAGER_URL', untrailingslashit( plugins_url('', __FILE__) ) );
31
  define( 'PERMALINK_MANAGER_WEBSITE', 'http://permalinkmanager.pro?utm_source=plugin' );
32
  define( 'PERMALINK_MANAGER_DONATE', 'https://www.paypal.me/Bismit' );
63
  'third-parties' => 'Permalink_Manager_Third_Parties',
64
  'core-functions' => 'Permalink_Manager_Core_Functions',
65
  'gutenberg' => 'Permalink_Manager_Gutenberg',
66
+ 'debug' => 'Permalink_Manager_Debug_Functions',
67
  'pro-functions' => 'Permalink_Manager_Pro_Functions'
68
  ),
69
  'views' => array(
73
  'settings' => 'Permalink_Manager_Settings',
74
  'debug' => 'Permalink_Manager_Debug',
75
  'pro-addons' => 'Permalink_Manager_Pro_Addons',
 
76
  'help' => 'Permalink_Manager_Help',
77
  'uri-editor-tax' => false,
78
  'uri-editor-post' => false
117
  * Localize this plugin
118
  */
119
  function localize_me() {
120
+ load_plugin_textdomain( 'permalink-manager', false, basename(dirname(__FILE__)) . "/languages" );
121
  }
122
 
123
  /**
157
  'general' => array(
158
  'auto_update_uris' => 0,
159
  'show_native_slug_field' => 0,
160
+ 'pagination_redirect' => 0,
161
+ 'sslwww_redirect' => 0,
162
  'canonical_redirect' => 1,
163
  'setup_redirects' => 1,
164
  'redirect' => '301',
165
  'trailing_slashes' => 0,
 
166
  'auto_remove_duplicates' => 1,
167
  'fix_language_mismatch' => 1,
168
  'pmxi_import_support' => 0,
171
  'disable_slug_sanitization' => 0,
172
  'partial_disable' => array(),
173
  'deep_detect' => 1,
174
+ 'edit_uris_cap' => 'publish_posts',
175
  ),
176
  'licence' => array()
177
  ));