SHOW:
|
|
- or go back to the newest paste.
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); |