Permalink Manager Lite - Version 2.2.6

Version Description

  • More debug functions added
  • Better support for Hebrew letters
  • Support for location custom fields in WP Store Locator - CSV Manager plugin
  • Improved support for Gutenberg editor (reported by Cedric Busuttil)
Download this release

Release Info

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

Code changes from version 2.2.7.3 to 2.2.6

README.txt CHANGED
@@ -6,18 +6,19 @@ 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.4
10
- Stable tag: 2.2.7.3
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
 
16
  Permalink Manager is a most advanced and highly rated Wordpress permalink plugin that helps Wordpress users to control the URL addresses of all posts, pages, custom post type elements (taxonomies are supported in Pro version). To avoid 404 or duplicated content errors after the new custom permalink is defined, the visitors trying to access the old permalink will be automatically redirected to the new custom URL.
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
 
@@ -31,8 +32,8 @@ The plugin supports all custom post types & custom taxonomies and popular 3rd pa
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 =
@@ -103,29 +104,13 @@ It is because Permalink Manager overwrites one of the core Wordpress functionali
103
 
104
  == Changelog ==
105
 
106
- = 2.2.7.3 =
107
- * Support for "Primary category" set with The SEO Framework
108
- * Changes for URI Editor section backend (SQL queries + improvements for search box)
109
- * Improved support for WooCommerce Wishlist plugin
110
- * Improvements for slugs sanitization functions
111
- * Possibility to exclude posts from bulk tools added to "Auto-update the URI" dropdown in URI Editor
112
-
113
- = 2.2.7.1 =
114
- * Hotfix for PHP Fatal error in permalink-manager-admin-functions.php file
115
-
116
- = 2.2.7 =
117
- * Force 404 for draft posts (for non-logged-in users)
118
- * New feature: Force HTTPs/WWW in URLs
119
- * New setting fields: "URI Editor role capability" & "Force HTTPS in URLs"
120
- * Minor improvements
121
-
122
  = 2.2.6 =
123
  * More debug functions added
124
  * Better support for Hebrew letters
125
  * Support for location custom fields in WP Store Locator - CSV Manager plugin
126
  * Improved support for Gutenberg editor (reported by Cedric Busuttil)
127
 
128
- = 2.2.4/2.2.5 =
129
  * Minor code improvements
130
  * Yoast SEO Breadcrumbs - further improvements
131
  * Hotfix for Toolset custom fields support (Permalink Manager Pro)
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.6
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
 
16
  Permalink Manager is a most advanced and highly rated Wordpress permalink plugin that helps Wordpress users to control the URL addresses of all posts, pages, custom post type elements (taxonomies are supported in Pro version). To avoid 404 or duplicated content errors after the new custom permalink is defined, the visitors trying to access the old permalink will be automatically redirected to the new custom URL.
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
 
23
  = All features =
24
 
32
  * **Trailing slashes settings**<br/>They can be forced or removed from all permalinks.
33
 
34
  = Need additional features & priority support? =
35
+ Buy <a href="https://permalinkmanager.pro?utm_source=wordpress">Permalink Manager Pro here</a>.
36
+
37
  https://www.youtube.com/watch?v=KMOtAK5c7t8
38
 
39
  = Additional features available in Permalink Manager Pro =
104
 
105
  == Changelog ==
106
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
107
  = 2.2.6 =
108
  * More debug functions added
109
  * Better support for Hebrew letters
110
  * Support for location custom fields in WP Store Locator - CSV Manager plugin
111
  * Improved support for Gutenberg editor (reported by Cedric Busuttil)
112
 
113
+ = 2.2.4/2.2.5=
114
  * Minor code improvements
115
  * Yoast SEO Breadcrumbs - further improvements
116
  * Hotfix for Toolset custom fields support (Permalink Manager Pro)
