Utilizando o operador de módulo no loop
Na maior parte das linguagens de programação existe um operador específico, por vezes esquecido pelos programadores, para operações de módulo. Seu símbolo, na maioria das linguagens, é a % (o que pode causar alguma confusão para os novatos). O PHP não foge à regra e também possui este operador de módulo, sendo o seu símbolo também a %.
Função do operador %
Para que serve o operador de módulo? Ele pode ser utilizado com duas variáveis numéricas para se obter o resto da divisão de um número pelo outro. Por exemplo:
<?php $a = 4; $b = 3; $c = $a % $b; //O resto da divisão de $a (4) por $b (3) é igual a 1, sendo este o valor atribuído à $c ?>
Desta forma, sabemos que o número 4 não é divisível por 3, pois seu módulo 1. Caso na variável $b o valor armazenado fosse 2, o módulo de $a por $b seria igual a 0, pois 4 é um número divisível por 2. Veja que sua operação é simples, o que as vezes fica complicado para alguns programadores, principalmente os que estão iniciando, é as potencias utilização desta operação. Vamos a primeira aplicação desta operação nos loops do WordPress.
Definindo se um post é par ou ímpar no loop
Ao desenvolver um site com o WordPress, você pode se deparar com a necessidade de realizar alguma tarefa, inserir um determinado conteúdo, ou mesmo atribuir uma classe css em um elemento alternadamente no loop. O loop é um processo iterativo, que se processa “n” vezes, de acordo com o especificado em seus parâmetros. Por padrão ele não fornece um contador das iterações, sendo necessário criarmos uma variável para isso. A seguir um exemplo de loop com um contador que é exibido.
<?php $contador = 1; //Iniciado em um para exibir um na primeira iteração if ( have_posts() ) { while ( have_posts() ) { the_post(); echo $contador; //Exibe o número da iteração do loop para cada post $contador += 1; //Incrementa o contador para a próxima iteração do loop } } ?>
Supondo que haja 10 posts a serem exibidos, neste loop será exibido na tela os valores de 1 a 10, para cada iteração do loop. Com o contador implementado, como podemos saber se o post a ser exibido é um post par, ou um post ímpar? Pelos fundamentos da matemática, sabemos que todos números inteiros pares (exceto 0 0) são divisíveis por 2. Assim, basta verificarmos o módulo, ou seja, o resto da divisão por 2, para verificarmos se a iteração em questão é par ou ímpar, acrescentando um condicional em nosso loop. Caso o resto da divisão seja 0, ou seja, não exista resto, o número é divisível por 2 e é par.
<?php $contador = 1; //Iniciado em um para exibir um na primeira iteração if ( have_posts() ) { while ( have_posts() ) { the_post(); if( $contador % 2 == 0){ echo "Este é um post par!"; //insira o seu código para quando o post for par } else { echo "Este é um post ímpar!"; //insira o seu código para quando o post for ímpar } echo $contador; //Exibe o número da iteração do loop para cada post $contador += 1; //Incrementa o contador para a próxima iteração do loop } } ?>
É importante iniciar o contador com 1, pois caso inicie-o com 0, na primeira iteração ele será considerado par, o que quebraria a lógica. Vamos para uma segunda possível aplicação, perceba que as possibilidades são diversas, se você irá inserir um conteúdo personalizado (imagem, texto), se irá inserir uma tag html ou uma classe css, isso depende de suas necessidades, o foco aqui é mostrar como aplicar isso para que então você consiga fazer seu código conforme o que for preciso.
Definindo se um post é múltiplo de um número “n”
Basicamente o que realizamos anteriormente foi a verificação se o número armazenado na variável $contador era múltiplo de 2, significando que se tratava de um número par em caso de seu módulo resultar em 0. Para verificarmos se um número é múltiplo de qualquer número, basta realizarmos a operação de módulo com o número em questão. Então, por exemplo, em um layout de 3 colunas, em que se deseja atribuir uma classe específica em todo terceiro post do loop, verificaríamos se a variável contador para aquele post é múltiplo de 3, utilizando a operação de módulo.
<?php $contador = 1; //Iniciado em um para exibir um na primeira iteração if ( have_posts() ) { while ( have_posts() ) { the_post(); if( $contador % 3 == 0){ echo "Este é um post múltiplo de 3!"; //insira o seu código para quando o post for múltiplo de 3 } else { echo "Este NÃO é múltiplo de 3!"; //insira o seu código para quando o post não for múltiplo de 3 } echo $contador; //Exibe o número da iteração do loop para cada post $contador += 1; //Incrementa o contador para a próxima iteração do loop } } ?>
Caso no loop existam 9 posts a serem exibidos, nas iterações dos posts 3, 6 e 9, o código executado será o do bloco if, desta forma podendo se tratar diferentemente estes posts. O operador de módulo pode ser utilizado igualmente para definir se é um múltiplo de qualquer outro número, 4, 5, 12, 123, etc.
Utilize o % e descubra suas possibilidades
Basicamente vimos que utilizando o módulo podemos verificar se um número é múltiplo de outro, com o auxílio de uma variável contador no loop. Podemos então especificar a ordem do post a ser exibido e modificar sua regra de exibição com um condicional (if). A partir disso, suas necessidades e criatividades irão te auxiliar na utilização deste operador na criação de seus próximos loops.
Incrementando mais um na variável contador, na verificação do if, por exemplo, faz com que verifiquemos se o post em questão é o anterior ao múltiplo a ser verificado. Da mesma forma, subtraindo um na variável contador, na verificação do if, estamos verificando se o post atual é o imediatamente posterior ao múltiplo verificado.
<?php $contador = 1; //Iniciado em um para exibir um na primeira iteração if ( have_posts() ) { while ( have_posts() ) { the_post(); if ( ($contador+1) % 5 == 0) { echo "Este é um post imediatamente anterior a um múltiplo de 5!"; } if ( ($contador-1) % 3 == 0) { echo "Este é um post imediatamente posterior a um múltiplo de 5!"; } echo $contador; //Exibe o número da iteração do loop para cada post $contador += 1; //Incrementa o contador para a próxima iteração do loop } } ?>
Espero que tenha ajudado àqueles que buscam melhorar o seu tratamento do loop, e para aqueles que buscam como definir regras específicas para cada post, de “n” em “n” iterações do loop. Compartilhem suas utilizações do operador de módulo nos loops do WordPress.