Ok, recebi exemplos de trabalho para todos os três tipos de solicitações. Demorou um monte de experiências e brincadeiras para que elas funcionassem. Eu acho que Milo é bom em cutucar as pessoas para responder suas próprias perguntas.
Após inúmeras mudanças e atualizações dos permalinks, percebi que era muito mais fácil descobrir os URLs fora do add_rewrite_url e, depois que eles funcionavam, definir a reescrita. Exemplo sendo index.php?param=foo&post_type=example_type
.
Outra coisa óbvia, mas adicionando-a aqui, pode ajudar outra pessoa. Você deve definir as regras add_rewrite_rule do tipo de postagem personalizada ANTES de definir suas regras de curinga de página / subpágina. Eu desperdicei um pouco de tempo com essa e acho que é a principal coisa que me fez não entender por que as regras não funcionavam.
Aqui estão as 3 regras que funcionam em todas as minhas necessidades. A regra Página / Subpágina foi combinada em uma única.
// Custom Post Archive
add_rewrite_rule(
'^foo/example_type/?$',
'index.php?param=foo&post_type=example_type',
'top'
);
// Custom Post Individual
add_rewrite_rule(
'^foo/example_type/([^/]*)/?$',
'index.php?param=foo&example_type=$matches[1]',
'top'
);
// Pages, Top-Level and Sub-Pages
// This MUST be placed in the code AFTER custom post add_rewrite_rule
add_rewrite_rule(
'^foo/(.+)/?$',
'index.php?param=foo&pagename=$matches[1]',
'top'
);
Além disso, o que fiz foi configurar um loop para adicionar várias regras de tipo de postagem personalizadas. Lembre-se, você deve definir o tipo de post personalizado add_rewrite_rule rules ANTES de definir suas regras de curinga de página / subpágina.
$custom_types = array('example_type', 'projects', 'people');
foreach($custom_types as $type) {
// Custom Post Archive
add_rewrite_rule(
'^foo/'.$type.'/?$',
'index.php?param=foo&post_type='.$type,
'top'
);
// Custom Post Individual
add_rewrite_rule(
'^foo/'.$type.'/([^/]*)/?$',
'index.php?param=foo&'.$type.'=$matches[1]',
'top'
);
}
O Analisador de Regravação que o Milo transmitiu foi bastante útil ao tentar entender melhor como as consultas do Wordpress para páginas / posts.