includes/core/permalink-manager-actions.php CHANGED
@@ -23,14 +23,7 @@ class Permalink_Manager_Actions extends Permalink_Manager_Class {
23
  global $permalink_manager_after_sections_html;
24
 
25
  // 1. Check if the form was submitted
26
- if(empty($_POST)) {
27
- return;
28
- }
29
-
30
- // 2. Do nothing if search query is not empty
31
- if(isset($_REQUEST['search-submit']) || isset($_REQUEST['months-filter-button'])) {
32
- return;
33
- }
34
 
35
  $actions_map = array(
36
  'uri_editor' => array('function' => 'update_all_permalinks', 'display_uri_table' => true),
@@ -42,7 +35,7 @@ class Permalink_Manager_Actions extends Permalink_Manager_Class {
42
  'import' => array('function' => 'import_custom_permalinks_uris'),
43
  );
44
 
45
- // 3. Find the action
46
  foreach($actions_map as $action => $map) {
47
  if(isset($_POST[$action]) && wp_verify_nonce($_POST[$action], 'permalink-manager')) {
48
  // Execute the function
@@ -59,7 +52,7 @@ class Permalink_Manager_Actions extends Permalink_Manager_Class {
59
  }
60
  }
61
 
62
- // 4. Display the slugs table (and append the globals)
63
  if(isset($updated_slugs_count)) {
64
  $permalink_manager_after_sections_html .= Permalink_Manager_Admin_Functions::display_updated_slugs($updated_slugs_array);
65
  }
@@ -140,7 +133,7 @@ class Permalink_Manager_Actions extends Permalink_Manager_Class {
140
  $progress = get_transient("pm_{$uniq_id}_progress");
141
 
142
  $first_chunk = true;
143
- $chunk_size = 50;
144
 
145
  if(empty($items)) {
146
  $items = $class_name::get_items();
@@ -238,8 +231,12 @@ class Permalink_Manager_Actions extends Permalink_Manager_Class {
238
  * Update all permalinks in "Permalink Editor"
239
  */
240
  function update_all_permalinks() {
 
 
 
 
241
  // Check if posts or terms should be updated
242
- if(!empty($_POST['content_type']) && $_POST['content_type'] == 'taxonomies') {
243
  return Permalink_Manager_URI_Functions_Tax::update_all_permalinks();
244
  } else {
245
  return Permalink_Manager_URI_Functions_Post::update_all_permalinks();
23
  global $permalink_manager_after_sections_html;
24
 
25
  // 1. Check if the form was submitted
26
+ if(empty($_POST)) { return; }
 
 
 
 
 
 
 
27
 
28
  $actions_map = array(
29
  'uri_editor' => array('function' => 'update_all_permalinks', 'display_uri_table' => true),
35
  'import' => array('function' => 'import_custom_permalinks_uris'),
36
  );
37
 
38
+ // 2. Find the action
39
  foreach($actions_map as $action => $map) {
40
  if(isset($_POST[$action]) && wp_verify_nonce($_POST[$action], 'permalink-manager')) {
41
  // Execute the function
52
  }
53
  }
54
 
55
+ // 3. Display the slugs table (and append the globals)
56
  if(isset($updated_slugs_count)) {
57
  $permalink_manager_after_sections_html .= Permalink_Manager_Admin_Functions::display_updated_slugs($updated_slugs_array);
58
  }
133
  $progress = get_transient("pm_{$uniq_id}_progress");
134
 
135
  $first_chunk = true;
136
+ $chunk_size = apply_filters('permalink_manager_chunk_size', 50);
137
 
138
  if(empty($items)) {
139
  $items = $class_name::get_items();
231
  * Update all permalinks in "Permalink Editor"
232
  */
233
  function update_all_permalinks() {
234
+ // Do nothing if search query is not empty
235
+ if(!empty($_REQUEST['search-submit'])) {
236
+ return;
237
+ }
238
  // Check if posts or terms should be updated
239
+ else if(!empty($_POST['content_type']) && $_POST['content_type'] == 'taxonomies') {
240
  return Permalink_Manager_URI_Functions_Tax::update_all_permalinks();
241
  } else {
242
  return Permalink_Manager_URI_Functions_Post::update_all_permalinks();
includes/core/permalink-manager-admin-functions.php CHANGED
@@ -26,9 +26,8 @@ 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 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,30 +154,10 @@ class Permalink_Manager_Admin_Functions extends Permalink_Manager_Class {
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
 
@@ -660,16 +639,16 @@ class Permalink_Manager_Admin_Functions extends Permalink_Manager_Class {
660
  }
661
 
662
  // Decode permalink
663
- $permalink = rawurldecode(rawurldecode($permalink));
664
 
665
  $main_content .= "<tr{$alternate_class}>";
666
  $main_content .= '<td class="row-title column-primary" data-colname="' . __('Title', 'permalink-manager') . '">' . $row['item_title'] . "<a target=\"_blank\" href=\"{$permalink}\"><span class=\"small\">{$permalink}</span></a>" . '<button type="button" class="toggle-row"><span class="screen-reader-text">' . __('Show more details', 'permalink-manager') . '</span></button></td>';
667
  if($show_slugs) {
668
- $main_content .= (isset($row['old_slug'])) ? '<td data-colname="' . __('Old Slug', 'permalink-manager') . '">' . rawurldecode($row['old_slug']) . '</td>' : "";
669
- $main_content .= (isset($row['new_slug'])) ? '<td data-colname="' . __('New Slug', 'permalink-manager') . '">' . rawurldecode($row['new_slug']) . '</td>' : "";
670
  } else {
671
- $main_content .= '<td data-colname="' . __('Old URI', 'permalink-manager') . '">' . rawurldecode($row['old_uri']) . '</td>';
672
- $main_content .= '<td data-colname="' . __('New URI', 'permalink-manager') . '">' . rawurldecode($row['new_uri']) . '</td>';
673
  }
674
  $main_content .= '</tr>';
675
  }
@@ -748,12 +727,6 @@ class Permalink_Manager_Admin_Functions extends Permalink_Manager_Class {
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;
@@ -766,9 +739,8 @@ class Permalink_Manager_Admin_Functions extends Permalink_Manager_Class {
766
  $auto_update_def_label = ($auto_update_def_val) ? __("Yes", "permalink-manager") : __("No", "permalink-manager");
767
  $auto_update_choices = array(
768
  0 => array("label" => sprintf(__("Use global settings [%s]", "permalink-manager"), $auto_update_def_label), "atts" => "data-auto-update=\"{$auto_update_def_val}\""),
769
- 1 => array("label" => __("Yes", "permalink-manager"), "atts" => "data-auto-update=\"1\""),
770
  -1 => array("label" => __("No", "permalink-manager"), "atts" => "data-auto-update=\"0\""),
771
- -2 => array("label" => __("No (ignore this URI in bulk tools)", "permalink-manager"), "atts" => "data-auto-update=\"2\"")
772
  );
773
 
774
  // Get URIs
@@ -789,7 +761,7 @@ class Permalink_Manager_Admin_Functions extends Permalink_Manager_Class {
789
  }
790
 
791
  // Decode default URI
792
- $default_uri = rawurldecode($default_uri);
793
 
794
  // Start HTML output
795
  // 1. Button
@@ -824,7 +796,7 @@ class Permalink_Manager_Admin_Functions extends Permalink_Manager_Class {
824
 
825
  // 5. Native slug
826
  if(!empty($element->ID) && !empty($permalink_manager_options["general"]["show_native_slug_field"])) {
827
- $native_slug_field = Permalink_Manager_Admin_Functions::generate_option_field("native_slug", array("extra_atts" => "data-default=\"{$native_slug}\" data-element-id=\"{$element_id}\"", "input_class" => "widefat native_slug", "value" => rawurldecode($native_slug)));
828
 
829
  $html .= sprintf("<div class=\"native_slug_container\"><p><label for=\"native_slug\" class=\"strong\">%s %s</label></p><span>%s</span></div>",
830
  __("Native slug", "permalink-manager"),
@@ -860,7 +832,7 @@ class Permalink_Manager_Admin_Functions extends Permalink_Manager_Class {
860
  "<div class=\"default-permalink-row columns-container\"><span><strong>%s</strong> <a href=\"%s\">%s</a></span></div>",
861
  __("Automatic redirect for native URI enabled:", "permalink-manager"),
862
  $native_permalink,
863
- rawurldecode($native_uri)
864
  );
865
  }
866
  }
@@ -903,22 +875,21 @@ class Permalink_Manager_Admin_Functions extends Permalink_Manager_Class {
903
  global $permalink_manager_options, $permalink_manager_redirects;
904
 
905
  // Heading
906
- $html = "<div class=\"permalink-manager redirects-row redirects-panel columns-container\">";
907
-
908
- $html .= sprintf(
909
- "<div><a class=\"button\" href=\"#\" id=\"toggle-redirect-panel\">%s</a></span></div>",
910
  __("Manage redirects", "permalink-manager")
911
  );
912
 
913
  $html .= "<div id=\"redirect-panel-inside\">";
 
 
914
  if(Permalink_Manager_Admin_Functions::is_pro_active() && class_exists('Permalink_Manager_Pro_Addons')) {
915
  $html .= Permalink_Manager_Pro_Addons::display_redirect_form($element_id);
916
  } else {
917
  $html .= self::pro_text(true);
918
  }
919
- $html .= "</div>";
920
 
921
- $html .= "</div>";
922
 
923
  return $html;
924
  }
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
  * 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
 
639
  }
640
 
641
  // Decode permalink
642
+ $permalink = urldecode(urldecode($permalink));
643
 
644
  $main_content .= "<tr{$alternate_class}>";
645
  $main_content .= '<td class="row-title column-primary" data-colname="' . __('Title', 'permalink-manager') . '">' . $row['item_title'] . "<a target=\"_blank\" href=\"{$permalink}\"><span class=\"small\">{$permalink}</span></a>" . '<button type="button" class="toggle-row"><span class="screen-reader-text">' . __('Show more details', 'permalink-manager') . '</span></button></td>';
646
  if($show_slugs) {
647
+ $main_content .= (isset($row['old_slug'])) ? '<td data-colname="' . __('Old Slug', 'permalink-manager') . '">' . urldecode($row['old_slug']) . '</td>' : "";
648
+ $main_content .= (isset($row['new_slug'])) ? '<td data-colname="' . __('New Slug', 'permalink-manager') . '">' . urldecode($row['new_slug']) . '</td>' : "";
649
  } else {
650
+ $main_content .= '<td data-colname="' . __('Old URI', 'permalink-manager') . '">' . urldecode($row['old_uri']) . '</td>';
651
+ $main_content .= '<td data-colname="' . __('New URI', 'permalink-manager') . '">' . urldecode($row['new_uri']) . '</td>';
652
  }
653
  $main_content .= '</tr>';
654
  }
727
  public static function display_uri_box($element, $gutenberg = false) {
728
  global $permalink_manager_options, $permalink_manager_uris;
729
 
 
 
 
 
 
 
730
  if(!empty($element->ID)) {
731
  $id = $element_id = $element->ID;
732
  $native_slug = $element->post_name;
739
  $auto_update_def_label = ($auto_update_def_val) ? __("Yes", "permalink-manager") : __("No", "permalink-manager");
740
  $auto_update_choices = array(
741
  0 => array("label" => sprintf(__("Use global settings [%s]", "permalink-manager"), $auto_update_def_label), "atts" => "data-auto-update=\"{$auto_update_def_val}\""),
 
742
  -1 => array("label" => __("No", "permalink-manager"), "atts" => "data-auto-update=\"0\""),
743
+ 1 => array("label" => __("Yes", "permalink-manager"), "atts" => "data-auto-update=\"1\"")
744
  );
745
 
746
  // Get URIs
761
  }
762
 
763
  // Decode default URI
764
+ $default_uri = urldecode($default_uri);
765
 
766
  // Start HTML output
767
  // 1. Button
796
 
797
  // 5. Native slug
798
  if(!empty($element->ID) && !empty($permalink_manager_options["general"]["show_native_slug_field"])) {
799
+ $native_slug_field = Permalink_Manager_Admin_Functions::generate_option_field("native_slug", array("extra_atts" => "data-default=\"{$native_slug}\" data-element-id=\"{$element_id}\"", "input_class" => "widefat native_slug", "value" => urldecode($native_slug)));
800
 
801
  $html .= sprintf("<div class=\"native_slug_container\"><p><label for=\"native_slug\" class=\"strong\">%s %s</label></p><span>%s</span></div>",
802
  __("Native slug", "permalink-manager"),
832
  "<div class=\"default-permalink-row columns-container\"><span><strong>%s</strong> <a href=\"%s\">%s</a></span></div>",
833
  __("Automatic redirect for native URI enabled:", "permalink-manager"),
834
  $native_permalink,
835
+ urldecode($native_uri)
836
  );
837
  }
838
  }
875
  global $permalink_manager_options, $permalink_manager_redirects;
876
 
877
  // Heading
878
+ $html = sprintf(
879
+ "<div class=\"permalink-manager redirects-row redirects-panel columns-container\"><div><a class=\"button\" href=\"#\" id=\"toggle-redirect-panel\">%s</a></span></div>",
 
 
880
  __("Manage redirects", "permalink-manager")
881
  );
882
 
883
  $html .= "<div id=\"redirect-panel-inside\">";
884
+
885
+ // Table
886
  if(Permalink_Manager_Admin_Functions::is_pro_active() && class_exists('Permalink_Manager_Pro_Addons')) {
887
  $html .= Permalink_Manager_Pro_Addons::display_redirect_form($element_id);
888
  } else {
889
  $html .= self::pro_text(true);
890
  }
 
891
 
892
+ $html .= "</div></div>";
893
 
894
  return $html;
895
  }
includes/core/permalink-manager-core-functions.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
 
3
  /**
4
- * Core functions
5
  */
6
  class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
7
 
@@ -17,6 +17,10 @@ class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
17
  add_filter( 'permalink_manager_filter_final_post_permalink', array($this, 'control_trailing_slashes'), 9);
18
  add_filter( 'permalink_manager_filter_post_sample_uri', array($this, 'control_trailing_slashes'), 9);
19
 
 
 
 
 
20
  /**
21
  * Detect & canonical URL/redirect functions
22
  */
@@ -50,7 +54,7 @@ class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
50
  * The most important Permalink Manager function
51
  */
52
  public static function detect_post($query, $request_url = false, $return_object = false) {
53
- global $wpdb, $wp, $wp_rewrite, $permalink_manager, $permalink_manager_uris, $wp_filter, $permalink_manager_options, $pm_query;
54
 
55
  // Check if the array with custom URIs is set
56
  //if(!(is_array($permalink_manager_uris)) || (empty($query) && empty($request_url))) return $query;
@@ -138,13 +142,10 @@ class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
138
  $uri = strtolower(urldecode($uri));
139
 
140
  foreach($all_uris as $raw_uri => $uri_id) {
141
- $raw_uri = urldecode($raw_uri);
142
  $all_uris[$raw_uri] = $uri_id;
143
  }
144
 
145
- // Convert array keys lowercase
146
- $all_uris = array_change_key_case($all_uris, CASE_LOWER);
147
-
148
  $element_id = isset($all_uris[$uri]) ? $all_uris[$uri] : $element_id;
149
  }
150
 
@@ -259,11 +260,6 @@ class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
259
  $query['p'] = $element_id;
260
  $query['preview'] = true;
261
  $query['post_type'] = $post_type;
262
- } else if($post_to_load->post_status == 'draft') {
263
- $query['pagename'] = '-';
264
- $query['error'] = '404';
265
-
266
- $element_id = 0;
267
  } else {
268
  $query = $old_query;
269
  }
@@ -345,7 +341,17 @@ class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
345
  }
346
 
347
  /**
348
- * 6. Set global with detected item id
 
 
 
 
 
 
 
 
 
 
349
  */
350
  if(!empty($element_id)) {
351
  $pm_query['id'] = $element_id;
@@ -356,7 +362,7 @@ class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
356
  }
357
 
358
  /**
359
- * 7. Debug data
360
  */
361
  if(!empty($taxonomy)) {
362
  $content_type = "Taxonomy: {$term_taxonomy}";
@@ -379,7 +385,7 @@ class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
379
  /**
380
  * Trailing slash & remove BOM and double slashes
381
  */
382
- static function control_trailing_slashes($permalink) {
383
  global $permalink_manager_options;
384
 
385
  // Ignore empty permalinks
@@ -433,7 +439,7 @@ class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
433
  }
434
 
435
  // 5. Block non-existent pages (Force 404 error)
436
- if(!empty($is_404)) {
437
  $wp_query->is_404 = true;
438
  $wp_query->query = $wp_query->queried_object = $wp_query->queried_object_id = null;
439
  $wp_query->set_404();
@@ -450,7 +456,18 @@ class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
450
  * Redirects
451
  */
452
  function new_uri_redirect_and_404() {
453
- global $wp_query, $permalink_manager_uris, $permalink_manager_redirects, $permalink_manager_external_redirects, $permalink_manager_options, $wp, $pm_query;
 
 
 
 
 
 
 
 
 
 
 
454
 
455
  // Get the redirection mode & trailing slashes settings
456
  $redirect_mode = (!empty($permalink_manager_options['general']['redirect'])) ? $permalink_manager_options['general']['redirect'] : false;
@@ -458,6 +475,10 @@ class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
458
  $trailing_slashes_redirect_mode = (!empty($permalink_manager_options['general']['trailing_slashes_redirect'])) ? $permalink_manager_options['general']['trailing_slashes_redirect'] : 301;
459
  $redirect_type = '-';
460
 
 
 
 
 
461
  // Get home URL
462
  $home_url = rtrim(get_option('home'), "/");
463
  $home_dir = parse_url($home_url, PHP_URL_PATH);
@@ -465,183 +486,146 @@ class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
465
  // Set up $correct_permalink variable
466
  $correct_permalink = '';
467
 
468
- // Get query string & URI
469
- $query_string = $_SERVER['QUERY_STRING'];
470
- $old_uri = $_SERVER['REQUEST_URI'];
471
-
472
  // Fix for WP installed in directories (remove the directory name from the URI)
473
  if(!empty($home_dir)) {
474
  $home_dir_regex = preg_quote(trim($home_dir), "/");
475
  $old_uri = preg_replace("/{$home_dir_regex}/", "", $old_uri, 1);
476
  }
477
 
478
- // Do not use custom redirects on author pages, search & front page
479
- if(!is_author() && !is_front_page() && !is_home() && !is_feed() && !is_search() && empty($_GET['s'])) {
480
-
481
- // Unset 404 if custom URI is detected
482
- if(isset($pm_query['id'])) {
483
- $wp_query->is_404 = false;
484
- }
485
-
486
- // Sometimes $wp_query indicates the wrong object if requested directly
487
- $queried_object = get_queried_object();
488
-
489
- /**
490
- * 1A. External redirect
491
- */
492
- if(!empty($pm_query['id']) && !empty($permalink_manager_external_redirects[$pm_query['id']])) {
493
- $external_url = $permalink_manager_external_redirects[$pm_query['id']];
494
 
495
- if(filter_var($external_url, FILTER_VALIDATE_URL)) {
496
- // Allow redirect
497
- $wp_query->query_vars['do_not_redirect'] = 0;
498
 
499
- wp_redirect($external_url, 301, PERMALINK_MANAGER_PLUGIN_NAME);
500
- exit();
501
- }
502
  }
 
503
 
504
- /**
505
- * 1B. Custom redirects
506
- */
507
- 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'])) {
508
- $uri = $pm_query['uri'];
509
- $endpoint_value = $pm_query['endpoint_value'];
510
-
511
- // Make sure that URIs with non-ASCII characters are also detected + Check the URLs that end with number
512
- $decoded_url = urldecode($uri);
513
- $endpoint_url = "{$uri}/{$endpoint_value}";
514
 
515
- // Check if the URI is not assigned to any post/term's redirects
516
- foreach($permalink_manager_redirects as $element => $redirects) {
517
- if(!is_array($redirects)) { continue; }
518
 
519
- if(in_array($uri, $redirects) || in_array($decoded_url, $redirects) || (is_numeric($endpoint_value) && in_array($endpoint_url, $redirects))) {
 
 
520
 
521
- // Post is detected
522
- if(is_numeric($element)) {
523
- $correct_permalink = get_permalink($element);
524
- }
525
- // Term is detected
526
- else {
527
- $term_id = intval(preg_replace("/[^0-9]/", "", $element));
528
- $correct_permalink = get_term_link($term_id);
529
- }
530
  }
531
  }
532
-
533
- $redirect_type = (!empty($correct_permalink)) ? 'custom_redirect' : $redirect_type;
534
  }
535
 
536
- // Ignore WP-Content links
537
- if(!empty($_SERVER['REQUEST_URI']) && (strpos($_SERVER['REQUEST_URI'], '/wp-content') !== false)) { return false; }
538
 
539
- /**
540
- * 1C. Enhance native redirect
541
- */
542
- if(empty($wp_query->query_vars['do_not_redirect']) && $redirect_mode && !empty($queried_object) && empty($correct_permalink)) {
543
 
544
- // Affect only posts with custom URI and old URIs
545
- if(!empty($queried_object->ID) && isset($permalink_manager_uris[$queried_object->ID]) && empty($wp_query->query['preview'])) {
546
- // Ignore posts with specific statuses
547
- if(!(empty($queried_object->post_status)) && in_array($queried_object->post_status, array('draft', 'pending', 'auto-draft', 'future'))) {
548
- return '';
549
- }
550
 
551
- // Check if post type is allowed
552
- if(Permalink_Manager_Helper_Functions::is_disabled($queried_object->post_type, 'post_type')) { return ''; }
 
 
 
 
553
 
554
- // Get the real URL
555
- $correct_permalink = get_permalink($queried_object->ID);
556
- }
557
- // Affect only terms with custom URI and old URIs
558
- else if(!empty($queried_object->term_id) && isset($permalink_manager_uris["tax-{$queried_object->term_id}"]) && defined('PERMALINK_MANAGER_PRO')) {
559
- // Check if taxonomy is allowed
560
- if(Permalink_Manager_Helper_Functions::is_disabled($queried_object->taxonomy, "taxonomy")) { return ''; }
561
 
562
- // Get the real URL
563
- $correct_permalink = get_term_link($queried_object->term_id, $queried_object->taxonomy);
564
- }
 
 
 
 
565
 
566
- $redirect_type = (!empty($correct_permalink)) ? 'native_redirect' : $redirect_type;
567
- }
 
568
 
569
- /**
570
- * 2. Check trailing slashes (ignore links with query parameters)
571
- */
572
- if($trailing_slashes_mode && empty($_SERVER['QUERY_STRING']) && !empty($_SERVER['REQUEST_URI'])) {
573
- // Check if $old_uri ends with slash or not
574
- $ends_with_slash = (substr($old_uri, -1) == "/") ? true : false;
575
- $trailing_slashes_mode = (preg_match("/.*\.([a-zA-Z]{3,4})\/?$/", $old_uri) && $trailing_slashes_mode == 10) ? 20 : $trailing_slashes_mode;
576
-
577
- // Ignore empty URIs
578
- if($old_uri != "/") {
579
- // Remove the trailing slashes (and add them again if needed below)
580
- $old_uri = trim($old_uri, "/");
581
- $correct_permalink = (!empty($correct_permalink)) ? trim($correct_permalink, "/") : "";
582
-
583
- // 2A. Force trailing slashes
584
- if($trailing_slashes_mode == 10 && $ends_with_slash == false) {
585
- $correct_permalink = (!empty($correct_permalink)) ? "{$correct_permalink}/" : "{$home_url}/{$old_uri}/";
586
- }
587
- // 2B. Remove trailing slashes
588
- else if($trailing_slashes_mode == 20 && $ends_with_slash == true) {
589
- $correct_permalink = (!empty($correct_permalink)) ? $correct_permalink : "{$home_url}/{$old_uri}";
590
- $correct_permalink = trim($correct_permalink, "/");
591
- }
592
 
593
- // Use redirect mode set for trailing slash redirect
594
- if(($trailing_slashes_mode == 20 && $ends_with_slash == true) || ($trailing_slashes_mode == 10 && $ends_with_slash == false)) {
595
- $redirect_mode = $trailing_slashes_redirect_mode;
596
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
597
  }
598
 
599
- $redirect_type = (!empty($correct_permalink)) ? 'slash_redirect' : '-';
600
- }
601
-
602
- /**
603
- * 3. Check if URL contains duplicated slashes
604
- */
605
- if(!empty($old_uri) && ($old_uri != '/') && preg_match('/\/{2,}/', $old_uri)) {
606
- $new_uri = ltrim(preg_replace('/([^:])([\/]+)/', '$1/', $old_uri), "/");
607
- $correct_permalink = "{$home_url}/{$new_uri}";
608
  }
609
 
610
- /**
611
- * 4. Prevent redirect loop
612
- */
613
- if(!empty($correct_permalink) && is_string($correct_permalink) && !empty($wp->request) && !empty($redirect_type) && $redirect_type !== 'slash_redirect') {
614
- $current_uri = trim($wp->request, "/");
615
- $redirect_uri = trim(parse_url($correct_permalink, PHP_URL_PATH), "/");
616
 
617
- $correct_permalink = ($redirect_uri == $current_uri) ? null : $correct_permalink;
618
- }
619
- } else {
620
- $queried_object = '-';
 
 
621
  }
622
 
623
  /**
624
- * 5. WWW prefix | SSL mismatch redirect
625
  */
626
- if(!empty($permalink_manager_options['general']['sslwww_redirect'])) {
627
- $home_url_has_www = (strpos($home_url, 'www.') !== false) ? true : false;
628
- $requested_url_has_www = (strpos($_SERVER['HTTP_HOST'], 'www.') !== false) ? true : false;
629
- $home_url_has_ssl = (strpos($home_url, 'https') !== false) ? true : false;
630
- $requested_url_has_ssl = is_ssl();
631
 
632
- if(($home_url_has_www !== $requested_url_has_www) || ($home_url_has_ssl !== $requested_url_has_ssl)) {
633
- $correct_permalink = "{$home_url}/{$old_uri}";
634
- $redirect_type = 'www_redirect';
635
- }
636
  }
637
 
638
  /**
639
- * 6. Debug redirect
640
  */
641
  $correct_permalink = apply_filters('permalink_manager_filter_redirect', $correct_permalink, $redirect_type, $queried_object);
642
 
643
  /**
644
- * 7. Ignore default URIs (or do nothing if redirects are disabled)
645
  */
646
  if(!empty($correct_permalink) && is_string($correct_permalink) && !empty($redirect_mode)) {
647
  // Allow redirect
@@ -650,10 +634,10 @@ class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
650
  // Append query string
651
  $correct_permalink = (!empty($query_string)) ? sprintf("%s?%s", strtok($correct_permalink, "?"), $query_string) : $correct_permalink;
652
 
653
- // Adjust trailing slashes
654
- $correct_permalink = self::control_trailing_slashes($correct_permalink);
655
 
656
- wp_safe_redirect($correct_permalink, $redirect_mode, PERMALINK_MANAGER_PLUGIN_NAME);
657
  exit();
658
  }
659
  }
@@ -711,4 +695,29 @@ class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
711
  }
712
  }
713
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
714
  }
1
  <?php
2
 
3
  /**
4
+ * Core function
5
  */
6
  class Permalink_Manager_Core_Functions extends Permalink_Manager_Class {
7
 
17
  add_filter( 'permalink_manager_filter_final_post_permalink', array($this, 'control_trailing_slashes'), 9);
18
  add_filter( 'permalink_manager_filter_post_sample_uri', array($this, 'control_trailing_slashes'), 9);
19
 
20
+ // Replace empty placeholder tags & remove BOM
21
+ add_filter( 'permalink_manager_filter_default_post_uri', array($this, 'replace_empty_placeholder_tags'), 10, 5 );
22
+ add_filter( 'permalink_manager_filter_default_term_uri', array($this, 'replace_empty_placeholder_tags'), 10, 5 );
23
+
24
  /**
25
  * Detect & canonical URL/redirect functions
26
  */
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;
142
  $uri = strtolower(urldecode($uri));
143
 
144
  foreach($all_uris as $raw_uri => $uri_id) {
145
+ $raw_uri = strtolower(urldecode($raw_uri));
146
  $all_uris[$raw_uri] = $uri_id;
147
  }
148
 
 
 
 
149
  $element_id = isset($all_uris[$uri]) ? $all_uris[$uri] : $element_id;
150
  }
151
 
260
  $query['p'] = $element_id;
261
  $query['preview'] = true;
262
  $query['post_type'] = $post_type;
 
 
 
 
 
263
  } else {
264
  $query = $old_query;
265
  }
341
  }
342
 
343
  /**
344
+ * 6. WWW prefix mismatch detect
345
+ */
346
+ $home_url_has_www = (strpos($raw_home_url, 'www.') !== false) ? true : false;
347
+ $requested_url_has_www = (strpos($_SERVER['HTTP_HOST'], 'www.') !== false) ? true : false;
348
+
349
+ if($home_url_has_www != $requested_url_has_www) {
350
+ unset($query['do_not_redirect']);
351
+ }
352
+
353
+ /**
354
+ * 7. Set global with detected item id
355
  */
356
  if(!empty($element_id)) {
357
  $pm_query['id'] = $element_id;
362
  }
363
 
364
  /**
365
+ * 8. Debug data
366
  */
367
  if(!empty($taxonomy)) {
368
  $content_type = "Taxonomy: {$term_taxonomy}";
385
  /**
386
  * Trailing slash & remove BOM and double slashes
387
  */
388
+ function control_trailing_slashes($permalink) {
389
  global $permalink_manager_options;
390
 
391
  // Ignore empty permalinks
439
  }
440
 
441
  // 5. Block non-existent pages (Force 404 error)
442
+ if($is_404) {
443
  $wp_query->is_404 = true;
444
  $wp_query->query = $wp_query->queried_object = $wp_query->queried_object_id = null;
445
  $wp_query->set_404();
456
  * Redirects
457
  */
458
  function new_uri_redirect_and_404() {
459
+ global $wp_query, $permalink_manager_uris, $permalink_manager_redirects, $permalink_manager_external_redirects, $permalink_manager_options, $wp, $pm_query, $pm_uri_parts;
460
+
461
+ // Do not redirect on author pages & front page
462
+ if(is_author() || is_front_page() || is_home() || is_feed()) { return false; }
463
+
464
+ // Unset 404 if custom URI is detected
465
+ if(isset($pm_query['id'])) {
466
+ $wp_query->is_404 = false;
467
+ }
468
+
469
+ // Sometimes $wp_query indicates the wrong object if requested directly
470
+ $queried_object = get_queried_object();
471
 
472
  // Get the redirection mode & trailing slashes settings
473
  $redirect_mode = (!empty($permalink_manager_options['general']['redirect'])) ? $permalink_manager_options['general']['redirect'] : false;
475
  $trailing_slashes_redirect_mode = (!empty($permalink_manager_options['general']['trailing_slashes_redirect'])) ? $permalink_manager_options['general']['trailing_slashes_redirect'] : 301;
476
  $redirect_type = '-';
477
 
478
+ // Get query string & URI
479
+ $query_string = $_SERVER['QUERY_STRING'];
480
+ $old_uri = $_SERVER['REQUEST_URI'];
481
+
482
  // Get home URL
483
  $home_url = rtrim(get_option('home'), "/");
484
  $home_dir = parse_url($home_url, PHP_URL_PATH);
486
  // Set up $correct_permalink variable
487
  $correct_permalink = '';
488
 
 
 
 
 
489
  // Fix for WP installed in directories (remove the directory name from the URI)
490
  if(!empty($home_dir)) {
491
  $home_dir_regex = preg_quote(trim($home_dir), "/");
492
  $old_uri = preg_replace("/{$home_dir_regex}/", "", $old_uri, 1);
493
  }
494
 
495
+ /**
496
+ * 1A. External redirect
497
+ */
498
+ if(!empty($pm_query['id']) && !empty($permalink_manager_external_redirects[$pm_query['id']])) {
499
+ $external_url = $permalink_manager_external_redirects[$pm_query['id']];
 
 
 
 
 
 
 
 
 
 
 
500
 
501
+ if(filter_var($external_url, FILTER_VALIDATE_URL)) {
502
+ // Allow redirect
503
+ $wp_query->query_vars['do_not_redirect'] = 0;
504
 
505
+ wp_redirect($external_url, 301);
506
+ exit();
 
507
  }
508
+ }
509
 
510
+ /**
511
+ * 1B. Custom redirects
512
+ */
513
+ 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'])) {
514
+ $uri = $pm_query['uri'];
 
 
 
 
 
515
 
516
+ // Make sure that URIs with non-ASCII characters are also detected
517
+ $decoded_url = urldecode($uri);
 
518
 
519
+ // Check if the URI is not assigned to any post/term's redirects
520
+ foreach($permalink_manager_redirects as $element => $redirects) {
521
+ if(is_array($redirects) && (in_array($uri, $redirects) || in_array($decoded_url, $redirects))) {
522
 
523
+ // Post is detected
524
+ if(is_numeric($element)) {
525
+ $correct_permalink = get_permalink($element);
526
+ }
527
+ // Term is detected
528
+ else {
529
+ $term_id = intval(preg_replace("/[^0-9]/", "", $element));
530
+ $correct_permalink = get_term_link($term_id);
 
531
  }
532
  }
 
 
533
  }
534
 
535
+ $redirect_type = (!empty($correct_permalink)) ? 'custom_redirect' : $redirect_type;
536
+ }
537
 
538
+ // Ignore WP-Content links
539
+ if(!empty($_SERVER['REQUEST_URI']) && (strpos($_SERVER['REQUEST_URI'], '/wp-content') !== false)) { return false; }
 
 
540
 
541
+ /**
542
+ * 1C. Enhance native redirect
543
+ */
544
+ if(empty($wp_query->query_vars['do_not_redirect']) && $redirect_mode && !empty($queried_object) && empty($correct_permalink)) {
 
 
545
 
546
+ // Affect only posts with custom URI and old URIs
547
+ if(!empty($queried_object->ID) && isset($permalink_manager_uris[$queried_object->ID]) && empty($wp_query->query['preview'])) {
548
+ // Ignore posts with specific statuses
549
+ if(!(empty($queried_object->post_status)) && in_array($queried_object->post_status, array('draft', 'pending', 'auto-draft', 'future'))) {
550
+ return '';
551
+ }
552
 
553
+ // Check if post type is allowed
554
+ if(Permalink_Manager_Helper_Functions::is_disabled($queried_object->post_type, 'post_type')) { return ''; }
 
 
 
 
 
555
 
556
+ // Get the real URL
557
+ $correct_permalink = get_permalink($queried_object->ID);
558
+ }
559
+ // Affect only terms with custom URI and old URIs
560
+ else if(!empty($queried_object->term_id) && isset($permalink_manager_uris["tax-{$queried_object->term_id}"]) && defined('PERMALINK_MANAGER_PRO')) {
561
+ // Check if taxonomy is allowed
562
+ if(Permalink_Manager_Helper_Functions::is_disabled($queried_object->taxonomy, "taxonomy")) { return ''; }
563
 
564
+ // Get the real URL
565
+ $correct_permalink = get_term_link($queried_object->term_id, $queried_object->taxonomy);
566
+ }
567
 
568
+ $redirect_type = (!empty($correct_permalink)) ? 'native_redirect' : $redirect_type;
569
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
570
 
571
+ /**
572
+ * 2. Check trailing slashes (ignore links with query parameters)
573
+ */
574
+ if($trailing_slashes_mode && empty($_SERVER['QUERY_STRING']) && !empty($_SERVER['REQUEST_URI'])) {
575
+ // Check if $old_uri ends with slash or not
576
+ $ends_with_slash = (substr($old_uri, -1) == "/") ? true : false;
577
+ $trailing_slashes_mode = (preg_match("/.*\.([a-zA-Z]{3,4})\/?$/", $old_uri) && $trailing_slashes_mode == 10) ? 20 : $trailing_slashes_mode;
578
+
579
+ // Ignore empty URIs
580
+ if($old_uri != "/") {
581
+ // Remove the trailing slashes (and add them again if needed below)
582
+ $old_uri = trim($old_uri, "/");
583
+ $correct_permalink = (!empty($correct_permalink)) ? trim($correct_permalink, "/") : "";
584
+
585
+ // 2A. Force trailing slashes
586
+ if($trailing_slashes_mode == 10 && $ends_with_slash == false) {
587
+ $correct_permalink = (!empty($correct_permalink)) ? "{$correct_permalink}/" : "{$home_url}/{$old_uri}/";
588
+ }
589
+ // 2B. Remove trailing slashes
590
+ else if($trailing_slashes_mode == 20 && $ends_with_slash == true) {
591
+ $correct_permalink = (!empty($correct_permalink)) ? $correct_permalink : "{$home_url}/{$old_uri}";
592
+ $correct_permalink = trim($correct_permalink, "/");
593
  }
594
 
595
+ // Use redirect mode set for trailing slash redirect
596
+ if(($trailing_slashes_mode == 20 && $ends_with_slash == true) || ($trailing_slashes_mode == 10 && $ends_with_slash == false)) {
597
+ $redirect_mode = $trailing_slashes_redirect_mode;
598
+ }
 
 
 
 
 
599
  }
600
 
601
+ $redirect_type = (!empty($correct_permalink)) ? 'slash_redirect' : '-';
602
+ }
 
 
 
 
603
 
604
+ /**
605
+ * 3. Check if URL contains duplicated slashes
606
+ */
607
+ if(!empty($old_uri) && ($old_uri != '/') && preg_match('/\/{2,}/', $old_uri)) {
608
+ $new_uri = ltrim(preg_replace('/([^:])([\/]+)/', '$1/', $old_uri), "/");
609
+ $correct_permalink = "{$home_url}/{$new_uri}";
610
  }
611
 
612
  /**
613
+ * 4. Prevent redirect loop
614
  */
615
+ if(!empty($correct_permalink) && is_string($correct_permalink) && !empty($wp->request) && !empty($redirect_type) && $redirect_type != 'slash_redirect') {
616
+ $current_uri = trim($wp->request, "/");
617
+ $redirect_uri = trim(parse_url($correct_permalink, PHP_URL_PATH), "/");
 
 
618
 
619
+ $correct_permalink = ($redirect_uri == $current_uri) ? null : $correct_permalink;
 
 
 
620
  }
621
 
622
  /**
623
+ * 5. Debug redirect
624
  */
625
  $correct_permalink = apply_filters('permalink_manager_filter_redirect', $correct_permalink, $redirect_type, $queried_object);
626
 
627
  /**
628
+ * 6. Ignore default URIs (or do nothing if redirects are disabled)
629
  */
630
  if(!empty($correct_permalink) && is_string($correct_permalink) && !empty($redirect_mode)) {
631
  // Allow redirect
634
  // Append query string
635
  $correct_permalink = (!empty($query_string)) ? sprintf("%s?%s", strtok($correct_permalink, "?"), $query_string) : $correct_permalink;
636
 
637
+ // Remove double slash
638
+ $correct_permalink = preg_replace('~(?<!https:|http:)[/\\\\]+~', "/", trim($correct_permalink));
639
 
640
+ wp_safe_redirect($correct_permalink, $redirect_mode);
641
  exit();
642
  }
643
  }
695
  }
696
  }
697
 
698
+ /**
699
+ * Replace empty placeholder tags & remove BOM
700
+ */
701
+ public static function replace_empty_placeholder_tags($default_uri, $native_slug = "", $element = "", $slug = "", $native_uri = "") {
702
+ // Do not affect native URIs
703
+ if($native_uri == true) { return $default_uri; }
704
+
705
+ // Remove the BOM
706
+ $default_uri = str_replace(array("\xEF\xBB\xBF", "%ef%bb%bf"), '', $default_uri);
707
+
708
+ // Encode the URI before placeholders are removed
709
+ $chunks = explode('/', $default_uri);
710
+ foreach ($chunks as &$chunk) {
711
+ if(preg_match("/^(%.+?%)$/", $chunk) == false) {
712
+ $chunk = urldecode($chunk);
713
+ }
714
+ }
715
+ $default_uri = implode("/", $chunks);
716
+
717
+ $empty_tag_replacement = apply_filters('permalink_manager_empty_tag_replacement', null, $element);
718
+ $default_uri = ($empty_tag_replacement || is_null($empty_tag_replacement)) ? str_replace("//", "/", preg_replace("/%(.+?)%/", $empty_tag_replacement, $default_uri)) : $default_uri;
719
+
720
+ return trim($default_uri, "/");
721
+ }
722
+
723
  }
includes/core/permalink-manager-helper-functions.php CHANGED
@@ -10,13 +10,9 @@ class Permalink_Manager_Helper_Functions extends Permalink_Manager_Class {
10
  }
11
 
12
  public function init() {
13
- // Replace empty placeholder tags & remove BOM
14
- add_filter( 'permalink_manager_filter_default_post_uri', array($this, 'replace_empty_placeholder_tags'), 10, 5);
15
- add_filter( 'permalink_manager_filter_default_term_uri', array($this, 'replace_empty_placeholder_tags'), 10, 5);
16
-
17
  // Clear the final default URIs
18
- add_filter( 'permalink_manager_filter_default_term_uri', array($this, 'clear_single_uri'), 20);
19
- add_filter( 'permalink_manager_filter_default_post_uri', array($this, 'clear_single_uri'), 20);
20
  }
21
 
22
  /**
@@ -44,20 +40,15 @@ class Permalink_Manager_Helper_Functions extends Permalink_Manager_Class {
44
 
45
  $primary_term_enabled = apply_filters('permalink_manager_primary_term', true);
46
 
47
- if(!$primary_term_enabled) { return; }
48
-
49
- if(class_exists('WPSEO_Primary_Term')) {
50
  $primary_term = new WPSEO_Primary_Term($taxonomy, $post_id);
51
  $primary_term = get_term($primary_term->get_primary_term());
52
- } else if(function_exists('the_seo_framework')) {
53
- $primary_term = the_seo_framework()->get_primary_term($post_id, $taxonomy);
54
- }
55
 
56
- if(!empty($primary_term) && !is_wp_error($primary_term)) {
57
- return ($slug_only) ? $primary_term->slug : $primary_term;
58
- } else {
59
- return;
60
  }
 
61
  }
62
 
63
  /**
@@ -451,62 +442,40 @@ class Permalink_Manager_Helper_Functions extends Permalink_Manager_Class {
451
 
452
  // $clean = iconv('UTF-8', 'ASCII//TRANSLIT', $clean);
453
  $percent_sign = ($keep_percent_sign) ? "\%" : "";
454
- $clean = preg_replace("/[^\p{Thai}\p{Xwd}\p{Hebrew}a-zA-Z0-9{$percent_sign}\/_\.|+, -]/u", '', $clean);
455
  $clean = ($force_lowercase) ? strtolower(trim($clean, '-')) : trim($clean, '-');
456
 
457
  // Remove special characters
458
  if($sanitize_slugs !== false) {
459
  $clean = preg_replace("/[\s_|+-]+/", "-", $clean);
460
- $clean = preg_replace("/[,]+/", "", $clean);
461
  $clean = preg_replace('/([\.]+)(?![a-z]{3,4}$)/i', '', $clean);
462
  $clean = preg_replace('/([-\s+]\/[-\s+])/', '-', $clean);
463
  } else {
464
  $clean = preg_replace("/[\s]+/", "-", $clean);
465
  }
466
 
467
- // Remove trailing slashes
468
- $clean = str_replace(array('-/', '/-', '//'), '/', $clean);
469
-
470
  return $clean;
471
  }
472
 
473
  /**
474
- * Replace empty placeholder tags & remove BOM
475
- */
476
- public static function replace_empty_placeholder_tags($default_uri, $native_slug = "", $element = "", $slug = "", $native_uri = "") {
477
- // Do not affect native URIs
478
- if($native_uri == true) { return $default_uri; }
479
-
480
- // Remove the BOM
481
- $default_uri = str_replace(array("\xEF\xBB\xBF", "%ef%bb%bf"), '', $default_uri);
482
-
483
- // Encode the URI before placeholders are removed
484
- $chunks = explode('/', $default_uri);
485
- foreach ($chunks as &$chunk) {
486
- if(preg_match("/^(%.+?%)$/", $chunk) == false) {
487
- $chunk = rawurldecode($chunk);
488
- }
489
- }
490
- $default_uri = implode("/", $chunks);
491
-
492
- $empty_tag_replacement = apply_filters('permalink_manager_empty_tag_replacement', null, $element);
493
- $default_uri = ($empty_tag_replacement || is_null($empty_tag_replacement)) ? str_replace("//", "/", preg_replace("/%(.+?)%/", $empty_tag_replacement, $default_uri)) : $default_uri;
494
-
495
- return trim($default_uri, "/");
496
- }
497
-
498
- /**
499
- * Clear/Sanitize the URI
500
  */
501
  public static function clear_single_uri($uri) {
502
- return self::sanitize_title($uri, true);
 
 
 
 
 
503
  }
504
 
505
  /**
506
  * Remove all slashes
507
  */
508
  public static function remove_slashes($uri) {
509
- return preg_replace("/[\/]+/", "", $uri);
 
 
510
  }
511
 
512
  /**
@@ -519,6 +488,10 @@ class Permalink_Manager_Helper_Functions extends Permalink_Manager_Class {
519
  $force_custom_slugs = apply_filters('permalink_manager_force_custom_slugs', $force_custom_slugs, $slug, $object);
520
 
521
  if($force_custom_slugs) {
 
 
 
 
522
  $title = (!empty($object->name)) ? $object->name : $object->post_title;
523
  $title = self::remove_slashes($title);
524
 
10
  }
11
 
12
  public function init() {
 
 
 
 
13
  // Clear the final default URIs
14
+ add_filter( 'permalink_manager_filter_default_term_uri', array('Permalink_Manager_Helper_Functions', 'clear_single_uri'), 20);
15
+ add_filter( 'permalink_manager_filter_default_post_uri', array('Permalink_Manager_Helper_Functions', 'clear_single_uri'), 20);
16
  }
17
 
18
  /**
40
 
41
  $primary_term_enabled = apply_filters('permalink_manager_primary_term', true);
42
 
43
+ if($primary_term_enabled && class_exists('WPSEO_Primary_Term')) {
 
 
44
  $primary_term = new WPSEO_Primary_Term($taxonomy, $post_id);
45
  $primary_term = get_term($primary_term->get_primary_term());
 
 
 
46
 
47
+ if(!is_wp_error($primary_term)) {
48
+ return ($slug_only) ? $primary_term->slug : $primary_term;
49
+ }
 
50
  }
51
+ return '';
52
  }
53
 
54
  /**
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('/([\.]+)(?![a-z]{3,4}$)/i', '', $clean);
452
  $clean = preg_replace('/([-\s+]\/[-\s+])/', '-', $clean);
453
  } else {
454
  $clean = preg_replace("/[\s]+/", "-", $clean);
455
  }
456
 
 
 
 
457
  return $clean;
458
  }
459
 
460
  /**
461
+ * Clear the URI
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
462
  */
463
  public static function clear_single_uri($uri) {
464
+ $uri = preg_replace("/[\s_|+-]+/", "-", $uri);
465
+ $uri = preg_replace('/([-\s+]\/[-\s+])/', '-', $uri);
466
+ $uri = str_replace(array('-/', '/-', '//'), '/', $uri);
467
+ $uri = trim($uri, "/");
468
+
469
+ return $uri;
470
  }
471
 
472
  /**
473
  * Remove all slashes
474
  */
475
  public static function remove_slashes($uri) {
476
+ $uri = preg_replace("/[\/]+/", "", $uri);
477
+
478
+ return $uri;
479
  }
480
 
481
  /**
488
  $force_custom_slugs = apply_filters('permalink_manager_force_custom_slugs', $force_custom_slugs, $slug, $object);
489
 
490
  if($force_custom_slugs) {
491
+ // Decode URI-encoded characters
492
+ //$slug = urldecode($slug);
493
+ //$title = urldecode($title);
494
+
495
  $title = (!empty($object->name)) ? $object->name : $object->post_title;
496
  $title = self::remove_slashes($title);
497
 
includes/core/permalink-manager-third-parties.php CHANGED
@@ -174,10 +174,6 @@ class Permalink_Manager_Third_Parties extends Permalink_Manager_Class {
174
  else if(!empty($query_vars['WP_Route'])) {
175
  $wp_query->query_vars['do_not_redirect'] = 1;
176
  }
177
- // WooCommerce Wishlist
178
- else if(!empty($query_vars['wishlist-action'])) {
179
- $wp_query->query_vars['do_not_redirect'] = 1;
180
- }
181
  }
182
  }
183
 
@@ -189,8 +185,7 @@ class Permalink_Manager_Third_Parties extends Permalink_Manager_Class {
189
 
190
  // Fallback
191
  if(is_string($element) && strpos($element, 'tax-') !== false) {
192
- $element_id = intval(preg_replace("/[^0-9]/", "", $element));
193
- $element = get_term($element_id);
194
  } else if(is_numeric($element)) {
195
  $element = get_post($element);
196
  }
@@ -289,7 +284,6 @@ class Permalink_Manager_Third_Parties extends Permalink_Manager_Class {
289
  $element = get_term($item_id);
290
  if(!empty($element) && !is_wp_error($element)) {
291
  $element_id = $element->term_taxonomy_id;
292
- $element_type = $element->taxonomy;
293
  } else {
294
  return false;
295
  }
@@ -297,8 +291,8 @@ class Permalink_Manager_Third_Parties extends Permalink_Manager_Class {
297
  $element = get_post($item_id);
298
 
299
  if(!empty($element->post_type)) {
300
- $element_id = $item_id;
301
  $element_type = $element->post_type;
 
302
  }
303
  }
304
 
@@ -308,7 +302,7 @@ class Permalink_Manager_Third_Parties extends Permalink_Manager_Class {
308
  $language_code = self::get_language_code($element);
309
 
310
  if(!empty($uri_parts['lang']) && ($uri_parts['lang'] != $language_code)) {
311
- $wpml_item_id = apply_filters('wpml_object_id', $element_id, $element_type);
312
  $item_id = (is_numeric($wpml_item_id)) ? $wpml_item_id : $item_id;
313
  }
314
 
@@ -661,13 +655,11 @@ class Permalink_Manager_Third_Parties extends Permalink_Manager_Class {
661
 
662
  if(!empty($object)) {
663
  $product_id = $object->get_id();
 
664
 
665
- // Ignore variations
666
- if(empty($permalink_manager_uris[$product_id]) && $object->get_type() !== 'variation') {
667
- $permalink_manager_uris[$product_id] = Permalink_Manager_URI_Functions_Post::get_default_post_uri($product_id, false, true);
668
 
669
- update_option('permalink-manager-uris', $permalink_manager_uris);
670
- }
671
  }
672
  }
673
 
@@ -689,7 +681,7 @@ class Permalink_Manager_Third_Parties extends Permalink_Manager_Class {
689
  $home_url = WPSEO_Utils::home_url();
690
  $home_protocol = parse_url($home_url, PHP_URL_SCHEME);
691
 
692
- $permalink = preg_replace("/^http(s)?/", $home_protocol, $permalink);
693
  }
694
 
695
  return $permalink;
@@ -697,97 +689,100 @@ class Permalink_Manager_Third_Parties extends Permalink_Manager_Class {
697
 
698
  function yoast_fix_breadcrumbs($links) {
699
  // Get post type permastructure settings
700
- global $permalink_manager_uris, $permalink_manager_options, $post, $wpdb, $wp;
701
 
702
- // Check if the filter should be activated
703
  if(empty($permalink_manager_options['general']['yoast_breadcrumbs']) || empty($permalink_manager_uris)) { return $links; }
704
 
705
- // Get current post/page/term (if available)
706
- $queried_element = get_queried_object();
707
- if(!empty($queried_element->ID)) {
708
- $element_id = $queried_element->ID;
709
- } else if(!empty($queried_element->term_id)) {
710
- $element_id = "tax-{$queried_element->term_id}";
711
- }
 
 
 
 
 
 
 
 
 
 
 
 
712
 
713
- // Get the custom permalink (if available) or the current request URL (if unavailable)
714
- if(!empty($element_id) && !empty($permalink_manager_uris[$element_id])) {
715
- $custom_uri = preg_replace("/([^\/]+)$/", '', $permalink_manager_uris[$element_id]);
716
- } else {
717
- $custom_uri = trim(preg_replace("/([^\/]+)$/", '', $wp->request), "/");
718
- }
719
 
720
- $all_uris = array_flip($permalink_manager_uris);
721
- $custom_uri_parts = explode('/', trim($custom_uri));
722
- $breadcrumbs = array();
723
- $snowball = '';
724
- $available_taxonomies = Permalink_Manager_Helper_Functions::get_taxonomies_array();
725
- $available_post_types = Permalink_Manager_Helper_Functions::get_post_types_array();
726
 
727
- // Get Yoast Meta (the breadcrumbs titles can be changed in Yoast metabox)
728
- $yoast_meta_terms = get_option('wpseo_taxonomy_meta');
 
729
 
730
- // Get internal breadcrumb elements
731
- foreach($custom_uri_parts as $slug) {
732
- if(empty($slug)) { continue; }
733
 
734
- $snowball = (empty($snowball)) ? $slug : "{$snowball}/{$slug}";
735
 
736
- // 1A. Try to match any custom URI
737
- if($snowball) {
738
- $uri = trim($snowball, "/");
739
- $element = (!empty($all_uris[$uri])) ? $all_uris[$uri] : false;
740
 
741
- if(!empty($element) && strpos($element, 'tax-') !== false) {
742
- $element_id = intval(preg_replace("/[^0-9]/", "", $element));
743
- $element = get_term($element_id);
744
- } else if(is_numeric($element)) {
745
- $element = get_post($element);
746
  }
747
- }
748
-
749
- // 1B. Try to get term
750
- if(empty($element) && !empty($available_taxonomies)) {
751
- $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)));
752
-
753
- $element = $wpdb->get_row($sql);
754
- }
755
 
756
- // 1C. Try to get page/post
757
- if(empty($element) && !empty($available_post_types)) {
758
- $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)));
759
 
760
- $element = $wpdb->get_row($sql);
761
- }
762
 
763
- // 2A. When the term is found, we can add it to the breadcrumbs
764
- if(!empty($element->term_id)) {
765
- $title = (!empty($yoast_meta_terms[$element->taxonomy][$element->term_id]['wpseo_bctitle'])) ? $yoast_meta_terms[$element->taxonomy][$element->term_id]['wpseo_bctitle'] : $element->name;
766
 
767
- $breadcrumbs[] = array(
768
- 'text' => $title,
769
- 'url' => get_term_link((int) $element->term_id, $element->taxonomy),
770
- );
771
- }
772
- // 2B. When the post/page is found, we can add it to the breadcrumbs
773
- else if(!empty($element->ID)) {
774
- $title = get_post_meta($element->ID, '_yoast_wpseo_bctitle', true);
775
- $title = (!empty($title)) ? $title : $element->post_title;
776
 
777
- $breadcrumbs[] = array(
778
- 'text' => $title,
779
- 'url' => get_permalink($element->ID),
780
- );
 
 
 
 
 
 
 
 
 
 
 
 
781
  }
782
- }
783
 
784
- // Add new links to current breadcrumbs array
785
- if(!empty($links) && is_array($links)) {
786
- $first_element = reset($links);
787
- $last_element = end($links);
788
- $breadcrumbs = (!empty($breadcrumbs)) ? $breadcrumbs : array();
789
 
790
- $links = array_merge(array($first_element), $breadcrumbs, array($last_element));
 
791
  }
792
 
793
  return array_filter($links);
174
  else if(!empty($query_vars['WP_Route'])) {
175
  $wp_query->query_vars['do_not_redirect'] = 1;
176
  }
 
 
 
 
177
  }
178
  }
179
 
185
 
186
  // Fallback
187
  if(is_string($element) && strpos($element, 'tax-') !== false) {
188
+ $element = get_term($element);
 
189
  } else if(is_numeric($element)) {
190
  $element = get_post($element);
191
  }
284
  $element = get_term($item_id);
285
  if(!empty($element) && !is_wp_error($element)) {
286
  $element_id = $element->term_taxonomy_id;
 
287
  } else {
288
  return false;
289
  }
291
  $element = get_post($item_id);
292
 
293
  if(!empty($element->post_type)) {
 
294
  $element_type = $element->post_type;
295
+ $element_id = $item_id;
296
  }
297
  }
298
 
302
  $language_code = self::get_language_code($element);
303
 
304
  if(!empty($uri_parts['lang']) && ($uri_parts['lang'] != $language_code)) {
305
+ $wpml_item_id = apply_filters('wpml_object_id', $element_id);
306
  $item_id = (is_numeric($wpml_item_id)) ? $wpml_item_id : $item_id;
307
  }
308
 
655
 
656
  if(!empty($object)) {
657
  $product_id = $object->get_id();
658
+ $product_uri = Permalink_Manager_URI_Functions_Post::get_default_post_uri($product_id, false, true);
659
 
660
+ $permalink_manager_uris[$product_id] = $product_uri;
 
 
661
 
662
+ update_option('permalink-manager-uris', $permalink_manager_uris);
 
663
  }
664
  }
665
 
681
  $home_url = WPSEO_Utils::home_url();
682
  $home_protocol = parse_url($home_url, PHP_URL_SCHEME);
683
 
684
+ $permalink = preg_replace("/http(s)?/", $home_protocol, $permalink);
685
  }
686
 
687
  return $permalink;
689
 
690
  function yoast_fix_breadcrumbs($links) {
691
  // Get post type permastructure settings
692
+ global $permalink_manager_permastructs, $permalink_manager_uris, $permalink_manager_options, $post, $wpdb, $wp;
693
 
694
+ // Check if filter should be activated
695
  if(empty($permalink_manager_options['general']['yoast_breadcrumbs']) || empty($permalink_manager_uris)) { return $links; }
696
 
697
+ // Get post type
698
+ $post_type = (!empty($post->post_type)) ? $post->post_type : '';
699
+
700
+ if(!empty($post_type) && !empty($permalink_manager_permastructs) && !empty($permalink_manager_permastructs['post_types'][$post_type])) {
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
+ } /*else {
707
+ return $links;
708
+ }*/
709
+
710
+ if(!empty($element_id) && !empty($permalink_manager_uris[$element_id])) {
711
+ $custom_uri = preg_replace("/([^\/]+)$/", '', $permalink_manager_uris[$element_id]);
712
+ } else {
713
+ $custom_uri = trim(preg_replace("/([^\/]+)$/", '', $wp->request), "/");
714
+ //return $links;
715
+ }
716
 
717
+ $all_uris = array_flip($permalink_manager_uris);
718
+ $custom_uri_parts = explode('/', trim($custom_uri));
719
+ $breadcrumbs = array();
720
+ $snowball = '';
 
 
721
 
722
+ // Get Yoast meta
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
+ $available_taxonomies = Permalink_Manager_Helper_Functions::get_taxonomies_array();
730
+ $available_post_types = Permalink_Manager_Helper_Functions::get_post_types_array();
 
731
 
732
+ $snowball = (empty($snowball)) ? $slug : "{$snowball}/{$slug}";
733
 
734
+ // A. Try to match any custom URI
735
+ if($snowball) {
736
+ $uri = trim($snowball, "/");
737
+ $element = (!empty($all_uris[$uri])) ? $all_uris[$uri] : false;
738
 
739
+ if(!empty($element) && strpos($element, 'tax-') !== false) {
740
+ $element = get_term($element);
741
+ } else if(is_numeric($element)) {
742
+ $element = get_post($element);
743
+ }
744
  }
 
 
 
 
 
 
 
 
745
 
746
+ // B. Try to get term
747
+ if(empty($element) && !empty($available_taxonomies)) {
748
+ $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)));
749
 
750
+ $element = $wpdb->get_row($sql);
751
+ }
752
 
753
+ // C. Try to get page/post
754
+ if(empty($element) && !empty($available_post_types)) {
755
+ $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)));
756
 
