The Potters will hope for a happier 2020 as they end the calendar year fourth from bottom and out of the relegation places only because none of Barnsley, Luton or Wigan could win elsewhere.
Campbell came off the bench to net a stoppage-time winner in a thrilling 3-2 success over Sheffield Wednesday on Boxing Day but was back there for this one as Michael O'Neill named an unchanged side.
Gregory's early header was easily saved by Fulham goalkeeper Marek Rodak and it was not until the 16th minute that the hosts created anything memorable in reply.
Tom Cairney's loss of footing on the edge of the Stoke box allowed Tom Ince to sprint away on a counter-attack that was stopped illegally by Decordova-Reid, who was booked. Ince was not best pleased by Knockaert landing on top of him either and was also cautioned for retaliating.
Mitrovic headed a decent chance over before Decordova-Reid broke the deadlock in the 26th minute.
Butland stretched to stop Knockaert's low shot from creeping in at the far post, where his team-mate was lurking for a tap-in. Stoke hopes of an offside flag failed to materialise.
Fulham were on top as Cairney unleashed a long-ranger that was only just too high, but they were forced into a change when Onomah had to be replaced by Cavaleiro in the 37th minute.
Stoke were more menacing after the break, with Sam Clucas smashing a drive into the side netting and Ince screwing an effort wide.
Jordan Cousins was next to have a go, firing straight at Rodak before Alfie Mawson was off target at the other end from a corner. Ryan Shawcross was booked for tugging Mitrovic back but Fulham were no longer the force they were.
Stoke swapped Gregory for Sam Vokes for the final 20 minutes and sent Campbell on too but it was Fulham left-back Joe Bryan who came closest to adding to the scoreline with a shot from a corner routine that Butland did well to tip over.