Custom Post Type URL Rewrite’s

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:

  1. Add specific rewrite rules to the top of the stack to address them
  2. 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.