757
+ $element = $wpdb->get_row($sql);
758
+ }
 
 
 
 
 
 
 
759
 
760
+ if(!empty($element->term_id)) {
761
+ $title = (!empty($yoast_meta_terms[$element->taxonomy][$element->term_id]['wpseo_bctitle'])) ? $yoast_meta_terms[$element->taxonomy][$element->term_id]['wpseo_bctitle'] : $element->name;
762
+
763
+ $breadcrumbs[] = array(
764
+ 'text' => $title,
765
+ 'url' => get_term_link((int) $element->term_id, $element->taxonomy),
766
+ );
767
+ } else if(!empty($element->ID)) {
768
+ $title = get_post_meta($element->ID, '_yoast_wpseo_bctitle', true);
769
+ $title = (!empty($title)) ? $title : $element->post_title;
770
+
771
+ $breadcrumbs[] = array(
772
+ 'text' => $title,
773
+ 'url' => get_permalink($element->ID),
774
+ );
775
+ }
776
  }
 
777
 
778
+ // Get new links
779
+ if(!empty($links) && is_array($links)) {
780
+ $first_element = reset($links);
781
+ $last_element = end($links);
782
+ $breadcrumbs = (!empty($breadcrumbs)) ? $breadcrumbs : array();
783
 
784
+ $links = array_merge(array($first_element), $breadcrumbs, array($last_element));
785
+ }
786
  }
