Match ends, Oxford United 1, Wycombe Wanderers 2.
Wycombe Wanderers will play in the second tier of English football for the first time next season after edging past Oxford United in the League One play-off final at Wembley.
A tense and tight contest was settled by a Joe Jacobson penalty with just over 10 minutes to play after Fred Onyedinma was fouled by Oxford goalkeeper Simon Eastwood.
Wycombe had taken an early lead when centre-back Anthony Stewart headed in a dangerous Jacobson corner via a deflection off Eastwood.
Oxford found a second-half equaliser when Mark Sykes lobbed Ryan Allsop with what appeared to be a mishit cross, but the U's could not capitalise further during what was their best spell of the game.
- Promotion is our 'greatest hit' - Ainsworth
- Relive how Wycombe won the League One play-off final
- Quiz: Test your knowledge of previous third-tier finals
Wycombe's victory capped off an incredible season for the Buckinghamshire club, who almost dropped out of the English Football League in 2014 and arguably started this campaign as relegation candidates based on their bottom-six finish the previous season.
Added to that, when the regular season was suspended in March because of the coronavirus pandemic, the Chairboys were outside the play-off places in the third tier.
But when the final league standings were determined on an unweighted points-per-game basis, Gareth Ainsworth's side leapt up to third to book their shot at promotion.
After seeing off Fleetwood Town in their play-off semi-final, they got the better of their neighbours from just up the M40 in what was a pulsating affair.
Chairboys make fast start
Wycombe took the lead from their first corner of the game as left-back Jacobson caused panic in the Oxford defence, his left-footed inswinger catching out goalkeeper Eastwood who was unable to punch it clear.
Stewart was on the end of it at the back post to head towards goal and the final touch into the net came off Eastwood's leg.
Stewart found himself in the thick of Oxford's best chance to equalise, making a brilliant interception to deny Matty Taylor a simple finish.
Moments earlier, Sam Long had fired a shot across goal inches wide after linking up well with Sykes down the right wing.
U's show fight with Sykes' surprise strike
Oxford came out with the more attacking intent after the break and despite their continued pressure, their equaliser came relatively out of the blue.
Sykes once more found space down the right wing and as he seemed set to send in a cross, he actually managed to find the far corner after lobbing the ball over an outstretched Allsop.
Whether or not it was an intentional finish seemed to matter little as Oxford continued to force the game.
Another timely last-ditch Stewart interception prevented Taylor from tapping into an empty net, while Rob Dickie had powerful headers from two successive set-pieces parried away by the Wycombe goalkeeper.
Jacobson the coolest customer on sticky Wembley stage
Ultimately, they would prove to be chances that Oxford spurned while on top as Wycombe's patience was rewarded when they forced the mistake that led to the match-winning penalty.
A long ball over the top caused confusion in Oxford's back line as at first Eastwood stayed on his line, and then came out too late to get to the ball first.
Wycombe forward Onyedinma had got just enough of a touch on the ball before he was flattened in the area and referee Rob Jones had no hesitation awarding a spot-kick, which Jacobson fired home down the middle.
That would prove to be the winning moment as Allsop kept his cool at the other end to gather a couple more headers on goal from Taylor and Dickie, and that meant the Wycombe celebrations were loud and proud come full-time.
Promotion to Championship 'just surreal' - reaction to Wycombe's win
Wycombe manager Gareth Ainsworth: "It's an amazing feeling. To take this club into the Championship is just surreal, it's beyond my wildest dreams.
"Today is just the culmination of all the desire and heart of all those boys out there on the pitch. They absolutely delivered and then some.
"It wasn't the greatest game we've played in the world. This was always going to be cagey. My goalkeeper has made two world-class saves, they really came at us and are a good side.
"But that was destined today. There are 25 individual stories that have ended in the Championship and I'm so proud of the boys. They've been amazing."
Oxford manager Karl Robinson: "We've been done early on by a goal that you'd expect to come from the opposition.
"The longer the game went on, I thought we played wonderfully well and we missed some key chances as important stages in the game.
"All of the things that were out of our control didn't fall for us. We've probed and just not taken our chance. The mistakes that we made were small errors and unfortunately it's cost us."
- 12LongSubstituted forFordeat 79'minutes
- 6GorrinBooked at 27minsSubstituted forKellyat 45'minutes
- 17HenrySubstituted forAgyeiat 79'minutes
- 30BrowneSubstituted forWoodburnat 89'minutes
- 28OfoborhSubstituted forThompsonat 62'minutesBooked at 71mins
- 10BloomfieldSubstituted forPattisonat 45'minutes
- 25SamuelSubstituted forAkinfenwaat 62'minutes
- 23OnyedinmaSubstituted forFreemanat 90+3'minutes
- 2Coelho Jombati
- Robert Jones
- Shots on Target
Second Half ends, Oxford United 1, Wycombe Wanderers 2.
Attempt saved. David Wheeler (Wycombe Wanderers) right footed shot from the right side of the box is saved in the bottom left corner.
Foul by Matty Taylor (Oxford United).
Anthony Stewart (Wycombe Wanderers) wins a free kick in the defensive half.
Substitution, Wycombe Wanderers. Nick Freeman replaces Fred Onyedinma.
Anthony Forde (Oxford United) wins a free kick in the defensive half.
Foul by David Wheeler (Wycombe Wanderers).
Elliott Moore (Oxford United) wins a free kick in the defensive half.
Foul by Adebayo Akinfenwa (Wycombe Wanderers).
Anthony Forde (Oxford United) wins a free kick on the left wing.
Foul by Jack Grimmer (Wycombe Wanderers).
Substitution, Oxford United. Ben Woodburn replaces Marcus Browne.
Attempt saved. Robert Dickie (Oxford United) header from the centre of the box is saved in the centre of the goal. Assisted by Marcus Browne with a cross.
Attempt blocked. Elliott Moore (Oxford United) right footed shot from the centre of the box is blocked. Assisted by Liam Kelly with a cross.
Corner, Oxford United. Conceded by Anthony Stewart.
Attempt saved. Matty Taylor (Oxford United) header from the centre of the box is saved in the top centre of the goal. Assisted by Anthony Forde with a cross.
Attempt blocked. Mark Sykes (Oxford United) right footed shot from the centre of the box is blocked. Assisted by Cameron Brannagan.
Substitution, Oxford United. Daniel Agyei replaces James Henry.
Substitution, Oxford United. Anthony Forde replaces Sam Long.