Pagina inicial » WordPress » Reescrevendo URLs em Dicas e Plugins do WordPress

    Reescrevendo URLs em Dicas e Plugins do WordPress

    As atualizações mais recentes do WordPress permitiram que os desenvolvedores personalizassem seu site pessoal muito rapidamente. É simples atualizar as áreas do seu tema, substituir widgets na barra lateral e até mesmo escrever suas próprias funções personalizadas de código PHP. A extensão é enorme - e uma área de popularidade é reescrever permalinks de URL.

    Existem alguns métodos que você pode usar para atualizar o sistema padrão de reescrita do WordPress. Neste tutorial, compartilharei alguns exemplos e demonstrarei como o processo pode ser simples. Você precisará de um pouco de compreensão do PHP para acompanhar o que está acontecendo no código, mas é tão fácil copiar e colar em seu próprio modelo, não há praticamente nenhum trabalho envolvido.

    Entendendo WP_Rewrite

    Se você está familiarizado com o mod_rewrite em servidores Apache, então você vai pegar a sintaxe de reescrita do WordPress. Seu sistema ainda é construído em cima de um .htaccess arquivo, mas todas as regras são codificadas em PHP. Isso realmente torna o processo um pouco mais fácil, já que temos mais controle sobre como escrever nossos próprios URLs.

    Eu recomendo skimming a página da classe $ wp_rewrite, pois tem toneladas de informações sobre o assunto. Existem até pequenos exemplos que podemos referenciar para tornar tudo mais fácil de entender. A maior parte do código pode ser escrita diretamente no seu tema funções.php Arquivo. Vamos começar observando as reescritas padrão já incluídas no WordPress.

    Conteúdo das regras de $ wp_rewrite->

    Ao declarar o $ wp_rewrite classe como global, temos acesso a todos os dados internos. Quando você vai acrescentar suas próprias regras, elas são adicionadas a um array com o nome $ wp_rewrite-> regras. É importante lembrar essa variável, pois é provável que você precise fazer referência aos dados muitas vezes durante o desenvolvimento.

    regras); ?>

    Eu adicionei este bloco de código no meu tema page.php Arquivo. Ele produzirá uma grande quantidade de dados que parece uma grande bagunça. Mas se você Ver fonte na sua página, é realmente fácil ver quais regras de reescrita correspondem a qual nome de arquivo. Por exemplo, vamos ver as regras para reescrever categorias:

    [categoria /(++?)/?$] => index.php? category_name = $ matches [1] 

    O bit no lado esquerdo entre parênteses é o nosso Apache RewriteRule para procurar. Começando com a seção /categoria/ seguido por qualquer seqüência de caracteres. Se isso for correspondido, o servidor saberá fazer referência index.php? category_name = enquanto substitui a variável no final.

    Definindo Permalinks Personalizados

    Há muito conteúdo para passar na classe $ wp_rewrite sozinho. Muitas outras propriedades podem ser referenciadas, como $ wp_rewrite-> category_base ou $ wp_rewrite-> author_base para puxar as estruturas de URL padrão para essas páginas. Mas além de puxar as configurações padrão do WP nós também podemos construir nossas próprias regras.

    Reconstruindo a base do autor

    Quando você entra na página de configurações do Permalinks, você tem a opção de redefinir categorias de categorias e tags. No entanto, a opção de redefinir sua base de autor está estranhamente ausente.

    Mas podemos usar o add_rewrite_rule () do codex do WordPress para integrar algumas novas configurações. Neste caso eu substituí /autor/ com /escritor/ mas você pode usar qualquer base que quiser. Além disso, copiei alguns dos outros redirecionamentos para páginas de autor e feeds RSS. Você pode adicionar este bloco de código no arquivo functions.php do seu tema.

    add_action ('init', 'add_author_rules'); function add_author_rules () add_rewrite_rule ("escritor / ([^ /] +) /?", "index.php? author_name = $ corresponde [1]", "top"); add_rewrite_rule ("escritor / ([^ /] +) / página /? ([0-9] 1,) /?", "index.php? author_name = $ resultados [1] & paginados = $ correspondências [2] ", "topo"); add_rewrite_rule ("escritor / ([^ /] +) / (feed | rdf | rss | rss2 | átomo) /?", "index.php? author_name = $ matches [1] & feed = $ matches [2]", " topo"); add_rewrite_rule ("escritor / ([^ /] +) / feed / (feed | rdf | rss | rss2 | átomo) /?", "index.php? author_name = $ correspondências [1] & feed = $ correspondências [2]" , "topo");  

    Esta função pode ser acessada mesmo sem usar a variável $ wp_rewrite. Alguns desenvolvedores gostam desse método porque é mais simples do que codificar com propriedades de classe. No entanto, eu também notei que este método nem sempre é confiável para algumas instalações do WordPress. Na verdade, existe uma segunda opção para adicionar essas regras no gancho depois de liberar seu .htaccess (veja abaixo).

    Autor Base usando generate_rewrite_rules

    Escrevendo para este método, precisaremos novamente da classe global $ wp_rewrite. Eu configurei uma nova variável chamada $ new_rules que contém uma matriz associativa de dados. Meu código de exemplo abaixo apenas reescreve a seção básica da página de autor.

    function generate_author_rewrite_rules () global $ wp_rewrite; $ new_rules = array ("escritor / ([^ /] +) /?" => "index.php? author_name =" $ wp_rewrite-> preg_index (1)); $ wp_rewrite-> rules = $ new_rules + $ wp_rewrite-> regras;  

    Mas, se quisermos incluir várias páginas e feeds RSS, podemos reforçar o array. Você tem a opção de criar uma função PHP para enviar dados de matriz associativa que podem ser um pouco complexos demais. Poderíamos também dividir os blocos de dados por vírgulas, comportando-se como entidades separadas no array. Confira meu código atualizado novamente escrito em arquivo de tema functions.php.

    function generate_author_rewrite_rules () global $ wp_rewrite; $ new_rules = array ("escritor / ([^ /] +) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1), "escritor / ([^ /] +) / página /? ([0-9] 1,) /? "=>" Index.php? Author_name = ". $ Wp_rewrite-> preg_index (1)." & Paged = ". $ Wp_rewrite-> preg_index (2), "escritor / ([^ /] +) / (feed | rdf | rss | rss2 | átomo) /?" => "index.php? author_name =". $ wp_rewrite-> preg_index (1). "& feed =". $ wp_rewrite-> preg_index (2), "escritor / ([^ /] +) / feed / (feed | rdf | rss | rss2 | átomo) /?" => "index.php? author_name =". $ wp_rewrite- > preg_index (1). "& feed =". $ wp_rewrite-> preg_index (2)); $ wp_rewrite-> rules = $ new_rules + $ wp_rewrite-> regras;  

    Apenas lembre-se de que nenhum desses métodos funcionará até que você tenha liberado as regras originais de reescrita. Você terá que fazer isso sempre que fizer alterações nessas funções, mas depois suas novas regras ficarão indefinidas.

    Liberando as regras de reescrita

    Sempre que você fizer uma atualização para o código de reescrita de URL, as alterações não serão aplicadas imediatamente. Você precisa liberar as regras de reconfiguração do .htaccess para que seu novo código seja adicionado. No entanto, executar isso em cada página init é extremamente um desperdício, pois grava no banco de dados e atualiza o arquivo .htaccess..

    Um método melhor é acessar sua página de permalinks no painel de administração e salvar novamente as alterações. Isso sempre chama um flush_rewrite_rules para que você nunca precise se preocupar com os usuários no frontend que estão enfrentando problemas de carregamento. E leva apenas uma vez para salvar novamente a página e atualizar todas as regras do sistema. Mas se isso não funcionar, você pode tentar chamar $ wp_rewrite-> flush_rules ();

    Usando regras não WP

    Dentro de $ wp_rewrite classe temos acesso a dezenas de propriedades. Uma das opções mais significativas é $ wp_rewrite-> non_wp_rules que coleta uma matriz de redirecionamentos que não atingem o arquivo index.php.

    Isso é realmente usado com mais freqüência no desenvolvimento de plugins do WordPress. Você pode enviar um tipo de URL personalizado específico (como / calendar / june-2012 /) no backend do seu site (/wp-content/plugins/calendarplug/myscript.php). Mas é claro que existem outros usos para essa matriz associativa de regras de reescrita personalizadas que não sejam plugins. Eu forneci um excelente exemplo no contexto abaixo.

    Mascarando seus arquivos de tema

    Esta é uma sugestão comum que vejo com frequência nos fóruns de discussão do WordPress. Idealmente, gostaríamos de referenciar alguns arquivos dentro do / wp-content / themes / mytheme / pasta com um URL mais elegante. Observe que isso exigirá um conjunto diferente de reescritas do WordPress para alterar a estrutura do diretório.

    O sistema interno de reescrita do WordPress sempre envia o conteúdo para um único arquivo de roteamento. No caso padrão, usamos index.php junto com qualquer dado extra de string de consulta. Mas por esconder o nosso diretório de modelos padrão (/ wp-content / themes / mytheme / *) precisaremos exibir muitos arquivos diferentes.

    add_action ('generate_rewrite_rules', 'themes_dir_add_rewrites'); function themes_dir_add_rewrites () $ theme_name = próximo (explode ('/ themes /', get_stylesheet_directory ())); global $ wp_rewrite; $ new_non_wp_rules = array ('css /(.*)' => 'wp-conteúdo / temas /'. $ theme_name. '/ css / $ 1', 'js /(.*)' => 'wp-conteúdo / temas / '. $ theme_name.' / js / $ 1 ',' imagens / wordpress-urls-rewrite /(.*) '=>' wp-conteúdo / themes / '. $ theme_name.' / images / wordpress-urls-reescrever / $ 1 '); $ wp_rewrite-> non_wp_rules + = $ new_non_wp_rules;  

    Eu escrevi uma nova função themes_dir_add_rewrites () para puxar todo o conteúdo principal desses URLs mais longos e redirecioná-los no back-end. Observe que estamos usando essa outra propriedade misteriosa da classe $ wp_rewrite chamada non_wp_rules. De acordo com os documentos, estas são regras que não direcionam para o arquivo index.php do WP e serão tratadas no servidor final..

    O que é tão bom nessas regras não-WP é que você ainda pode gerenciar o método de URL mais antigo com bastante facilidade. Não há nada que o impeça de se vincular a:

    /wp-content/themes/mytheme/images/wordpress-urls-rewrite/logo.jpg.

    Mas parece muito melhor se você pode referenciar:

    /images/wordpress-urls-rewrite/logo.jpg em vez de.

    Ferramentas Úteis e Plugins

    Há apenas algumas ferramentas que você pode utilizar se estiver preso a codificar suas próprias URLs bonitas. O processo é muito difícil de entender, por isso não desanime se você está lutando por algumas semanas. Eu sinto que o conteúdo vai ficar mais fácil conforme você passa mais tempo praticando.

    Mas para começar, confira algumas dessas ferramentas e plugins de reescrita úteis. Você provavelmente não precisará de todos eles, mas é ótimo encontrar uma base de desenvolvedores tão grande trabalhando em torno de WP reescreve.

    Analisador de reescrita de macaco

    Quando começar a reescrever as regras, este plugin é imprescindível. Na verdade, ela não altera nenhuma das regras do seu website. Ela simplesmente permite que você teste o código e veja quais redirecionamentos acessam as páginas. Ele também funcionará para testar variáveis ​​de consulta personalizadas para qualquer tipo de postagem personalizado.

    AskApache RewriteRules Viewer

    Isso é semelhante ao plug-in acima, mas não permite que você teste suas próprias regras. Em vez disso, esse plug-in exibirá todas as regras WP padrão do seu website e para onde elas serão redirecionadas. Isso incluirá todas as principais propriedades de $ wp_rewrite como suas configurações de permalink e bases de página / categoria / tags.

    Controle de acesso WP

    Aqui você tem um conjunto diferente de regras para fazer novos redirecionamentos de página. O plug-in tem seu próprio painel de administração, onde você pode editar variáveis ​​como sua base de autor, bases de páginas e até mesmo anexar suas próprias regras de .htaccess..

    Este método é diferente comparado ao construir seu próprio usando wp_rewrite. No entanto, pode ser mais fácil para os técnicos que realmente conhecem os servidores da Web e se sintam mais à vontade escrevendo diretamente no .htaccess.

    Reescreva o testador de regras

    Isso realmente não é um plugin para WordPress, mas é definitivamente uma ferramenta útil para manter em arquivo. Você pode copiar as regras de reescrita e testá-las para o seu site sem editar seu arquivo .htaccess. Este é o método perfeito para remover erros de sua sintaxe antes de lançar ao vivo na Web.

    Reescrever DW

    O DW Rewrite é um plugin muito simples que cria três URLs bonitas exclusivas imediatamente após a instalação. Por padrão, ele alterará os links de administrador, login e registro para / admin, /entrar, e /registo respectivamente.

    Isso pode ser ótimo se você precisar de uma solução rápida para um blog que apresenta vários autores. Ele ocultará especificamente o link de registro do WordPress embaraçosamente complicado (/wp-login.php?action=register).

    Conclusão

    Espero que este tutorial possa fornecer alguns exemplos para você pensar em reescrever o WordPress. O CMS é muito popular e os desenvolvedores ainda estão produzindo novos recursos todos os dias. Personalizar seus próprios URLs é uma enorme funcionalidade baseada no usuário. Ele oferece ao seu site sua própria presença e branding exclusivos em comparação com as opções padrão.

    Se você está tendo problemas com regras de reescrita, nunca será difícil desfazer o dano. Simplesmente apagando o código de função e liberando suas regras de .htaccess, parece que nada mudou. Certifique-se de verificar alguns outros artigos semelhantes que você pode encontrar sobre o tema. E se você tiver alguma pergunta ou comentário, pode compartilhá-las conosco na área de discussão posterior.