post_type !== 'sp_event') { return $permalink; } $event = new SP_Event($post->ID); $teams = get_post_meta($post->ID,'sp_team', false); $format = get_post_meta($post->ID,'sp_format', true); sort($teams); $seasons = get_the_terms($post->ID, 'sp_season', true ); if ($seasons) { $seasons_slug = implode( "-", array_map(function($season){return $season->slug;},$seasons), ); } else { $seasons_slug = "no-season"; }; // Get the teams associated with the event $team_1 = get_post($teams[0]); $team_2 = get_post($teams[1]); switch ($format) { case 'league': $format_string = 'game'; break; case 'tournament': $format_string = 'game'; break; case 'friendly': $format_string = 'event'; break; default: $format_string = 'event'; break; } if ($team_1 && $team_2) { $permalink = home_url($format_string ."/". $seasons_slug . '/' . $team_1->post_name . '-' . $team_2->post_name . '/' . $post->ID); } return $permalink; } add_filter('post_type_link', 'custom_event_permalink', 10, 2); // Flush rewrite rules on activation and deactivation function custom_event_rewrite_flush() { custom_event_rewrite_rules(); flush_rewrite_rules(); } register_activation_hook(__FILE__, 'custom_event_rewrite_flush'); register_deactivation_hook(__FILE__, 'flush_rewrite_rules'); // Modify the query to handle custom permalinks and include future posts function custom_event_parse_request($query) { $post_type = sp_array_value( $query->query, 'post_type', null ); if (isset($query->query_vars['post_type']) && $query->query_vars['post_type'] === 'sp_event') { if (isset($query->query_vars['p'])) { $query->set('post_type', 'sp_event'); $query->set('p', $query->query_vars['p']); $query->set('post_status', array('publish', 'future')); } } } add_action('pre_get_posts', 'custom_event_parse_request');