Escolar Documentos
Profissional Documentos
Cultura Documentos
04
Explicação
Taxonomia
O anúncio de um imóvel pode conter diversas informações, por exemplo, sua localização. Acrescentaremos essa informação
em "Casa de Argila". Se formos em "Editar Imóvel" nos depararemos com a seguinte tela:
Se quisermos alterar a localização de um imóvel, podemos adicionar essa informação logo abaixo da descrição que já está
inclusa. Podemos escrever, por exemplo, "Localização: São Paulo". Salvando essa modiᦈcação e dando um "reload" na página
podemos veriᦈcar que estará tudo em ordem:
https://cursos.alura.com.br/course/wordpresscriacaotemazero/task/19219 1/13
201766 Wordpress: Aula 5 Atividade 4 Explicação | Alura Cursos online de tecnologia
Uma funcionalidade interessante seria acrescentar um sistema de busca, um ᦈltro. Para que o usuário tenha facilidade de
encontrar um determinado imóvel situado, por exemplo, em São Paulo. Quando nós adicionamos um "Post" o WordPress
fornece a opção de ᦈltrarmos por categorias nossos posts:
O próprio WordPress já possui um sistema que possibilita que ele encontre distintas categorias. Assim, seria mais fácil que
nós pudessemos encontrar as localizações como nós buscamos as categorias. Vamos introduzir isso! O WordPress possui algo
que se chama "Taxinomia", podemos jogar no Google e a wikipedia nos fornece informações sobre o signiᦈcado dessa
palavra que em linhas gerais signiᦈca "classiᦈcação das coisas".
O que faremos é criar uma espécie de "taxinomia" de localização. Para criar novas funcionalidades no tema podemos abrir o
arquivo "function.php" e ao ᦈnal da página acrescentamos a função register_taxonomy cujo apelido será "localização" e
como ela servirá para o tipo de post "imovel", também passaremos isso e, por ᦈm, passaremos uma $args . Em seguida, após
termos acrescentado isso, podemos deᦈnir os seus argumentos, $args , será igual a array e faltará, ainda, colocarmos os
nomes aos bois, isto é, passarmos uma série de nomes, por exemplo, o label que deverá ser igual a $labels . Temos que
declarar os $labels , escreveremos na linha de cima da $args , que ele será igual a array e temos que passar para a label
https://cursos.alura.com.br/course/wordpresscriacaotemazero/task/19219 2/13
201766 Wordpress: Aula 5 Atividade 4 Explicação | Alura Cursos online de tecnologia
os argumentos que tínhamos antes, name , singular_name , edit_item que seriam iguais, respectivamente, a Localizacoes ,
Localizacao e Editar Localizacao . Mas, vimos como ter uma solução mais inteligente! Criar uma variável nova, por
exemplo, $nomeSingular , para que, no caso de mudança, isso não acarrete em alterações diversas vezes. Assim, teremos que
a variável $nomeSingular será igual a Localização e $nomePlural a Localizações . Por ᦈm, alteramos o name ,
singular_name e edit_item escrevemos que são iguais a $nomePlural pu $nomeSingular :
$nomeSingular = 'Localização';
$nomePlural = 'Localizações';
$labels = array(
'name' => $nomePlural,
'singular_name' => $nomeSingular,
'edit_item' => 'Editar'. $nomeSingular
);
$args = array(
'labels' => $labels
);
Onde podemos inclusive veriᦈcar o título e o trecho que fala em "Adicionar Nova Tag". Podemos adicionar uma última
label , a add_new_item que será igual a Adicionar nova , um . e $nomeSingular :
$labels = array(
'name' => $nomePlural,
'singular_name' => $nomeSingular,
'edit_item' => 'Editar'. $nomeSingular
'add_new_item' => 'Adicionar nova' . $nomeSingular
);
https://cursos.alura.com.br/course/wordpresscriacaotemazero/task/19219 3/13
201766 Wordpress: Aula 5 Atividade 4 Explicação | Alura Cursos online de tecnologia
Podemos, ainda, passar um parâmetro para o args falando que ele é público e isso é igual a true e um terceiro parâmetro
que passaremos é que a localização será hierárquica, hierarchical que será igual a true . Sobre a hierarquical é porque
nosso imóvel pode ter além da localização da cidade, também o bairro, onde o bairro é "subordinado" a cidade:
$args = array(
'labels' => $labels,
'public' => true,
'hierarchical' => true
);
Salvando isso teremos uma página onde poderemos colocar, inclusive, a relação hierárquica entre as informações. Aqui
podemos acrescentar uma "localização" nova, adicionamos "São Paulo" e podemos colocar também "Vila Mariana" e ao
acrescentarmos esse último podemos escolher a opção de que "São Paulo" é "pai" da "Vila Mariana":
Agora, quando entrarmos em um imóvel já existente, por exemplo "Casa de Argila" poderemos escolher qual a sua
localização.
https://cursos.alura.com.br/course/wordpresscriacaotemazero/task/19219 4/13
201766 Wordpress: Aula 5 Atividade 4 Explicação | Alura Cursos online de tecnologia
Por enquanto, esta informação ainda não estará visível, já ajeitaremos isso!
E como colocamos diversas labels em nosso código, podemos, organizar um pouco o código adicionando a function
registra_taxonomia_localizacao e depois do register_taxonomia , acrescentamos um add_action('init',
function criando_taxonomia_localizacao() {
$singular = 'Localização';
$plural = 'Localizações';
$labels = array(
'name' => $plural,
'singular_name' => $singular,
'view_item' => 'Ver ' . $singular,
'edit_item' => 'Editar ' . $singular,
'new_item' => 'Novo ' . $singular,
'add_new_item' => 'Adicionar novo ' . $singular
);
$args = array(
'labels' => $labels,
'public' => true,
'hierarchical' => true
);
Implementando ំ�ltro
Por enquanto, a "localização" não se converteu em um benefício para o usuário. Essa informação estará visível apenas para o
administrador, vamos criar um meio acessível de ᦈltrar os nossos imóveis.
Antes disso, vamos atualizar para que o imóvel "Casa de Madeira" tenha sua localização registrada em "São Paulo", para isso
basta selecionar a opção na caixa "localização" e vamos atualizar a "Casa de Praia" que terá sua localização no "Rio de
Janeiro".
Feito isso, vamos cadastrar dois novos imóveis, para isso, vamos em "Imóveis > Adicionar Novo". O primeiro novo imóvel se
chamará "Casa de Campo", cuja descrição será "casa de campo linda", a localização "São Paulo" e escolhemos uma imagem de
detaque. Podemos adicionar um segundo imóvel seguindo o mesmo caminho, seu título será "Apartamento luxuoso", sua
https://cursos.alura.com.br/course/wordpresscriacaotemazero/task/19219 5/13
201766 Wordpress: Aula 5 Atividade 4 Explicação | Alura Cursos online de tecnologia
descrição "Um apartamento gourmet", sua localização será "Rio de Janeiro" e escolhemos, também, uma imagem de
destaque.
Agora que já temos cinco imóveis podemos reetir a cerca de como ᦈltrar esses imóveis. Para ᦈltrá-los podemos pensar na
parte que traz nossos imóveis para a tela, no caso, o loop . Assim, podemos acessar o arquivo "index.php" e teremos o
seguinte nesse arquivo:
"Filtrar" é um dado a mais que passaremos, assim, podemos organizar um pouco o código adicionando espaçamentos e na
args podemos acrescentar um tax_query e isso receberá uma array e dentro deste array colocaremos as coisas
relacionadas a taxinomia que queremos, ou seja, 'taxonomia' => 'localizacao' e 'field' => 'slug' . O slug é o que será
ᦈltrado e ele é melhor de ser utilizado, pois não contêm espaços nem acentos. Observe como ele está presente no
formulário:
Falta, ainda, adicionarmos em nosso código qual o item que desejamos. Passaremos o termo, terms deve ser sao‐paulo .
Teremos:
<main class="home‐main">
<div class="container">
<?php
https://cursos.alura.com.br/course/wordpresscriacaotemazero/task/19219 6/13
201766 Wordpress: Aula 5 Atividade 4 Explicação | Alura Cursos online de tecnologia
$args = array(
'post_type' => 'imovel',
'tax_query' => array(
'taxonomia' => 'localizacao',
'field' => 'slug',
'terms' => 'sao‐paulo'
);
);
/...
</div>
</main>
Falta, ainda, um pedaço desse código, o tax_query não recebe apenas o array . Ele vai receber um array de array , então,
vamos envolver o que temos com mais uma array . Fazemos isso pois o WordPress é capaz de realizar buscar entrelaçadas.
Observe o código:
$args = array(
'post_type' => 'imovel',
'tax_query' => array(
array(
'taxonomy' => 'localizacao',
'field' => 'slug',
'terms' => 'sao‐paulo'
)
)
);
https://cursos.alura.com.br/course/wordpresscriacaotemazero/task/19219 7/13
201766 Wordpress: Aula 5 Atividade 4 Explicação | Alura Cursos online de tecnologia
Podemos retirar as informações que estão ligadas a array e podemos salvar elas em uma variável, para que o código ᦈque
mais legível. Retiramos o seguinte:
array(
array(
'taxonomia' => 'localizacao',
'field' => 'slug',
'terms' => 'sao‐paulo'
)
E colocamos no lugar uma variável, a $taxQuery e passamos para ela o array que tínhamos retirado. Teremos o seguinte:
<?php
$taxQuery = array(
array(
'taxonomy' => 'localizacao',
'field' => 'slug',
'terms' => 'sao‐paulo'
)
);
$args = array(
'post_type' => 'imovel',
'tax_query' => $taxonomy_args
);
Agora, nosso código estará funcionando direitinho. Falta darmos um jeito no ᦈltro, por enquanto nós estamos ᦈltrando a
mão.
Filtrando
Já criamos um meio de ᦈltrar as opções que temos usando a taxonomia por localização. Vamos criar um meio do próprio
usuário escolher dentre as opções do ᦈltro. Essa escolha será feita através de um formulário que criaremos no arquivo
"index.php". Para isso digitaremos, abaixo da main class e do div class , o form :
https://cursos.alura.com.br/course/wordpresscriacaotemazero/task/19219 8/13
201766 Wordpress: Aula 5 Atividade 4 Explicação | Alura Cursos online de tecnologia
Vamos incluir o select e um name , ou seja, aquilo que será incluído vai ser a taxonomy . O name deve possuir dentro de si
options que deverão ter seus valores, value . A primeira option value pode ser igual a São Paulo . Quando acabarmos de
<form>
<select name ="taxonomy">
<option value ="">São Paulo</option>
</select>
</form>
Mas, escrever todas as localizações a mão não faz muito sentido! É preciso trazer todas as localizações que estiverem
guardadas no banco de dados. O WordPress possui uma função que pode nos auxiliar. Se é uma função usamos o php e
vamos salvar essas opções em uma variável, a $taxinomias que será igual a função get_terms , ou seja, pega termos. No
caso, o que queremos é a localização , e é isso que passaremos para essa função:
Falta, ainda, inteirar o array de taxonomias que foi gerado e que ele cuspa as opções que existem para cada uma das
"taxinomias" que ocorrem na interação. O que iremos acrescentar é que, "para cada um das taxinomias que sejam
taxinomias", foreach($taxonomias as $taxinomia)? deve ser impresso uma option , cujo valor deve ser $taxonomia‐>slug . O
slug é o que estamos utilizando para buscar as opções e adicionamos um sinal de igual antes, = , para que a informação
seja impressa. E, por ᦈm, apagamos o "São Paulo", pois, o que vai aparecer é que o próprio "$taxinomia->name" é o nome da
taxinomia.
https://cursos.alura.com.br/course/wordpresscriacaotemazero/task/19219 9/13
201766 Wordpress: Aula 5 Atividade 4 Explicação | Alura Cursos online de tecnologia
Dando um reload teremos em nossa página uma caixinha onde constará as opções "Rio de Janeiro" e "São Paulo", ou seja, as
duas localizações que temos registradas:
Na verdade, se formos em "Painel > Imóveis > Localizações" poderemos visualizar que temos uma terceira localização, o
bairro "Vila Mariana" que, soma zero em sua contagem, ou seja, não registramos nada sob esse nome e por isso não nos é
mostrado nenhuma informação a cerca.
Falta adicionarmos no formulário um botão para que a informação que acrescentamos seja submetida. Assim, após fechar o
select podemos adicionar um button type que deverá ser igual a submit e cujo nome será "Filtrar", <button
type="submit">Filtrar</button> . Além disso, podemos acrescentar um CSS para que isso que acabamos de colocar ᦈque
mais bonito. Assim, abaixo do get_terms colocaremos uma class que será igual a busca‐localizacao‐form e abaixo disso,
acrescentamos um div class que deverá ser igual a taxonomy‐select‐wrapper . Assim, fechamos a div e nosso código
ᦈcará da seguinte maneira:
https://cursos.alura.com.br/course/wordpresscriacaotemazero/task/19219 10/13
201766 Wordpress: Aula 5 Atividade 4 Explicação | Alura Cursos online de tecnologia
Entretanto, se escolhermos a opção "Rio de Janeiro" ele continuará mostrando apenas as casas de São Paulo. É necessário
ajustar esse comportamento. É preciso que passemos essa informação em algum lugar. Falta passarmos os atributos de tag
principal, da form , que são o method que será igual a get e o action que deverá ser igual a bloginfo . Como a informação
que desejamos é a url passaremos isso também! Teremos o seguinte:
Se dermos um "reload" ele estará ᦈltrando as informações conforme queríamos. Falta passarmos para o terms da
$taxQuery que ele deve ser igual a $_GET['taxonomy'] :
$taxQuery = array(
array(
'taxonomy' => 'localizacao',
'field' => 'slug',
'terms' => $_GET['taxonomy']
)
);
Teremos nosso ᦈltro funcionando da maneira como queríamos. Mas, por exemplo, se não digitarmos nenhum caminho para
o navegador ele não nos mostrará nada.
https://cursos.alura.com.br/course/wordpresscriacaotemazero/task/19219 11/13
201766 Wordpress: Aula 5 Atividade 4 Explicação | Alura Cursos online de tecnologia
O ideal é que todos os imóveis apareçam. Mesmo que não ᦈltremos nada. Caso contrário o site ᦈca esquisito.
Voltando no código podemos pensar: "Quando é preciso que ele realize a busca por temas?" A resposta é: quando o usuário
submeter as respostas no formulário. Para que isso aconteça podemos incluir uma função no topo da página, a
array_key_exists e passamos para ele a chave taxonomy e a array, $_GET . Mas, vamos transformar a função em uma
<?php
$queryTaxonomy = array_key_exists('taxonomy', $_GET);
$css_escolhido = 'index';
require_once('header.php');
?>
E para falar que a busca deve ser feita somente quando for exigido pelo usuário, acrescentamos um if na linha de cima da
$taxQuery . Assim, if a $queryTaxonomy tiver busca execute o ᦈltro, caso contrário, não execute:
if($queryTaxonomy) {
$taxQuery = array(
array(
'taxonomy' => 'localizacao',
'field' => 'slug',
'terms' => $_GET['taxonomy']
)
);
}
Se dermos um "reload" tudo estará funcionando em ordem. Ainda, entretanto, existe a estranheza de termos apenas as
opções "São Paulo" e "Rio de Janeiro" sem contar a opção "mostrar tudo". Podemos fazer isso colocando uma opção a mais
junto ao select name , colocaremos ela abaixo do select name escrevendo option value cujo valor será vazio, pois
queremos efetuar uma busca em tudo, o texto será: "Todos os imóveis". Observe o código:
Quando buscamos os imóveis teremos um resultado vazio. Para resolver o bug podemos passar um "se o $_GET for vazio na
parte de taxinomia" e "a string for vazia" podemos redirecionar o navegador para a págia inicial, assim usaremos o if(
$_GET['taxonomy']=== '') isso será redirecionado, wp_redirect para home_url . Falta ainda garantir que isso existe, ou seja,
<?php
$queryTaxonomy = array_key_exists('taxonomy', $_GET);
if( $queryTaxonomy && $_GET['taxonomy'] === '') {
wp_redirect( home_url() );
}
$css_especifico = 'index';
require_once('header.php');
?>
Se testarmos isso na página veremos que estará tudo funcionando em ordem. Usamos a taxonomia para fazermos ᦈltros e
conseguimos que eles funcionassem conforme queríamos!
https://cursos.alura.com.br/course/wordpresscriacaotemazero/task/19219 13/13