mbis

Keep the custom permalinks unique

Oct 26th, 2021
1,025
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function pm_unique_permalinks($default_uri, $native_slug, $element, $post_name, $native_uri) {
  2.     global $permalink_manager_uris;
  3.  
  4.     // Ignore native permalinks
  5.     if($native_uri) { return $default_uri; }
  6.  
  7.     // Store all the custom permalinks in a separate variable
  8.     $uris = $permalink_manager_uris;
  9.  
  10.     // Exclude this element
  11.     if(!empty($element->ID) && !empty($uris[$element->ID])) {
  12.         unset($uris[$element->ID]);
  13.     } else if(!empty($element->term_id) && !empty($uris[$element->term_id])) {
  14.         unset($uris["tax-{$element->term_id}"]);
  15.     }
  16.  
  17.     do {
  18.         $duplicates_ids = array_keys($uris, $default_uri);
  19.         $duplicates_ids_count = count($duplicates_ids);
  20.  
  21.         if(!empty($duplicates_ids_count)) {
  22.             preg_match('/(.+?)(?:-([\d]+))?(\.[^\.]+$|$)/', $default_uri, $parts);
  23.             $index = (!empty($parts[2])) ? $parts[2] + 1 : 2;
  24.  
  25.             $default_uri = preg_replace('/(.+?)(?:-([\d]+))?(\.[^\.]+$|$)/', '$1-' . $index . '$3', $default_uri);
  26.         }
  27.     } while ($duplicates_ids_count > 0);
  28.  
  29.     return $default_uri;
  30. }
  31. add_filter('permalink_manager_filter_default_post_uri', 'pm_unique_permalinks', 999, 5);
  32. add_filter('permalink_manager_filter_default_term_uri', 'pm_unique_permalinks', 999, 5);
RAW Paste Data