I used css to hide topics with the following rule:
tr.topic.status-pending { display:none; }
You can do the same thing with posts, but unfortunately, the post header will remain since it’s a separate tr that doesn’t include the class “status-pending.”
tr.reply.status-pending { display:none; }
You could probably use ajax to grab the tr just before each tr.reply.status-pending and give it an inline style of display:none; but that is not my area of expertise.
Also, your # of posts and topics will be incorrect (as in “Viewing 2 posts – 1 through 2 (of 2 total)“) unless you update the logic. I hide those too because I feel like they just add clutter to the page, and most of those numbers are already in the “notice” section. You can do that easily with css as well:
div.bbp-pagination-count { display:none; }
If your forum is paged your pages might end up being a few topics/replies short of the max per page, and you could end up with empty pages since the pagination is still counting the hidden topics/replies. Setting the topics/replies per page # to something high and staying on top of approval/deletion will minimize that.
The method isn’t perfect, but it gets the job done quick and easy without any functionality issues.
I’d be interested to hear a back end solution to this. In my humble opinion, showing pending topics almost defeats the purpose since you can still read the name of the topic.