SHOW:
|
|
- or go back to the newest paste.
| 1 | function pm_detect_old_slugs() {
| |
| 2 | global $wp_query, $wp, $wpdb; | |
| 3 | ||
| 4 | // Stop if any post or term was already found by Permalink Manager | |
| 5 | if(!empty($wp_query->query['do_not_redirect']) || !empty($wp_query->query_vars['do_not_redirect']) || (!is_404())) {
| |
| 6 | return; | |
| 7 | } | |
| 8 | ||
| 9 | // Get all the endpoints & pattern | |
| 10 | - | preg_match('/([^\/]+)(?:\/([\d]+))?/', $wp->request, $parts);
|
| 10 | + | if(class_exists('Permalink_Manager_Helper_Functions')) {
|
| 11 | $endpoints = Permalink_Manager_Helper_Functions::get_endpoints(); | |
| 12 | - | $post_id = $wpdb->get_var($wpdb->prepare("SELECT post_id from {$wpdb->postmeta} WHERE meta_key = '_wp_old_slug' AND meta_value LIKE '%%%s%%'", $parts[1]));
|
| 12 | + | $pattern = "/^(.+?)(?|\/({$endpoints})(?|\/(.*)|$)|\/()([\d]+)\/?)?$/i";
|
| 13 | } else {
| |
| 14 | - | // Redirect if post with old slug was found |
| 14 | + | $pattern = '/([^\/]+)?(?:\/([\d]+))?/'; |
| 15 | } | |
| 16 | ||
| 17 | - | $permalink = (!empty($parts[2])) ? sprintf('%s/%d', trim($permalink, '/'), $parts[2]) : '';
|
| 17 | + | |
| 18 | preg_match($pattern, $wp->request, $parts); | |
| 19 | if(!empty($parts[1])) {
| |
| 20 | $slug = basename($parts[1]); | |
| 21 | $post_id = $wpdb->get_var($wpdb->prepare("SELECT post_id from {$wpdb->postmeta} WHERE meta_key = '_wp_old_slug' AND meta_value LIKE '%%%s%%'", $slug));
| |
| 22 | ||
| 23 | // Parse the endpoints | |
| 24 | $endpoint = (!empty($parts[2])) ? $parts[2] : ''; | |
| 25 | $endpoint_value = (!empty($parts[3])) ? $parts[3] : ''; | |
| 26 | ||
| 27 | // Redirect if any post with old slug was found | |
| 28 | if(!empty($post_id)) {
| |
| 29 | $permalink = get_permalink($post_id); | |
| 30 | ||
| 31 | if(!empty($endpoint_value) || !empty($endpoint)) {
| |
| 32 | if(empty($endpoint) && is_numeric($endpoint_value)) {
| |
| 33 | $permalink = sprintf("%s/%d", trim($permalink, "/"), $endpoint_value);
| |
| 34 | } else if(isset($endpoint) && !empty($endpoint_value)) {
| |
| 35 | $permalink = sprintf("%s/%s/%s", trim($permalink, "/"), $endpoint, $endpoint_value);
| |
| 36 | } else {
| |
| 37 | $permalink = sprintf("%s/%s", trim($permalink, "/"), $endpoint);
| |
| 38 | } | |
| 39 | } | |
| 40 | ||
| 41 | wp_safe_redirect($permalink, 301); | |
| 42 | exit(); | |
| 43 | } | |
| 44 | } | |
| 45 | } | |
| 46 | add_action('template_redirect', 'pm_detect_old_slugs', 0); |