dump

Controlar permalinks do wordpress

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.

Controlar permalinks do wordpress

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.


Deixar uma resposta

Um trackback

  1. Custom Author Permalink - dump no dia 6 de Dez de 2008 às 0:12