Listar os Posts Wordpress mais Visualizados
Autor: Roberto | Publicado: 2016-04-08T12:34:00-07:00

Certo dia me deparei em um projeto com uma necessidade muito simples, porém com pouca documentação na internet sobre o mesmo.

Precisava listar os últimos 4 Posts de um site mais lidos e fiquei algumas horas tentando descobrir algum plugin que pudesse me ajudar e qual eu pudesse adaptá-lo para a necessidade de um cliente.

Esse plugin eu consegui achar. &nbsp;Se trata deste abaixo com o link:
&nbsp; &nbsp;- https://wordpress.org/plugins/wordpress-popular-posts/

A maior vantagem neste plugin foi a possibilidade de em uma página personalizada de um Theme que eu venha a desenvolver e em uma página personalizada criada, eu possa inserir os critérios de Post_Type personalizados. 
Para o exemplo que fiz criei os campos personalizados que precisava com o uso dos seguintes plugins:

&nbsp; - https://br.wordpress.org/plugins/advanced-custom-fields/

E para que fique todos os campos personalizados relacionados a um Post Type personalizado, uso o seguinte plugin:

&nbsp; - https://wordpress.org/plugins/custom-post-type-ui/

Embora o propósito deste artigo não seja detalhar o uso e criação dos campos personalizados e &nbsp; post types eu estarei mostrando alguns codigos com o uso do get_fields() método na adaptação do bloco personalizado de "Posts mais Vistos".

Então a personalização do bloco, por exemplo na Home (index.hp de seu theme ou outro). &nbsp;o parametro PHP de chamada do plugin seria este aqui:

&lt;?php  
$contPersonalizado&nbsp;= '&lt;div class=\'col-md-3\' id=\'id-bloco-ultimos\'&gt; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div class=\'box-empreendimento-small\'&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {IMAGEM_DESTAQUE}
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;div class=\'caption bottomcap-small\'&gt; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;h3&gt;{tipo}&lt;/h3&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;h4&gt; {text_title}&lt;/h4&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;p&gt; {texto_destaque_home}&lt;/p&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;br&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;a class=\'btn btn-default\' role=\'button\' href=\'{url}\'&gt;ver mais&lt;/a&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/div&gt; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;/div&gt;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;/div&gt;';

&nbsp; &nbsp; &nbsp;wpp_get_mostpopular( 'post_type="imoveis"&amp;limit=5&amp;post_html="'.$contPersonalizado.'"' ); ?&gt;

Se observarmos acima eu adicionei dois campo personalizados que não existe em uma instalação crua do WordPress:

&nbsp; - {IMAGEM_DESTAQUE} {tipo} {texto_destaque_home}

Enquanto que os campos:

&nbsp; - {text_title} &nbsp;=&gt; Título do site somente texto;
&nbsp; - {url} &nbsp;=&gt; Url direta para abrir o post listado;

Me empolguei um pouco, mas o plugin após instalado apresenta na administração as seguintes abas de configuração:



Na aba Parameters, temos os exemplos de como personalizaríamos a exibição:




Daí surge a pergunta: &nbsp;- Como eu faço para acrescentar os campos a lista deste plugin.
A resposta é alterando o PHP do seguinte arquivo:

&nbsp;- /seusite/wp-content/plugins/wordpress-popular-posts/wordpress-popular-posts.php

Após a linha 1868 adicione as variáveis de que precisa
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $postidd = $p-&gt;id;

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $tipo = getfield('tipo', $p-&gt;id);

na linha &nbsp; 1896, acrescemtamos a varível dentro do objeto de array:

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'postidd' =&gt; $postidd,

&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;'tipo' &nbsp;=&gt; $tipo,

Edit line to add postidd in list


$pattern = '/\{(excerpt|summary|stats|postidd|title|image|thumb|thumb_img|rating|score|url|text_title|postidd|tipo|author|category|views|comments|date)\}/i';


E para finalizar vamos acrescentar os IFs depois da variável :
&nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;array_map('strtolower', $matches[0]);


if ( in_array("{postidd}", $matches[0]) ) {&nbsp;
&nbsp; &nbsp; &nbsp;$string = str_replace( "{postidd}", $data['postidd'], $string );&nbsp;
}

if ( in_array("{tipo}", $matches[0]) ) {&nbsp;
&nbsp; &nbsp; &nbsp;$string = str_replace( "{tipo}", $data['tipo'], $string );&nbsp;
}


Agora o uso das chaves dentro do parâmetro '&amp;post_html=' irão aceitar os dois campos criados.

Falou galera, espero que possa ajudar a muitos e até logo.