The bulk of your question is fairly easy and has been covered here many times before. I also gave a talk at WordCamp Portland on the topic, which you can watch, download slides, code, etc. here.
The last part of your question,
On top of that I would like to create some additional pages which have a base of /marketing-lists i.e
/marketing-lists/consumer-marketing-lists -> single page /marketing-lists/business-marketing-lists -> single page
… is a little trickier. If there will only be a few and they won’t often change, you have two options that I can see:
- Add specific rewrite rules to the top of the stack to address them
- Make them taxonomy terms (that you never use as taxonomy terms) and leverage the template hierarchy to do with them as you please.
Personally, I’d go with #1. If you do, your code may look something like this,
function wpse_119673_rewrite_rules() {
add_rewrite_rule( 'marketing-lists/(consumer-marketing-lists|business-marketing-lists)/?', 'index.php?pagename=$matches[1]', 'top' );
}
add_action( 'init', 'wpse_119673_rewrite_rules' );
See add_rewrite_rule for reference.
If, on the other hand, you’ll have many of these pages and you need to create them on a whim, it becomes significantly more difficult. Essentially, you’d then have a significant rewrite conflict for which you’d need to account in every matching query. Here’s another question which is very different from yours, but where I account for a rewrite conflict (search for “check_rewrite_conflicts”) in my answer. In that answer, on every query where the “state” is present, I’m checking to see if that should actually be a page. It’s an additional database query, and I would advise against it.