Controlar permalinks do wordpress
Escrito no dia 5 de Dezembro de 2008, por dardna em Webdev.
Já não tenho muitas dúvidas quanto à capacidade do wordpress em servir qualquer tipo de conteúdo, aproximando-se do CMS ideal, principalmente pela clareza e simplicidade da estrutura.
Porque tenho feito algumas experiências nesse sentido, porque exemplos concretos são melhores do que argumentos, e porque efectivamente esta é uma das áreas em que o wordpress ainda me parece frágil, vou tentar demonstrar como é possível levar o controlo sobre os permalinks nativos ainda mais longe.

Vimos anteriormente como criar excepções ao sistema por htaccess; hoje o objectivo será alterar a base do permalink para autores do blog do inglês “author” para “autor”, o que acontece já dentro do wordpress.
Está definida na linha 178 do rewrite.php a classe $wp_rewrite que basicamente contem as variáveis que definem a estrutura de permalinks. Como é fácil de observar, as variáveis que nos interessam para o caso estão definidas aqui mesmo (hardcoded), o que não é a melhor das práticas (afinal porque não ter acesso a elas via painel administrativo e guardá-las na base de dados como a estrutura de permalinks para posts, por exemplo?).
A partir daqui bastaria alterar os valores entre as aspas para atingir o nosso fim mas como não queremos nem perder a alteração na hora de actualizar o wordpress, nem deixar o emendo pior do que o original, vamos manter a integridade dos ficheiros de sistema.
Para isso vamos dar uso às (muito práticas) âncoras – hooks - do wordpress de forma a incluir uma função que re-defina $wp_rewrite. Assim, no ficheiro functions.php do tema vamos programar:
//uma função que contem a nossa missão function alterar_permalink_autor() { // invocar o array global $wp_rewrite e redefini-lo global $wp_rewrite; $wp_rewrite->author_base = 'autor'; // agora reiniciamos as regras $wp_rewrite->flush_rules(); } //finalmente, prender a função que acabámos de definir ao hook init add_action('init','alterar_permalink_autor');
E está feito. A mesma lógica pode evidentemente ser aplicada para $feed_base, $comments_base ou ainda $search_base (se não se percebe do que falo que se volte acima e se visite o rewrite.php).
Espero ter sido claro e útil, e como sempre não hesitem em duvidar nos comentários.