The hosts ran in six first half-tries to take a comprehensive 42-13 lead at the break.
However, they went to sleep in the second period which saw the men from Pretoria produce a strong comeback.
In the end the home side had to scramble to hold on for the win.
WP will however be happy with a five-point victory, while the Bulls will take solace from claiming a four-try bonus point.
WP lost 44-34 to Griquas in Kimberley earlier in the week - a game in which they conceded two yellow cards.
On Saturday, they were again guilty of ill-discipline which saw centre EW Viljoen and replacement lock Michael Kumbirai sent to the sin-bin.
WP coach John Dobson should be worried about his team's ill-discipline and defence.
Young WP flyhalf Damian Willemse, who scored a spectacular first half try when he side-stepped several Bulls defenders, was named man-of-the-match.
Both teams now have 11 log points and two wins each, but the Bulls are fourth and WP a position below them.
In next weekend's action, WP host the Golden Lions at Newlands (Friday, August 18), while the Bulls entertain the Free State Cheetahs in Pretoria (Saturday, August 19).
Conversions: Marais (6)
Tries: Piet van Zyl, Kefentse Mahlo (2), Johan Grobbelaar
Conversions: Tony Jantjies (3), Joshua Stander
Penalties: Jantjies (2)