哈洛德國王陷入重病,而他的怪物女婿史瑞克與女兒費安娜公主安全成為了國王與王后的繼承人。但是史瑞克斷然拒絕,他認為一定有其他人比他更適合這個工作。在吞下最後一口氣之前,國王告訴史瑞克有另外一個繼承人可以成為「很遠很遠的王國」的(Far Far Away)國王-也就是他的姪子亞瑟,史瑞克帶著驢子和長靴貓外出去尋找這位繼承人。當他們出航之時,費歐娜跑到甲板上向史瑞克宣布自己懷孕的消息。在驚喜與震撼之下,史瑞克在前往烏斯特郡學院的旅程中,因為即將出世的孩子而開始產生許多夢魘。最後他們在這個學院發現了亞瑟-他是這個學院的學生,也是個常被其他學生找碴的輸家。亞瑟在一開始對於他新的身份感覺頗佳,直到驢子和長靴貓告訴他該負的責任而嚇到了他。亞瑟試著控制船隻,並且避免船隻撞上一座小島(在這小島上,他們遇到了亞瑟退休的巫師老師梅林)。
於此同時,白馬王子來到了毒蘋果酒吧說服所有童話故事中的反派人物(包括虎克船長、白雪公主中的壞皇后、一位獨眼巨人、龍佩爾施迪爾欽(Rumpelstiltskin)、灰姑娘的醜繼姐Mable、無頭騎士與Stromboli),加入一場為他們「永遠幸福生活」而戰的鬥爭中。這些壞蛋們覺得屬於他們的故事從未被人講述過,而現在就是完成此事的最好時機。白馬王子與其他壞蛋入侵了王國,他們的犯下的罪行包含了囚禁費歐娜公主、莉莉安王后與費歐娜出名的公主朋友們(包括了灰姑娘、長髮姑娘與白雪公主。)
當史瑞克回到城市之後,發現白馬王子為了報復史瑞克「偷走他永遠幸福快樂」的生活而進行的復仇行為,並計畫在一個夜晚殺死史瑞克。白馬王子的同黨很快速的逮到了史瑞克與亞瑟。公主們與王后計畫逃出監獄並且救出史瑞克。為了援救亞瑟,史瑞克告訴白馬王子-亞瑟只不過是個將取代他成為國王的膽小鬼。白馬王子相信了史瑞克的話,並且讓當時生氣且失望的亞瑟逃離當地。白馬王子策劃了一場戲劇演出,為自己「登基」籌備,本劇的高潮是出現在史瑞克於舞台上,因其歌唱和演出贏得觀眾支持而讓白馬王子懊悔不已。正當白馬王子準備殺害史瑞克之時,費歐娜和她的朋友們跳到舞台上並且正面迎戰那些惡棍。白馬王子威脅要殺死亞瑟,以達到自己能獲得「永遠幸福快樂」的要求。但史瑞克保護了亞瑟,而白馬王子則遭受到致命的一擊。史瑞克把皇冠讓給了亞瑟,他也在眾人的同意下接受了皇冠。到了最後,退休的史瑞克與費歐娜一起回到他們在沼澤的家,並帶著三個孩子真正的享受著成為父親的新生活,故事結束。