Olá, depois de algum tempo sem postar volto com a solução de um velho problema, url amigáveis!
Semana passada perguntei para os dois caras que, conheço que, são os mais entendidos de wordpress, onde eu poderia encontrar alguma documentação sobre o funcionamento do permalink, apesar de achar que já sabia qual seria a resposta.
O Gustavo Bordoni me respondeu o seguinte “@andersonsolano Cara essa é a parte mais obscura do WP, é bem complicado… Mas o que mais ou menos você quer fazer?”.
E o Guga Alves respondeu o seguinte “@andersonsolano Quem come funções de WP no almoço é o @webord , ele que sabe quase todas de cabeça rsrsrs”.
Voilà , como eu imaginava, não existe ou é desconhecida, qualquer documentação sobre o assunto.
Eu queria estudar como as urls sao montadas no wordpress, para poder fazer algo que fosse bem aplicável em qualquer situação, desde um site com meia dúzia de páginas ou um com 500 páginas e urls dinâmicas.
Mas como não tem documentação, então pensei que devia ter algum jeito de fazer as urls amigáveis sem ser pelo tradicional método do htaccess com expressões regulares ou usando forcetype também pelo htaccess.
Parei para pensar e fui olhar o funcionamento do htaccess do wordpress e percebi que as urls sempre chamavam o index.php, logo entendi o porque de ter a url salva no banco de dados na tabela dos posts.
Então parti para a parte legal da história, pensar as funcionalidades que são necessárias para o funcionamento.
Não vou explicar tudo o que foi feito para não alongar demais esse texto, listei abaixo as principais funções explicarei para que elas foram feitas, mas você não precisa se preocupar em utilizá-las pois fiz funcionamento para ser o mais simples possÃvel.
Para utilizar, você precisará configurar três linhas de código, duas no htaccess e uma no index.php.
Bom vamos as funções:
is_home()
Verifica se é a página inicial e adiciona o arquivo home.php.
eval(RURI)
RURI é uma constante em que a url solicitada foi transformada em array, como constantes não podem ser arrays, o valor dela é transformado em texto com a formatação de array, quando precisar utilizar faz-se o eval para ser um array novamente.
$requestURI = eval(RURI);
variavel que ja tem a consfante RURItransformada em array.
addSlash()
verifica se o último caractere é uma barra (/) se não for, adiciona a barra ao final da url e faz um redirect 301.
redir301($newurl)
função para fazer o redirect 301.
r404()
função para retornar o header 404 e adiciona o arquivo 404.php avisando do erro. Esse arquivo poder ser altefado para o seu layout a vontade.
configUrls.php
Aqui começa a brincadeira para você: se você precisar de muitas urls ou urls com subdiretórios você precisa configurar quais são essas urls e qual arquivo vai ser chamado.
Ex.
<?php
$configUrls['article'] = 'article.php';
$configUrls['article/teste-url'] = 'article01.php';
$configUrls['news'] = 'news.php';
?>
sem configUrls.php
primeiraPasta.php
Se forem poucas páginas vc pode apagar o configUrls e usar o nome do arquivo como sendo o texto da primeira pasta da url.
index.php
Esse arquivo deve ter somente essa linha, qualquer modificação para seu site deve ser feita nos arquivos que você irá listar no array $configUrls.
Aqui comecam as configurações, na variavel baseUrl você deve colocar a pasta, ou as pastas, que indicam onde é a raiz do projeto, por exemplo se o site vai ficar em http://dominio.com/site/ vc deve colocar /site/ na variavel, caso a raiz seja o proprio dominio deixe em branco.
<?php $baseUrl = ''; include('_uf/funcs.php'); ?>
.htaccess
Abaixo segue como o .htaccess deve ficar, sim ele é igual ao que ok wordpress gera.
<IfModule mod_rewrite.c>
RewriteEngine On RewriteBase /
# mesma coisa na linha acima caso tenha a pasta site, adicione apos a barra site/
RewriteRule ^index\.php$ -[L] RewriteCond
%{REQUEST_FILENAME} !-f RewriteCond
%{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]
# idem na linha acima, que você deve indicar onde fica o arquivo index.php
# então o final da linha fica ./site/index.php
</IfModule>
Feito isso o seu site está pronto para utilizar as urls amigáveis.
Não esqueca de manter a pasta _uf, caso mova, ou remova, ajuste o caminho do include do funcs.php no index.php
Então é isso, você pode testar script de urls amigáveis ou baixar e usar urls amigáveis no seu próximo projeto.
Gostou, não gostou, achou um bug? comenta ai!
Oi Anderson,
Não cheguei a testar o script que você fez, mas percebo que ele pode ser configurado para rodar em subdiretórios. Estou curioso com um fato: você chegou a testar em um virtual host do Apache? Os testes que fiz com outras abordagem geravam um erro 500; possivelmente por erro no redirecionamento.
Assim que testar mais o informarei.
Obrigado.
Obrigado pelo comentário Leo Cabral, confesso que não fiz nenhum teste com virtual host, assim que tiver um tempinho posso fazer uns testes e te dizer o que acontece e se gerar algum erro resolver e já lançar a versão 1.1, Abçs
Achei bem bacana o script, porém me bateu um dúvida aqui
Como ficaria para chamar uma notÃcia para noticia.php por exemplo
@Alisson,
vc pode chamar simplesmente seusite.com/noticia para a pagina principal, ou seusite.com/noticia/titulo, seusite.com/noticia/ID, ai fica da sua criatividade, o codigo permite tudo isso.