Snippets e Shortcodes

Snippets: Criando Links Automáticos em Palavras no Post do WordPress

Anúncios Google

O que fazer quando precisamos ou gostaríamos de transformar todas as ocorrências de certa palavra em nosso blog num link? Por exemplo, se você participa de um programa de venda comissionada de templates, como fazer com que cada citação a “temas premium” ou “templates” vire um link para a página de vendas?

Se assim como nós, você também usa WordPress, temos uma solução fácil com esse pequeno snippet. Com um pequeno trecho de código inserido no arquivo functions.php do seu tema, você consegue isso sem ter que editar nenhuma linha de seus posts.

Nesse exemplo, estou modificando todas as aparições da palavra “aventura” no meu blog por um link para a lista da categoria de mesmo nome.

// autolinka a palavra aventura para a categoria aventura
function autolinks($content) {
$content = str_ireplace('aventura','<a href="/category/aventura" rel="nofollow" title="Veja mais artigos na categoria AVENTURA">aventura</a>', $content);

return $content;
}
add_filter('the_content','autolinks');

Mais fácil que isso, impossível! Outro exemplo, agora como falei antes, trocando todas as ocorrências de “templates WordPress” por um link para minha página de afiliado.

// autolinka as palavras 'temas WordPress' com página de afiliado
function autolinks($content) {
$content = str_ireplace('temas WordPress','<a href="seu-link-aqui" rel="nofollow" title="Compre temas premium aqui">temas WordPress</a>', $content);

return $content;
}
add_filter('the_content','autolinks');

E se eu quiser várias substituições?

Nesse caso, o snippet anterior não vai servir. Use como abaixo, que vai linkar as palavras “drama” e “Oscar”:

//autolinka as palavras 'drama' para sua categoria, e 'Oscar' para sua tag
function autolinks($content) {
$sai = array('drama', 'oscar');
$entra = array('<a title="Veja mais na categoria DRAMA" href="/category/drama" rel="nofollow">drama</a>', '<a title="Veja aqui: filmes vencedores do Oscar" href="/tag/oscar" rel="nofollow">Oscar</a>');
$content = str_ireplace($sai, $entra, $content);

return $content;
}

add_filter('the_content','autolinks');

Se quiser adicionar mais, é só aumentar os arrays. Veja como ficaria se eu adicionasse a palavra “tutoriais” ganhando link para a categoria:

$sai = array('drama', 'oscar', 'tutoriais');
$entra = array('<a title="Veja mais na categoria DRAMA" href="/category/drama" rel="nofollow">drama</a>', '<a title="Veja aqui: filmes vencedores do Oscar" href="/tag/oscar" rel="nofollow">Oscar</a>', '<a title="Mais tutoriais" href="/category/tutoriais" rel="nofollow">tutoriais</a>');

Case-Sensitive?

Atenção ao detalhe que usei a função str_ireplace, que não diferencia maiúsculas e minúsculas (não é case-sensitive). Assim, toda vez que encontrar a palavra drama (como nos exemplos acima), a substituição vai acontecer. Isso pode ser inconveniente em ocorrências no começo do parágrafo, onde vai perder a maiúscula.

Para evitar isso – e também acarretando na falta de link automático quando a palavra ocorrer com maiúscula – é só trocar a str_ireplace por str_replace, que vai diferenciar: no nosso exemplo, com str_replace, a palavra Drama não seria linkada, enquanto drama sim.

Coincidência inteira

Outro problema é com palavras que contenham a parte a ser alterada. Por exemplo, “dramalhão” terá o trecho “drama” inicial linkado se não houver uma pequena alteração no código.

Para evitar que palavras no meio de outras em vez de inteiras sejam pegas, use:

$sai = array(' drama ', ' oscar ');
$entra = array('<a title="Veja mais na categoria DRAMA" href="/category/drama" rel="nofollow"> drama </a>', '<a title="Veja aqui: filmes vencedores do Oscar" href="/tag/oscar" rel="nofollow"> Oscar </a>');

Note os espaços entre as palavras do array, e também no resultado linkado. Assim, se não houverem espaços (como na palavra “dramalhão” do nosso exemplo), não haverá link.

Alguns fóruns apontam que essa função não seria indicada para tal situação, sendo preciso substituí-la pela preg_replace, mas eu testei assim e está funcionando. Talvez seja questão de atualização do PHP no servidor.

Se testar, comente e diga se funcionou. Tem uma solução melhor? Comente também.

Author

Fundador do Tutoriart em 2010, é ex-instrutor de Photoshop, design web e gráfico. Em quase uma década de redação online, tem cerca de 1500 artigos publicados. Gerencia também o Memória BIT.

Write A Comment

Pin