787
 
788
  return array_filter($links);
includes/core/permalink-manager-uri-functions-post.php CHANGED
@@ -23,11 +23,9 @@ class Permalink_Manager_URI_Functions_Post extends Permalink_Manager_Class {
23
  * URI Editor
24
  */
25
  add_filter( 'get_sample_permalink_html', array($this, 'edit_uri_box'), 99, 5 );
26
-
27
  add_action( 'save_post', array($this, 'update_post_uri'), 99, 1);
28
  add_action( 'edit_attachment', array($this, 'update_post_uri'), 99, 1 );
29
  add_action( 'wp_insert_post', array($this, 'new_post_uri'), 99, 1 );
30
- add_action( 'add_attachment', array($this, 'new_post_uri'), 99, 1 );
31
  add_action( 'wp_trash_post', array($this, 'remove_post_uri'), 100, 1 );
32
 
33
  add_action( 'quick_edit_custom_box', array($this, 'quick_edit_column_form'), 99, 3);
@@ -58,9 +56,6 @@ class Permalink_Manager_URI_Functions_Post extends Permalink_Manager_Class {
58
  // Do not filter in Elementor
59
  if(!empty($_GET['action']) && $_GET['action'] == 'elementor') { return $permalink; }
60
 
61
- // Do not filter in WPML String Editor
62
- if(!empty($_REQUEST['icl_ajx_action']) && $_REQUEST['icl_ajx_action'] == 'icl_st_save_translation') { return $permalink; }
63
-
64
  $post = (is_integer($post)) ? get_post($post) : $post;
65
 
66
  // Start with homepage URL
@@ -85,14 +80,14 @@ class Permalink_Manager_URI_Functions_Post extends Permalink_Manager_Class {
85
  if(isset($permalink_manager_uris[$post->ID])) {
86
  // Encode URI?
87
  if(!empty($permalink_manager_options['general']['decode_uris'])) {
88
- $permalink = "{$home_url}/" . rawurldecode("/{$permalink_manager_uris[$post->ID]}");
89
  } else {
90
  $permalink = "{$home_url}/" . Permalink_Manager_Helper_Functions::encode_uri("{$permalink_manager_uris[$post->ID]}");
91
  }
92
  } else if($post->post_type == 'attachment' && $post->post_parent > 0 && $post->post_parent != $post->ID && !empty($permalink_manager_uris[$post->post_parent])) {
93
  $permalink = "{$home_url}/{$permalink_manager_uris[$post->post_parent]}/attachment/{$post->post_name}";
94
  } else if(!empty($permalink_manager_options['general']['decode_uris'])) {
95
- $permalink = "{$home_url}/" . rawurldecode("/{$permalink}");
96
  }
97
 
98
  // 5. Allow to filter (do not filter in Customizer)
@@ -384,12 +379,6 @@ class Permalink_Manager_URI_Functions_Post extends Permalink_Manager_Class {
384
  $where .= ")";
385
  }
386
 
387
- // Get excluded items
388
- $exclude_posts = $wpdb->get_col("SELECT post_ID FROM {$wpdb->postmeta} AS pm LEFT JOIN {$wpdb->posts} AS p ON (pm.post_ID = p.ID) WHERE pm.meta_key = 'auto_update_uri' AND pm.meta_value = '-2' AND post_type IN ('{$post_types}')");
389
- if(!empty($exclude_posts)) {
390
- $where .= sprintf("AND ID NOT IN ('%s')", implode("', '", $exclude_posts));
391
- }
392
-
393
  // Support for attachments
394
  $attachment_support = (in_array('attachment', $post_types_array)) ? " OR (post_type = 'attachment')" : "";
395
 
@@ -478,6 +467,9 @@ class Permalink_Manager_URI_Functions_Post extends Permalink_Manager_Class {
478
  // Now if the array is not empty use IDs from each subarray as a key
479
  if($posts_to_update && empty($errors)) {
480
  foreach ($posts_to_update as $row) {
 
 
 
481
  // Get default & native URL
482
  $native_uri = self::get_default_post_uri($row['ID'], true);
483
  $default_uri = self::get_default_post_uri($row['ID']);
@@ -543,6 +535,9 @@ class Permalink_Manager_URI_Functions_Post extends Permalink_Manager_Class {
543
 
544
  if (!empty($new_uris)) {
545
  foreach($new_uris as $id => $new_uri) {
 
 
 
546
  // Prepare variables
547
  $this_post = get_post($id);
548
  $updated = '';
@@ -618,7 +613,7 @@ class Permalink_Manager_URI_Functions_Post extends Permalink_Manager_Class {
618
  }
619
 
620
  // Decode URI & allow to filter it
621
- $sample_permalink_uri = apply_filters('permalink_manager_filter_post_sample_uri', rawurldecode($sample_permalink_uri), $post);
622
 
623
  // Prepare the sample & default permalink
624
  $sample_permalink = sprintf("%s/<span class=\"editable\">%s</span>", $home_url, str_replace("//", "/", $sample_permalink_uri));
@@ -660,7 +655,7 @@ class Permalink_Manager_URI_Functions_Post extends Permalink_Manager_Class {
660
  $auto_update_val = get_post_meta($post_id, "auto_update_uri", true);
661
  $auto_update_uri = (!empty($auto_update_val)) ? $auto_update_val : $permalink_manager_options["general"]["auto_update_uris"];
662
 
663
- $uri = (!empty($permalink_manager_uris[$post_id])) ? rawurldecode($permalink_manager_uris[$post_id]) : self::get_post_uri($post_id, true);
664
  printf('<span class="permalink-manager-col-uri" data-auto_update="%s">%s</span>', intval($auto_update_uri), $uri);
665
  }
666
  }
@@ -773,6 +768,9 @@ class Permalink_Manager_URI_Functions_Post extends Permalink_Manager_Class {
773
  // Use default URI if URI is cleared by user OR URI should be automatically updated
774
  $new_uri = (($_POST['custom_uri'] == '') || $auto_update_uri == 1) ? $default_uri : Permalink_Manager_Helper_Functions::sanitize_title($_POST['custom_uri'], true);
775
 
 
 
 
776
  // Save or remove "Auto-update URI" settings
777
  if(!empty($auto_update_uri_current)) {
778
  update_post_meta($post_id, "auto_update_uri", $auto_update_uri_current);
23
  * URI Editor
24
  */
25
  add_filter( 'get_sample_permalink_html', array($this, 'edit_uri_box'), 99, 5 );
 
26
  add_action( 'save_post', array($this, 'update_post_uri'), 99, 1);
27
  add_action( 'edit_attachment', array($this, 'update_post_uri'), 99, 1 );
28
  add_action( 'wp_insert_post', array($this, 'new_post_uri'), 99, 1 );
 
29
  add_action( 'wp_trash_post', array($this, 'remove_post_uri'), 100, 1 );
30
 
31
  add_action( 'quick_edit_custom_box', array($this, 'quick_edit_column_form'), 99, 3);
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
80
  if(isset($permalink_manager_uris[$post->ID])) {
81
  // Encode URI?
82
  if(!empty($permalink_manager_options['general']['decode_uris'])) {
83
+ $permalink = "{$home_url}/" . urldecode("/{$permalink_manager_uris[$post->ID]}");
84
  } else {
85
  $permalink = "{$home_url}/" . Permalink_Manager_Helper_Functions::encode_uri("{$permalink_manager_uris[$post->ID]}");
86
  }
87
  } else if($post->post_type == 'attachment' && $post->post_parent > 0 && $post->post_parent != $post->ID && !empty($permalink_manager_uris[$post->post_parent])) {
88
  $permalink = "{$home_url}/{$permalink_manager_uris[$post->post_parent]}/attachment/{$post->post_name}";
89
  } else if(!empty($permalink_manager_options['general']['decode_uris'])) {
90
+ $permalink = "{$home_url}/" . urldecode("/{$permalink}");
91
  }
92
 
93
  // 5. Allow to filter (do not filter in Customizer)
379
  $where .= ")";
380
  }
381
 
 
 
 
 
 
 
382
  // Support for attachments
383
  $attachment_support = (in_array('attachment', $post_types_array)) ? " OR (post_type = 'attachment')" : "";
384
 
467
  // Now if the array is not empty use IDs from each subarray as a key
468
  if($posts_to_update && empty($errors)) {
469
  foreach ($posts_to_update as $row) {
470
+ // Prevent server timeout
471
+ set_time_limit(0);
472
+
473
  // Get default & native URL
474
  $native_uri = self::get_default_post_uri($row['ID'], true);
475
  $default_uri = self::get_default_post_uri($row['ID']);
535
 
536
  if (!empty($new_uris)) {
537
  foreach($new_uris as $id => $new_uri) {
538
+ // Prevent server timeout
539
+ set_time_limit(0);
540
+
541
  // Prepare variables
542
  $this_post = get_post($id);
543
  $updated = '';
613
  }
614
 
615
  // Decode URI & allow to filter it
616
+ $sample_permalink_uri = apply_filters('permalink_manager_filter_post_sample_uri', urldecode($sample_permalink_uri), $post);
617
 
618
  // Prepare the sample & default permalink
619
  $sample_permalink = sprintf("%s/<span class=\"editable\">%s</span>", $home_url, str_replace("//", "/", $sample_permalink_uri));
655
  $auto_update_val = get_post_meta($post_id, "auto_update_uri", true);
656
  $auto_update_uri = (!empty($auto_update_val)) ? $auto_update_val : $permalink_manager_options["general"]["auto_update_uris"];
657
 
658
+ $uri = (!empty($permalink_manager_uris[$post_id])) ? urldecode($permalink_manager_uris[$post_id]) : self::get_post_uri($post_id, true);
659
  printf('<span class="permalink-manager-col-uri" data-auto_update="%s">%s</span>', intval($auto_update_uri), $uri);
660
  }
661
  }
768
  // Use default URI if URI is cleared by user OR URI should be automatically updated
769
  $new_uri = (($_POST['custom_uri'] == '') || $auto_update_uri == 1) ? $default_uri : Permalink_Manager_Helper_Functions::sanitize_title($_POST['custom_uri'], true);
770
 
771
+ // Remove the empty placeholder tags
772
+ $new_uri = Permalink_Manager_Core_Functions::replace_empty_placeholder_tags($new_uri);
773
+
774
  // Save or remove "Auto-update URI" settings
775
  if(!empty($auto_update_uri_current)) {
776
  update_post_meta($post_id, "auto_update_uri", $auto_update_uri_current);
includes/views/permalink-manager-settings.php CHANGED
@@ -45,18 +45,6 @@ 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
- '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
  ),
@@ -92,7 +80,13 @@ class Permalink_Manager_Settings extends Permalink_Manager_Class {
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,15 +134,9 @@ class Permalink_Manager_Settings extends Permalink_Manager_Class {
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
  )
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
  ),
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
  ),
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
  )
includes/views/permalink-manager-uri-editor-post.php CHANGED
@@ -172,7 +172,7 @@ class Permalink_Manager_URI_Editor_Post extends WP_List_Table {
172
  $html .= "<option value=\"{$month_raw}\" {$selected}>{$month_human_name}</option>";
173
  }
174
  $html .= "</select>";
175
- $html .= get_submit_button(__("Filter", "permalink-manager"), 'button', false, false, array('id' => 'months-filter-button', 'name' => 'months-filter-button'));
176
  $html .= "</div>";
177
  }
178
  }
@@ -233,14 +233,13 @@ class Permalink_Manager_URI_Editor_Post extends WP_List_Table {
233
  // Grab posts from database
234
  $sql_parts['start'] = "SELECT * FROM {$wpdb->posts} ";
235
  if($search_query) {
236
- $sql_parts['where'] = "WHERE (post_name LIKE ('%{$search_query}%') ";
237
 
238
  // Search in array with custom URIs
239
  $found = Permalink_Manager_Helper_Functions::search_uri($search_query, 'posts');
240
  if($found) {
241
  $sql_parts['where'] .= sprintf("OR ID IN ('%s')", implode(',', (array) $found));
242
  }
243
- $sql_parts['where'] .= " ) AND ((post_status IN ($this->displayed_post_statuses) AND post_type IN ($this->displayed_post_types)) {$attachment_support}) {$extra_filters} ";
244
  } else {
245
  $sql_parts['where'] = "WHERE ((post_status IN ($this->displayed_post_statuses) AND post_type IN ($this->displayed_post_types)) {$attachment_support}) {$extra_filters} ";
246
  }
172
  $html .= "<option value=\"{$month_raw}\" {$selected}>{$month_human_name}</option>";
173
  }
174
  $html .= "</select>";
175
+ $html .= sprintf("<input id=\"months-filter-button\" class=\"button\" value=\"%s\" type=\"submit\">", __("Filter", "permalink-manager"));
176
  $html .= "</div>";
177
  }
178
  }
233
  // Grab posts from database
234
  $sql_parts['start'] = "SELECT * FROM {$wpdb->posts} ";
235
  if($search_query) {
236
+ $sql_parts['where'] = "WHERE post_name LIKE ('%{$search_query}%') ";
237
 
238
  // Search in array with custom URIs
239
  $found = Permalink_Manager_Helper_Functions::search_uri($search_query, 'posts');
240
  if($found) {
241
  $sql_parts['where'] .= sprintf("OR ID IN ('%s')", implode(',', (array) $found));
242
  }
 
243
  } else {
244
  $sql_parts['where'] = "WHERE ((post_status IN ($this->displayed_post_statuses) AND post_type IN ($this->displayed_post_types)) {$attachment_support}) {$extra_filters} ";
245
  }
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: 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,7 +14,7 @@ msgstr ""
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,642 +23,750 @@ msgid ""
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,529 +774,399 @@ msgid ""
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
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
  "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
  "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
  "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
out/permalink-manager-admin.js CHANGED
@@ -23,43 +23,19 @@ jQuery(document).ready(function() {
23
  });
24
 
25
  /**
26
- * Filter by dates + Search in URI Editor
27
  */
28
- jQuery('#permalink-manager #months-filter-button, #permalink-manager #search-submit').on('click', function(e) {
29
- var search_value = jQuery('#permalink-manager input[name="s"]').val();
30
  var filter_value = jQuery("#months-filter-select").val();
 
31
 
32
- var filter_url = window.location.href;
33
-
34
- // Date filter
35
- if(filter_url.indexOf('month=') > 1) {
36
- filter_url = filter_url.replace(/month=([^&]+)/gm, 'month=' + filter_value);
37
- } else if(filter_value != '') {
38
- filter_url = filter_url + '&month=' + filter_value;
39
- }
40
-
41
- // Search query
42
- if(filter_url.indexOf('s=') > 1) {
43
- filter_url = filter_url.replace(/s=([^&]+)/gm, 's=' + search_value);
44
- } else if(search_value != '') {
45
- filter_url = filter_url + '&s=' + search_value;
46
  }
47
-
48
- window.location.href = filter_url;
49
-
50
- e.preventDefault();
51
  return false;
52
  });
53
 
54
- jQuery('#permalink-manager #uri_editor form input[name="s"]').on('keydown keypress keyup', function(e){
55
- if(e.keyCode == 13) {
56
- jQuery('#permalink-manager #search-submit').trigger('click');
57
-
58
- e.preventDefault();
59
- return false;
60
- }
61
- });
62
-
63
  /**
64
  * Filter by content types in "Tools"
65
  */
23
  });
24
 
25
  /**
26
+ * Filter by dates in "Permalink editor"
27
  */
28
+ jQuery('#permalink-manager #months-filter-button').on('click', function() {
29
+ var filter_name = jQuery("#months-filter-select").attr('name');
30
  var filter_value = jQuery("#months-filter-select").val();
31
+ var url = jQuery(this).parent().data('filter-url');
32
 
33
+ if(filter_name != '' && filter_value != '' && url != ''){
34
+ document.location.href = url + "&" + filter_name + "=" + filter_value;
 
 
 
 
 
 
 
 
 
 
 
 
35
  }
 
 
 
 
36
  return false;
37
  });
38
 
 
 
 
 
 
 
 
 
 
39
  /**
40
  * Filter by content types in "Tools"
41
  */
permalink-manager.php CHANGED
@@ -4,7 +4,7 @@
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.3
8
  * Author: Maciej Bis
9
  * Author URI: http://maciejbis.net/
10
  * License: GPL-2.0+
@@ -12,7 +12,7 @@
12
  * Text Domain: permalink-manager
13
  * Domain Path: /languages
14
  * WC requires at least: 3.0.0
15
- * WC tested up to: 3.8.0
16
  */
17
 
18
  // If this file is called directly or plugin is already defined, abort.
@@ -23,10 +23,10 @@ if (!defined('WPINC')) {
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.3' );
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' );
@@ -117,7 +117,7 @@ class Permalink_Manager_Class {
117
  * Localize this plugin
118
  */
119
  function localize_me() {
120
- load_plugin_textdomain( 'permalink-manager', false, basename(dirname(__FILE__)) . "/languages" );
121
  }
122
 
123
  /**
@@ -157,12 +157,11 @@ class Permalink_Manager_Class {
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,7 +170,6 @@ class Permalink_Manager_Class {
171
  'disable_slug_sanitization' => 0,
172
  'partial_disable' => array(),
173
  'deep_detect' => 1,
174
- 'edit_uris_cap' => 'publish_posts',
175
  ),
176
  'licence' => array()
177
  ));
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.6
8
  * Author: Maciej Bis
9
  * Author URI: http://maciejbis.net/
10
  * License: GPL-2.0+
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.6' );
27
  define( 'PERMALINK_MANAGER_FILE', __FILE__ );
28
  define( 'PERMALINK_MANAGER_DIR', untrailingslashit(dirname(__FILE__)) );
29
+ define( 'PERMALINK_MANAGER_BASENAME', dirname(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' );
117
  * Localize this plugin
118
  */
119
  function localize_me() {
120
+ load_plugin_textdomain( 'permalink-manager', false, PERMALINK_MANAGER_BASENAME . "/languages" );
121
  }
122
 
123
  /**
157
  'general' => array(
158
  'auto_update_uris' => 0,
159
  'show_native_slug_field' => 0,
 
 
160
  'canonical_redirect' => 1,
161
  'setup_redirects' => 1,
162
  'redirect' => '301',
163
  'trailing_slashes' => 0,
164
+ 'pagination_redirect' => 0,
165
  'auto_remove_duplicates' => 1,
166
  'fix_language_mismatch' => 1,
167
  'pmxi_import_support' => 0,
170
  'disable_slug_sanitization' => 0,
171
  'partial_disable' => array(),
172
  'deep_detect' => 1,
 
173
  ),
174
  'licence' => array()
175
  ));