Dando continuidade a construção de um plugin para wordpress, vou dar uma dica simples, mas que pode ser bem útil para diversos casos: Criar uma url dinâmica, baseada em uma regra qualquer definida pelo desenvolvedor.
Se você já teve a curiosidade de olhar a página de configuração de links permanentes do wordpress, já deve ter percebido um link para a documentação que ensina como customizar a url do seu blog/site. Normalmente, os blogs em wordpress usam a estrutura /ANO/MES/DIA/POST, mas essa estrutura é customizável. Não seria interessante usar isso em nosso plugin? Eventualmente é, e por algum motivo desconhecido, as tags de URL padrões do wordpress só funcionam para os posts nativos, não funcionando para os custom posts criados pelos desenvolvedores. Mas isso é facilmente contornável, com apenas um filtro e um método no nosso plugin. Vejamos como:
No método init() do nosso plugin, vamos colocar um filtro para que, toda vez que a url for gerada, ela passe por um método nosso, onde faremos o tratamento necessário.
add_filter('post_type_link', array(&$this, 'demonstracao_post_type_link'));
Feito isso, vamos criar o método demonstracao_post_type_link():
function demonstracao_post_type_link($post_link, $id = 0, $leavename = false){
if (strpos('%author%', $post_link) < 0){
return $post_link;
}
$post = get_post($id);
if (!is_object($post) || $post->post_type != 'demonstracao'){
return $post_link;
}
$author = get_the_author_meta('user_nicename', $post->post_author);
return str_replace('%author%', $author, $post_link);
}
Observe que eu estou fazendo um tratamento para trocar a tag %author%, que é uma tag nativa. Você poderia usar qualquer tag, e não precisa usar %% como marcador. Pra finalizar, é preciso alterar a estrutura do rewrite do nosso custom post para refletir a nossa estrutura dinâmica. No plugin anterior, altere a linha onde tem
'rewrite' => array( 'slug' => 'demonstracao', 'with_front' => false, 'feeds' => true, 'pages' => true, ),
por
'rewrite' => array( 'slug' => 'demonstracao/%author%', 'with_front' => false, 'feeds' => true, 'pages' => true, ),
Feito isso, a URL do nosso plugin terá o slug do autor do post dentro da sua estrutura de link permanente.