Ok, recebi exemplos de trabalho para todos os três tipos de solicitações. Foram necessárias muitas experiências e brincadeiras para fazê-los funcionar. Eu acho que Milo é bom em convencer as pessoas a responderem suas próprias perguntas.
Após inúmeras alterações e atualizando os permalinks, percebi que era muito mais fácil descobrir os URLs fora do add_rewrite_url e, depois que eles funcionavam, definia a reescrita. Exemplo sendo index.php?param=foo&post_type=example_type.
Outra coisa óbvia, mas adicioná-lo aqui para que possa ajudar outra pessoa. Você deve definir as regras customizadas do tipo de postagem add_rewrite_rule ANTES de definir suas regras de curinga de página / subpágina. Eu perdi bastante tempo com isso e acho que é a principal coisa que estava me fazendo não entender por que as regras não funcionaram.
Aqui estão as três 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 de que você deve definir as regras personalizadas do tipo de postagem add_rewrite_rule 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 Rewrite Analyzer, que Milo repassou, foi bastante útil ao tentar entender melhor como o Wordpress consulta páginas / posts.
pagetipo de postagem ou qualquer página? e as páginas pai / filho na hierarquia?