Scroll Infinito no Tumblr - Como fazer
Autor: Kevin Luzetti | Publicado: 2013-06-27T19:45:00-07:00

&nbsp;Olá galera me desculpem,por ter parado de postar as coisas mas com algumas horas vagas irei recomeçar a postar...Obrigado a todos

O Scroll Infinito permite te visualizar imagens sem sair da página 
inicial, ou seja, para se verem as imagens seguintes do teu blog, basta 
descer sem se ter que passar paras páginas seguintes (2, 3 etc..)

Existem vários métodos mas eu vou só mostrar o que funcionou no meu Tumblr.

1. Clica na função costumize theme do teu Tumblr
2. Clica no Edit Html
3. Depois copia o seguinte texto

&lt;center&gt;{block:Pagination}{block:PreviousPage}&lt;a href="{PreviousPage}"&gt; &lt;big&gt;&lt;big&gt;&lt;big&gt;←&lt;/big&gt;&lt;/big&gt;&lt;/big&gt;&lt;/a&gt;{/block:PreviousPage}{block:NextPage}&lt;a href="{NextPage}"&gt;&lt;big&gt;&lt;big&gt;&lt;big&gt; Infinite Scrolling&lt;/big&gt;&lt;/big&gt;&lt;/big&gt;&lt;/a&gt;{/block:NextPage}{/block:Pagination}&lt;/center&gt;

e modifica conforme mostrado na figura.

Atenção: eu coloquei na zona onde tem inicio o corpo to Tumblr, ou seja &lt;body&gt;.
&nbsp;O fim do body aparece como &lt;body/&gt;

 


4. Depois clica no botão do Update Preview para visualizar na imagem ao lado como fica



5. Clica no Save


Um dos recursos que tem aparecido bastante em sites e portais é o Infinite Scroll.
 Como o nome já diz, esse recurso faz com que as paginações de um site 
carreguem automaticamente quando o usuário desce até o final da página, 
lá embaixo de todas as notícias ou posts. Um dos exemplos mais 
conhecidos é o próprio Facebook, que em seu Feed de notícias 
vai carregando infinitamente os posts à medida que o usuário vai 
descendo a página. O objetivo é que o usuário não tenha que clicar e 
esperar outra página carregar para ver mais conteúdo… Convenhamos que é 
um ótimo recurso de usabilidade :)

No WordPress, existe um plugin chamado Infinite-Scroll
 que faz justamente isso. Toda vez que um usuário vai até o final da 
página, o plugin reconhece e manda uma requisição AJAX pedindo a próxima
 página. Quando o navegador a recebe, o plugin monta automaticamente via
 JS e seletores CSS a parte dos posts no lugar correto, implementando 
assim o recurso de scroll infinito.

Em uma grande variedade de temas, ele funciona automaticamente. Mas 
esse não foi o caso daqui do Devin, que precisou ter uma configuração 
específica para o tema (o que o plugin suporta muito bem). Em resumo, eu
 só precisei configurar o plugin para identificar a div de conteúdo e o link que passa para a próxima página (que no WordPress é geralmente o /page/2/, /page/3/, e por aí vai). O resultado é o que dá para ver na versão atual desse site, nas listagens de posts.

Mas aí…

Problema: diversos plugins para WordPress montam a 
sua funcionalidade em javascript. Quando uma página é carregada via AJAX
 e montada em outra, o javascript da página não é carregado automaticamente. Por isso, as páginas seguintes de listagem de posts poderiam ficar incompletas.

Para resolver isso, o Infinite-Scroll tem uma configuração chamada Callback.
 Uma callback serve para você executar um código JavaScript depois do 
carregamento do plugin. E é assim que resolvemos o problema desses 
plugins com o Infinite-Scroll…


Integração do Infinite Scroll com PollDaddy (Ratings)
O PollDaddy é um plugin da Automattic
 (mesma empresa que faz o WordPress) que disponibiliza enquetes e 
votações para sites. Aqui no Devin, usei o Polldaddy para fazer os 
“joínhas” (e os “joínhas, só que não) dos posts. Ele possui um plugin 
específico para WordPress, o Polldaddy Polls &amp; Ratings, que faz a integração entre o site e o serviço da Polldaddy.

Depois de instalado e ativado, você pode dizer ao plugin para incluir automaticamente os botões nos lugares certos, mas não era o que eu queria. Como o meu tema é bem personalizado, eu queria incluir as tags em algum lugar específico.

E descobri que para incluir o PollDaddy em algum lugar específico, basta chamar a função:




?


1

2

3


&lt;?php

if (function_exists('polldaddy_get_rating_html')) { echo polldaddy_get_rating_html(); }

?&gt;





(Detalhe: só consegui descobrir isso depois de olhar uma linha do ChangeLog!)

Até aí tudo bem. Mas vendo como o plugin funciona, percebi que essa função de tema apenas gera um trecho de HTML, mas todo o conteúdo importante é gerado por um javascript. Esse javascript é executado automaticamente no rodapé da página (footer), e apesar de funcionar bem na página, quando o Infinite-Scroll carrega a outra via AJAX, esse javascript não é carregado! E não tinha função específica que pudesse ser colocada na Callback do Infinite-Scroll pra remediar isso…

A solução! O WordPress.com já tinha implementado o 
Infinite Scroll em seus blogs e temas, por isso o plugin do Polldaddy 
tinha suporte a isso (só que estava bem obscuro. Então eis a solução que encontrei:

1. Edite o arquivo functions.php de seu tema, incluindo a seguinte função:




?


01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27


// Suporte a Infinite Scroll + Polldaddy

// $id = ID da Coleçao no Polldaddy

function polldaddyrating($id, $postid, $title = "", $permalink = "") {

&nbsp;&nbsp;$unique_id = is_page() ? 'wp-page-'.$postid : 'wp-post-'.$postid;

&nbsp;&nbsp;$item_id = is_page() ? '_page_'.$postid : '_post_'.$postid;

&nbsp;&nbsp;$unique_id = wp_strip_all_tags( $unique_id );

&nbsp;&nbsp;$item_id&nbsp;&nbsp; = wp_strip_all_tags( $item_id );

&nbsp;&nbsp;$item_id&nbsp;&nbsp; = preg_replace( '/[^_a-z0-9]/i', '', $item_id );

&nbsp;

&nbsp;&nbsp;$settings = json_encode(array(

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

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

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title'&nbsp;&nbsp;&nbsp;&nbsp; =&gt; rawurlencode( trim( $title ) ),

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'permalink' =&gt; esc_url( $permalink ),

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'item_id'&nbsp;&nbsp; =&gt; $item_id

&nbsp;&nbsp;));

&nbsp;

&nbsp;&nbsp;$data = esc_attr($settings);

&nbsp;

return &lt;&lt;&lt;SCRIPT

&lt;div class="pd-rating" id="pd_rating_holder_{$id}{$item_id}" data-settings="{$data}"&gt;&lt;/div&gt;

&lt;script type="text/javascript" charset="UTF-8"&gt;&lt;!--//--&gt;&lt;![CDATA[//&gt;&lt;!--

PDRTJS_settings_{$id}{$item_id}={$settings};

//--&gt;&lt;!]]&gt;&lt;/script&gt;

SCRIPT;

&nbsp;

}





Isso é basicamente a mesma coisa que o plugin faz quando usa o 
suporte à Infinite Scroll no WordPress.com. A idéia do funcionamento é 
inteligente: ao invés de executar um javascript, ele armazena as 
informações de cada post (que é um JSON) em um atributo HTML5 (data-settings) para depois ser lida pela CallBack do Infinite-Scroll.

2. Agora no arquivo do seu tema, utilize a função para gerar o HTML correto:




?


1

2

3

4

5

6

7

8

9


&lt;?php

// Variáveis no começo do template, para serem usadas depois

$polldaddy_id = '&lt;ID DO SEU POLLDADDY&gt;';

$postid = get_the_ID();

$title = apply_filters( 'wp_title', get_the_title(), '', '' );

$permalink = get_permalink($postid);

?&gt;

&nbsp;

&lt;?php echo polldaddyrating($polldaddy_id, $postid, $title, $permalink); ?&gt;





Esse código vai gerar o código HTML para o post atual dentro do Loop.

3. Carregue o javascript no rodapé da sua página

Logo antes da tag &lt;/body&gt;:




?


1


&lt;script type="text/javascript" charset="UTF-8" src="http://i.polldaddy.com/ratings/rating.js"&gt;&lt;/script&gt;





4. Configure o Infinite-Scroll para, no Callback, executar esse javascript novamente

Em Configurações – Infinite Scroll – Callback, adicione as seguintes linhas:




?


01

02

03

04

05

06

07

08

09

10

11

12


// Polldaddy Ratings

var PDRTJS_doc = document.getElementsByTagName("div");

var PDRTJS_id = "";

for (var i = 0; i &lt; PDRTJS_doc.length; i++) {

&nbsp;&nbsp;&nbsp;&nbsp;if (PDRTJS_doc[i].id.substring(0, 17) == "pd_rating_holder_") {

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PDRTJS_id = PDRTJS_doc[i].id.replace(/pd_rating_holder_/, "");

&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var PD_SETTINGS = document.getElementById('pd_rating_holder_' + PDRTJS_id);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PD_SETTINGS = PD_SETTINGS.getAttribute('data-settings');

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eval("PDRTJS_" + PDRTJS_id + " = new PDRTJS_RATING(" + PD_SETTINGS + ");");

&nbsp;&nbsp;&nbsp;&nbsp;}

};





Toda vez que o Infinite Scroll carregar uma nova página via AJAX, esse javascript irá procurar por todos as tags div que começam com pd_rating_holder_, ler as configurações da tag HTML5 data-settings que geramos no passo 1 e executar o código para gerar os botões de rating.

Essa função foi obtida diretamente do rating.js e modificada para ler em tempo real os atributos HTML5.

5. Pronto!

Agora além dos ratings estarem em qualquer lugar que você queira 
dentro do tema, o Infinite Scroll vai executar a geração dos botões nas 
páginas que requisitar via AJAX.


Integração do Infinite Scroll com ShareThis
Aproveitando a deixa, o plugin de WordPress Share This
 foi utilizado aqui para gerar botões para compartilhar nas redes 
sociais e outros sites. Este plugin também monta os botões com uma 
chamada javascript, e por isso a página carregada via AJAX pelo Infinite
 Scroll não vai executar essa montagem automaticamente.

Agora é mais fácil, basta ir em Configurações – Infinite Scroll – Callback e adicionar a linha:




?


1

2


// Botões do ShareThis

stButtons.makeButtons();





 - See more at: http://www.devin.com.br/infinite-scroll-e-polldaddy/#sthash.hyhIKkJn.dpuf
Um dos recursos que tem aparecido bastante em sites e portais é o Infinite Scroll.
 Como o nome já diz, esse recurso faz com que as paginações de um site 
carreguem automaticamente quando o usuário desce até o final da página, 
lá embaixo de todas as notícias ou posts. Um dos exemplos mais 
conhecidos é o próprio Facebook, que em seu Feed de notícias 
vai carregando infinitamente os posts à medida que o usuário vai 
descendo a página. O objetivo é que o usuário não tenha que clicar e 
esperar outra página carregar para ver mais conteúdo… Convenhamos que é 
um ótimo recurso de usabilidade :)

No WordPress, existe um plugin chamado Infinite-Scroll
 que faz justamente isso. Toda vez que um usuário vai até o final da 
página, o plugin reconhece e manda uma requisição AJAX pedindo a próxima
 página. Quando o navegador a recebe, o plugin monta automaticamente via
 JS e seletores CSS a parte dos posts no lugar correto, implementando 
assim o recurso de scroll infinito.

Em uma grande variedade de temas, ele funciona automaticamente. Mas 
esse não foi o caso daqui do Devin, que precisou ter uma configuração 
específica para o tema (o que o plugin suporta muito bem). Em resumo, eu
 só precisei configurar o plugin para identificar a div de conteúdo e o link que passa para a próxima página (que no WordPress é geralmente o /page/2/, /page/3/, e por aí vai). O resultado é o que dá para ver na versão atual desse site, nas listagens de posts.

Mas aí…

Problema: diversos plugins para WordPress montam a 
sua funcionalidade em javascript. Quando uma página é carregada via AJAX
 e montada em outra, o javascript da página não é carregado automaticamente. Por isso, as páginas seguintes de listagem de posts poderiam ficar incompletas.

Para resolver isso, o Infinite-Scroll tem uma configuração chamada Callback.
 Uma callback serve para você executar um código JavaScript depois do 
carregamento do plugin. E é assim que resolvemos o problema desses 
plugins com o Infinite-Scroll…


Integração do Infinite Scroll com PollDaddy (Ratings)
O PollDaddy é um plugin da Automattic
 (mesma empresa que faz o WordPress) que disponibiliza enquetes e 
votações para sites. Aqui no Devin, usei o Polldaddy para fazer os 
“joínhas” (e os “joínhas, só que não) dos posts. Ele possui um plugin 
específico para WordPress, o Polldaddy Polls &amp; Ratings, que faz a integração entre o site e o serviço da Polldaddy.

Depois de instalado e ativado, você pode dizer ao plugin para incluir automaticamente os botões nos lugares certos, mas não era o que eu queria. Como o meu tema é bem personalizado, eu queria incluir as tags em algum lugar específico.

E descobri que para incluir o PollDaddy em algum lugar específico, basta chamar a função:




?


1

2

3


&lt;?php

if (function_exists('polldaddy_get_rating_html')) { echo polldaddy_get_rating_html(); }

?&gt;





(Detalhe: só consegui descobrir isso depois de olhar uma linha do ChangeLog!)

Até aí tudo bem. Mas vendo como o plugin funciona, percebi que essa função de tema apenas gera um trecho de HTML, mas todo o conteúdo importante é gerado por um javascript. Esse javascript é executado automaticamente no rodapé da página (footer), e apesar de funcionar bem na página, quando o Infinite-Scroll carrega a outra via AJAX, esse javascript não é carregado! E não tinha função específica que pudesse ser colocada na Callback do Infinite-Scroll pra remediar isso…

A solução! O WordPress.com já tinha implementado o 
Infinite Scroll em seus blogs e temas, por isso o plugin do Polldaddy 
tinha suporte a isso (só que estava bem obscuro. Então eis a solução que encontrei:

1. Edite o arquivo functions.php de seu tema, incluindo a seguinte função:




?


01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27


// Suporte a Infinite Scroll + Polldaddy

// $id = ID da Coleçao no Polldaddy

function polldaddyrating($id, $postid, $title = "", $permalink = "") {

&nbsp;&nbsp;$unique_id = is_page() ? 'wp-page-'.$postid : 'wp-post-'.$postid;

&nbsp;&nbsp;$item_id = is_page() ? '_page_'.$postid : '_post_'.$postid;

&nbsp;&nbsp;$unique_id = wp_strip_all_tags( $unique_id );

&nbsp;&nbsp;$item_id&nbsp;&nbsp; = wp_strip_all_tags( $item_id );

&nbsp;&nbsp;$item_id&nbsp;&nbsp; = preg_replace( '/[^_a-z0-9]/i', '', $item_id );

&nbsp;

&nbsp;&nbsp;$settings = json_encode(array(

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

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

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title'&nbsp;&nbsp;&nbsp;&nbsp; =&gt; rawurlencode( trim( $title ) ),

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'permalink' =&gt; esc_url( $permalink ),

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'item_id'&nbsp;&nbsp; =&gt; $item_id

&nbsp;&nbsp;));

&nbsp;

&nbsp;&nbsp;$data = esc_attr($settings);

&nbsp;

return &lt;&lt;&lt;SCRIPT

&lt;div class="pd-rating" id="pd_rating_holder_{$id}{$item_id}" data-settings="{$data}"&gt;&lt;/div&gt;

&lt;script type="text/javascript" charset="UTF-8"&gt;&lt;!--//--&gt;&lt;![CDATA[//&gt;&lt;!--

PDRTJS_settings_{$id}{$item_id}={$settings};

//--&gt;&lt;!]]&gt;&lt;/script&gt;

SCRIPT;

&nbsp;

}





Isso é basicamente a mesma coisa que o plugin faz quando usa o 
suporte à Infinite Scroll no WordPress.com. A idéia do funcionamento é 
inteligente: ao invés de executar um javascript, ele armazena as 
informações de cada post (que é um JSON) em um atributo HTML5 (data-settings) para depois ser lida pela CallBack do Infinite-Scroll.

2. Agora no arquivo do seu tema, utilize a função para gerar o HTML correto:




?


1

2

3

4

5

6

7

8

9


&lt;?php

// Variáveis no começo do template, para serem usadas depois

$polldaddy_id = '&lt;ID DO SEU POLLDADDY&gt;';

$postid = get_the_ID();

$title = apply_filters( 'wp_title', get_the_title(), '', '' );

$permalink = get_permalink($postid);

?&gt;

&nbsp;

&lt;?php echo polldaddyrating($polldaddy_id, $postid, $title, $permalink); ?&gt;





Esse código vai gerar o código HTML para o post atual dentro do Loop.

3. Carregue o javascript no rodapé da sua página

Logo antes da tag &lt;/body&gt;:




?


1


&lt;script type="text/javascript" charset="UTF-8" src="http://i.polldaddy.com/ratings/rating.js"&gt;&lt;/script&gt;





4. Configure o Infinite-Scroll para, no Callback, executar esse javascript novamente

Em Configurações – Infinite Scroll – Callback, adicione as seguintes linhas:




?


01

02

03

04

05

06

07

08

09

10

11

12


// Polldaddy Ratings

var PDRTJS_doc = document.getElementsByTagName("div");

var PDRTJS_id = "";

for (var i = 0; i &lt; PDRTJS_doc.length; i++) {

&nbsp;&nbsp;&nbsp;&nbsp;if (PDRTJS_doc[i].id.substring(0, 17) == "pd_rating_holder_") {

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PDRTJS_id = PDRTJS_doc[i].id.replace(/pd_rating_holder_/, "");

&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var PD_SETTINGS = document.getElementById('pd_rating_holder_' + PDRTJS_id);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PD_SETTINGS = PD_SETTINGS.getAttribute('data-settings');

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eval("PDRTJS_" + PDRTJS_id + " = new PDRTJS_RATING(" + PD_SETTINGS + ");");

&nbsp;&nbsp;&nbsp;&nbsp;}

};





Toda vez que o Infinite Scroll carregar uma nova página via AJAX, esse javascript irá procurar por todos as tags div que começam com pd_rating_holder_, ler as configurações da tag HTML5 data-settings que geramos no passo 1 e executar o código para gerar os botões de rating.

Essa função foi obtida diretamente do rating.js e modificada para ler em tempo real os atributos HTML5.

5. Pronto!

Agora além dos ratings estarem em qualquer lugar que você queira 
dentro do tema, o Infinite Scroll vai executar a geração dos botões nas 
páginas que requisitar via AJAX.


Integração do Infinite Scroll com ShareThis
Aproveitando a deixa, o plugin de WordPress Share This
 foi utilizado aqui para gerar botões para compartilhar nas redes 
sociais e outros sites. Este plugin também monta os botões com uma 
chamada javascript, e por isso a página carregada via AJAX pelo Infinite
 Scroll não vai executar essa montagem automaticamente.

Agora é mais fácil, basta ir em Configurações – Infinite Scroll – Callback e adicionar a linha:




?


1

2


// Botões do ShareThis

stButtons.makeButtons();





 - See more at: http://www.devin.com.br/infinite-scroll-e-polldaddy/#sthash.hyhIKkJn.dpuf


Um dos recursos que tem aparecido bastante em sites e portais é o Infinite Scroll.
 Como o nome já diz, esse recurso faz com que as paginações de um site 
carreguem automaticamente quando o usuário desce até o final da página, 
lá embaixo de todas as notícias ou posts. Um dos exemplos mais 
conhecidos é o próprio Facebook, que em seu Feed de notícias 
vai carregando infinitamente os posts à medida que o usuário vai 
descendo a página. O objetivo é que o usuário não tenha que clicar e 
esperar outra página carregar para ver mais conteúdo… Convenhamos que é 
um ótimo recurso de usabilidade :)

No WordPress, existe um plugin chamado Infinite-Scroll
 que faz justamente isso. Toda vez que um usuário vai até o final da 
página, o plugin reconhece e manda uma requisição AJAX pedindo a próxima
 página. Quando o navegador a recebe, o plugin monta automaticamente via
 JS e seletores CSS a parte dos posts no lugar correto, implementando 
assim o recurso de scroll infinito.

Em uma grande variedade de temas, ele funciona automaticamente. Mas 
esse não foi o caso daqui do Devin, que precisou ter uma configuração 
específica para o tema (o que o plugin suporta muito bem). Em resumo, eu
 só precisei configurar o plugin para identificar a div de conteúdo e o link que passa para a próxima página (que no WordPress é geralmente o /page/2/, /page/3/, e por aí vai). O resultado é o que dá para ver na versão atual desse site, nas listagens de posts.

Mas aí…

Problema: diversos plugins para WordPress montam a 
sua funcionalidade em javascript. Quando uma página é carregada via AJAX
 e montada em outra, o javascript da página não é carregado automaticamente. Por isso, as páginas seguintes de listagem de posts poderiam ficar incompletas.

Para resolver isso, o Infinite-Scroll tem uma configuração chamada Callback.
 Uma callback serve para você executar um código JavaScript depois do 
carregamento do plugin. E é assim que resolvemos o problema desses 
plugins com o Infinite-Scroll…


Integração do Infinite Scroll com PollDaddy (Ratings)
O PollDaddy é um plugin da Automattic
 (mesma empresa que faz o WordPress) que disponibiliza enquetes e 
votações para sites. Aqui no Devin, usei o Polldaddy para fazer os 
“joínhas” (e os “joínhas, só que não) dos posts. Ele possui um plugin 
específico para WordPress, o Polldaddy Polls &amp; Ratings, que faz a integração entre o site e o serviço da Polldaddy.

Depois de instalado e ativado, você pode dizer ao plugin para incluir automaticamente os botões nos lugares certos, mas não era o que eu queria. Como o meu tema é bem personalizado, eu queria incluir as tags em algum lugar específico.

E descobri que para incluir o PollDaddy em algum lugar específico, basta chamar a função:




?


1

2

3


&lt;?php

if (function_exists('polldaddy_get_rating_html')) { echo polldaddy_get_rating_html(); }

?&gt;





(Detalhe: só consegui descobrir isso depois de olhar uma linha do ChangeLog!)

Até aí tudo bem. Mas vendo como o plugin funciona, percebi que essa função de tema apenas gera um trecho de HTML, mas todo o conteúdo importante é gerado por um javascript. Esse javascript é executado automaticamente no rodapé da página (footer), e apesar de funcionar bem na página, quando o Infinite-Scroll carrega a outra via AJAX, esse javascript não é carregado! E não tinha função específica que pudesse ser colocada na Callback do Infinite-Scroll pra remediar isso…

A solução! O WordPress.com já tinha implementado o 
Infinite Scroll em seus blogs e temas, por isso o plugin do Polldaddy 
tinha suporte a isso (só que estava bem obscuro. Então eis a solução que encontrei:

1. Edite o arquivo functions.php de seu tema, incluindo a seguinte função:




?


01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27


// Suporte a Infinite Scroll + Polldaddy

// $id = ID da Coleçao no Polldaddy

function polldaddyrating($id, $postid, $title = "", $permalink = "") {

&nbsp;&nbsp;$unique_id = is_page() ? 'wp-page-'.$postid : 'wp-post-'.$postid;

&nbsp;&nbsp;$item_id = is_page() ? '_page_'.$postid : '_post_'.$postid;

&nbsp;&nbsp;$unique_id = wp_strip_all_tags( $unique_id );

&nbsp;&nbsp;$item_id&nbsp;&nbsp; = wp_strip_all_tags( $item_id );

&nbsp;&nbsp;$item_id&nbsp;&nbsp; = preg_replace( '/[^_a-z0-9]/i', '', $item_id );

&nbsp;

&nbsp;&nbsp;$settings = json_encode(array(

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

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

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title'&nbsp;&nbsp;&nbsp;&nbsp; =&gt; rawurlencode( trim( $title ) ),

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'permalink' =&gt; esc_url( $permalink ),

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'item_id'&nbsp;&nbsp; =&gt; $item_id

&nbsp;&nbsp;));

&nbsp;

&nbsp;&nbsp;$data = esc_attr($settings);

&nbsp;

return &lt;&lt;&lt;SCRIPT

&lt;div class="pd-rating" id="pd_rating_holder_{$id}{$item_id}" data-settings="{$data}"&gt;&lt;/div&gt;

&lt;script type="text/javascript" charset="UTF-8"&gt;&lt;!--//--&gt;&lt;![CDATA[//&gt;&lt;!--

PDRTJS_settings_{$id}{$item_id}={$settings};

//--&gt;&lt;!]]&gt;&lt;/script&gt;

SCRIPT;

&nbsp;

}





Isso é basicamente a mesma coisa que o plugin faz quando usa o 
suporte à Infinite Scroll no WordPress.com. A idéia do funcionamento é 
inteligente: ao invés de executar um javascript, ele armazena as 
informações de cada post (que é um JSON) em um atributo HTML5 (data-settings) para depois ser lida pela CallBack do Infinite-Scroll.

2. Agora no arquivo do seu tema, utilize a função para gerar o HTML correto:




?


1

2

3

4

5

6

7

8

9


&lt;?php

// Variáveis no começo do template, para serem usadas depois

$polldaddy_id = '&lt;ID DO SEU POLLDADDY&gt;';

$postid = get_the_ID();

$title = apply_filters( 'wp_title', get_the_title(), '', '' );

$permalink = get_permalink($postid);

?&gt;

&nbsp;

&lt;?php echo polldaddyrating($polldaddy_id, $postid, $title, $permalink); ?&gt;





Esse código vai gerar o código HTML para o post atual dentro do Loop.

3. Carregue o javascript no rodapé da sua página

Logo antes da tag &lt;/body&gt;:




?


1


&lt;script type="text/javascript" charset="UTF-8" src="http://i.polldaddy.com/ratings/rating.js"&gt;&lt;/script&gt;





4. Configure o Infinite-Scroll para, no Callback, executar esse javascript novamente

Em Configurações – Infinite Scroll – Callback, adicione as seguintes linhas:




?


01

02

03

04

05

06

07

08

09

10

11

12


// Polldaddy Ratings

var PDRTJS_doc = document.getElementsByTagName("div");

var PDRTJS_id = "";

for (var i = 0; i &lt; PDRTJS_doc.length; i++) {

&nbsp;&nbsp;&nbsp;&nbsp;if (PDRTJS_doc[i].id.substring(0, 17) == "pd_rating_holder_") {

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PDRTJS_id = PDRTJS_doc[i].id.replace(/pd_rating_holder_/, "");

&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var PD_SETTINGS = document.getElementById('pd_rating_holder_' + PDRTJS_id);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PD_SETTINGS = PD_SETTINGS.getAttribute('data-settings');

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eval("PDRTJS_" + PDRTJS_id + " = new PDRTJS_RATING(" + PD_SETTINGS + ");");

&nbsp;&nbsp;&nbsp;&nbsp;}

};





Toda vez que o Infinite Scroll carregar uma nova página via AJAX, esse javascript irá procurar por todos as tags div que começam com pd_rating_holder_, ler as configurações da tag HTML5 data-settings que geramos no passo 1 e executar o código para gerar os botões de rating.

Essa função foi obtida diretamente do rating.js e modificada para ler em tempo real os atributos HTML5.

5. Pronto!

Agora além dos ratings estarem em qualquer lugar que você queira 
dentro do tema, o Infinite Scroll vai executar a geração dos botões nas 
páginas que requisitar via AJAX.


Integração do Infinite Scroll com ShareThis
Aproveitando a deixa, o plugin de WordPress Share This
 foi utilizado aqui para gerar botões para compartilhar nas redes 
sociais e outros sites. Este plugin também monta os botões com uma 
chamada javascript, e por isso a página carregada via AJAX pelo Infinite
 Scroll não vai executar essa montagem automaticamente.

Agora é mais fácil, basta ir em Configurações – Infinite Scroll – Callback e adicionar a linha:




?


1

2


// Botões do ShareThis

stButtons.makeButtons();





 - See more at: http://www.devin.com.br/infinite-scroll-e-polldaddy/#sthash.hyhIKkJn.dpuf
Um dos recursos que tem aparecido bastante em sites e portais é o Infinite Scroll.
 Como o nome já diz, esse recurso faz com que as paginações de um site 
carreguem automaticamente quando o usuário desce até o final da página, 
lá embaixo de todas as notícias ou posts. Um dos exemplos mais 
conhecidos é o próprio Facebook, que em seu Feed de notícias 
vai carregando infinitamente os posts à medida que o usuário vai 
descendo a página. O objetivo é que o usuário não tenha que clicar e 
esperar outra página carregar para ver mais conteúdo… Convenhamos que é 
um ótimo recurso de usabilidade :)

No WordPress, existe um plugin chamado Infinite-Scroll
 que faz justamente isso. Toda vez que um usuário vai até o final da 
página, o plugin reconhece e manda uma requisição AJAX pedindo a próxima
 página. Quando o navegador a recebe, o plugin monta automaticamente via
 JS e seletores CSS a parte dos posts no lugar correto, implementando 
assim o recurso de scroll infinito.

Em uma grande variedade de temas, ele funciona automaticamente. Mas 
esse não foi o caso daqui do Devin, que precisou ter uma configuração 
específica para o tema (o que o plugin suporta muito bem). Em resumo, eu
 só precisei configurar o plugin para identificar a div de conteúdo e o link que passa para a próxima página (que no WordPress é geralmente o /page/2/, /page/3/, e por aí vai). O resultado é o que dá para ver na versão atual desse site, nas listagens de posts.

Mas aí…

Problema: diversos plugins para WordPress montam a 
sua funcionalidade em javascript. Quando uma página é carregada via AJAX
 e montada em outra, o javascript da página não é carregado automaticamente. Por isso, as páginas seguintes de listagem de posts poderiam ficar incompletas.

Para resolver isso, o Infinite-Scroll tem uma configuração chamada Callback.
 Uma callback serve para você executar um código JavaScript depois do 
carregamento do plugin. E é assim que resolvemos o problema desses 
plugins com o Infinite-Scroll…


Integração do Infinite Scroll com PollDaddy (Ratings)
O PollDaddy é um plugin da Automattic
 (mesma empresa que faz o WordPress) que disponibiliza enquetes e 
votações para sites. Aqui no Devin, usei o Polldaddy para fazer os 
“joínhas” (e os “joínhas, só que não) dos posts. Ele possui um plugin 
específico para WordPress, o Polldaddy Polls &amp; Ratings, que faz a integração entre o site e o serviço da Polldaddy.

Depois de instalado e ativado, você pode dizer ao plugin para incluir automaticamente os botões nos lugares certos, mas não era o que eu queria. Como o meu tema é bem personalizado, eu queria incluir as tags em algum lugar específico.

E descobri que para incluir o PollDaddy em algum lugar específico, basta chamar a função:




?


1

2

3


&lt;?php

if (function_exists('polldaddy_get_rating_html')) { echo polldaddy_get_rating_html(); }

?&gt;





(Detalhe: só consegui descobrir isso depois de olhar uma linha do ChangeLog!)

Até aí tudo bem. Mas vendo como o plugin funciona, percebi que essa função de tema apenas gera um trecho de HTML, mas todo o conteúdo importante é gerado por um javascript. Esse javascript é executado automaticamente no rodapé da página (footer), e apesar de funcionar bem na página, quando o Infinite-Scroll carrega a outra via AJAX, esse javascript não é carregado! E não tinha função específica que pudesse ser colocada na Callback do Infinite-Scroll pra remediar isso…

A solução! O WordPress.com já tinha implementado o 
Infinite Scroll em seus blogs e temas, por isso o plugin do Polldaddy 
tinha suporte a isso (só que estava bem obscuro. Então eis a solução que encontrei:

1. Edite o arquivo functions.php de seu tema, incluindo a seguinte função:




?


01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27


// Suporte a Infinite Scroll + Polldaddy

// $id = ID da Coleçao no Polldaddy

function polldaddyrating($id, $postid, $title = "", $permalink = "") {

&nbsp;&nbsp;$unique_id = is_page() ? 'wp-page-'.$postid : 'wp-post-'.$postid;

&nbsp;&nbsp;$item_id = is_page() ? '_page_'.$postid : '_post_'.$postid;

&nbsp;&nbsp;$unique_id = wp_strip_all_tags( $unique_id );

&nbsp;&nbsp;$item_id&nbsp;&nbsp; = wp_strip_all_tags( $item_id );

&nbsp;&nbsp;$item_id&nbsp;&nbsp; = preg_replace( '/[^_a-z0-9]/i', '', $item_id );

&nbsp;

&nbsp;&nbsp;$settings = json_encode(array(

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

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

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title'&nbsp;&nbsp;&nbsp;&nbsp; =&gt; rawurlencode( trim( $title ) ),

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'permalink' =&gt; esc_url( $permalink ),

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'item_id'&nbsp;&nbsp; =&gt; $item_id

&nbsp;&nbsp;));

&nbsp;

&nbsp;&nbsp;$data = esc_attr($settings);

&nbsp;

return &lt;&lt;&lt;SCRIPT

&lt;div class="pd-rating" id="pd_rating_holder_{$id}{$item_id}" data-settings="{$data}"&gt;&lt;/div&gt;

&lt;script type="text/javascript" charset="UTF-8"&gt;&lt;!--//--&gt;&lt;![CDATA[//&gt;&lt;!--

PDRTJS_settings_{$id}{$item_id}={$settings};

//--&gt;&lt;!]]&gt;&lt;/script&gt;

SCRIPT;

&nbsp;

}





Isso é basicamente a mesma coisa que o plugin faz quando usa o 
suporte à Infinite Scroll no WordPress.com. A idéia do funcionamento é 
inteligente: ao invés de executar um javascript, ele armazena as 
informações de cada post (que é um JSON) em um atributo HTML5 (data-settings) para depois ser lida pela CallBack do Infinite-Scroll.

2. Agora no arquivo do seu tema, utilize a função para gerar o HTML correto:




?


1

2

3

4

5

6

7

8

9


&lt;?php

// Variáveis no começo do template, para serem usadas depois

$polldaddy_id = '&lt;ID DO SEU POLLDADDY&gt;';

$postid = get_the_ID();

$title = apply_filters( 'wp_title', get_the_title(), '', '' );

$permalink = get_permalink($postid);

?&gt;

&nbsp;

&lt;?php echo polldaddyrating($polldaddy_id, $postid, $title, $permalink); ?&gt;





Esse código vai gerar o código HTML para o post atual dentro do Loop.

3. Carregue o javascript no rodapé da sua página

Logo antes da tag &lt;/body&gt;:




?


1


&lt;script type="text/javascript" charset="UTF-8" src="http://i.polldaddy.com/ratings/rating.js"&gt;&lt;/script&gt;





4. Configure o Infinite-Scroll para, no Callback, executar esse javascript novamente

Em Configurações – Infinite Scroll – Callback, adicione as seguintes linhas:




?


01

02

03

04

05

06

07

08

09

10

11

12


// Polldaddy Ratings

var PDRTJS_doc = document.getElementsByTagName("div");

var PDRTJS_id = "";

for (var i = 0; i &lt; PDRTJS_doc.length; i++) {

&nbsp;&nbsp;&nbsp;&nbsp;if (PDRTJS_doc[i].id.substring(0, 17) == "pd_rating_holder_") {

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PDRTJS_id = PDRTJS_doc[i].id.replace(/pd_rating_holder_/, "");

&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var PD_SETTINGS = document.getElementById('pd_rating_holder_' + PDRTJS_id);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PD_SETTINGS = PD_SETTINGS.getAttribute('data-settings');

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eval("PDRTJS_" + PDRTJS_id + " = new PDRTJS_RATING(" + PD_SETTINGS + ");");

&nbsp;&nbsp;&nbsp;&nbsp;}

};





Toda vez que o Infinite Scroll carregar uma nova página via AJAX, esse javascript irá procurar por todos as tags div que começam com pd_rating_holder_, ler as configurações da tag HTML5 data-settings que geramos no passo 1 e executar o código para gerar os botões de rating.

Essa função foi obtida diretamente do rating.js e modificada para ler em tempo real os atributos HTML5.

5. Pronto!

Agora além dos ratings estarem em qualquer lugar que você queira 
dentro do tema, o Infinite Scroll vai executar a geração dos botões nas 
páginas que requisitar via AJAX.


Integração do Infinite Scroll com ShareThis
Aproveitando a deixa, o plugin de WordPress Share This
 foi utilizado aqui para gerar botões para compartilhar nas redes 
sociais e outros sites. Este plugin também monta os botões com uma 
chamada javascript, e por isso a página carregada via AJAX pelo Infinite
 Scroll não vai executar essa montagem automaticamente.

Agora é mais fácil, basta ir em Configurações – Infinite Scroll – Callback e adicionar a linha:




?


1

2


// Botões do ShareThis

stButtons.makeButtons();





 - See more at: http://www.devin.com.br/infinite-scroll-e-polldaddy/#sthash.hyhIKkJn.dpuf

Um dos recursos que tem aparecido bastante em sites e portais é o Infinite Scroll.
 Como o nome já diz, esse recurso faz com que as paginações de um site 
carreguem automaticamente quando o usuário desce até o final da página, 
lá embaixo de todas as notícias ou posts. Um dos exemplos mais 
conhecidos é o próprio Facebook, que em seu Feed de notícias 
vai carregando infinitamente os posts à medida que o usuário vai 
descendo a página. O objetivo é que o usuário não tenha que clicar e 
esperar outra página carregar para ver mais conteúdo… Convenhamos que é 
um ótimo recurso de usabilidade :)

No WordPress, existe um plugin chamado Infinite-Scroll
 que faz justamente isso. Toda vez que um usuário vai até o final da 
página, o plugin reconhece e manda uma requisição AJAX pedindo a próxima
 página. Quando o navegador a recebe, o plugin monta automaticamente via
 JS e seletores CSS a parte dos posts no lugar correto, implementando 
assim o recurso de scroll infinito.

Em uma grande variedade de temas, ele funciona automaticamente. Mas 
esse não foi o caso daqui do Devin, que precisou ter uma configuração 
específica para o tema (o que o plugin suporta muito bem). Em resumo, eu
 só precisei configurar o plugin para identificar a div de conteúdo e o link que passa para a próxima página (que no WordPress é geralmente o /page/2/, /page/3/, e por aí vai). O resultado é o que dá para ver na versão atual desse site, nas listagens de posts.

Mas aí…

Problema: diversos plugins para WordPress montam a 
sua funcionalidade em javascript. Quando uma página é carregada via AJAX
 e montada em outra, o javascript da página não é carregado automaticamente. Por isso, as páginas seguintes de listagem de posts poderiam ficar incompletas.

Para resolver isso, o Infinite-Scroll tem uma configuração chamada Callback.
 Uma callback serve para você executar um código JavaScript depois do 
carregamento do plugin. E é assim que resolvemos o problema desses 
plugins com o Infinite-Scroll…


Integração do Infinite Scroll com PollDaddy (Ratings)
O PollDaddy é um plugin da Automattic
 (mesma empresa que faz o WordPress) que disponibiliza enquetes e 
votações para sites. Aqui no Devin, usei o Polldaddy para fazer os 
“joínhas” (e os “joínhas, só que não) dos posts. Ele possui um plugin 
específico para WordPress, o Polldaddy Polls &amp; Ratings, que faz a integração entre o site e o serviço da Polldaddy.

Depois de instalado e ativado, você pode dizer ao plugin para incluir automaticamente os botões nos lugares certos, mas não era o que eu queria. Como o meu tema é bem personalizado, eu queria incluir as tags em algum lugar específico.

E descobri que para incluir o PollDaddy em algum lugar específico, basta chamar a função:




?


1

2

3


&lt;?php

if (function_exists('polldaddy_get_rating_html')) { echo polldaddy_get_rating_html(); }

?&gt;





(Detalhe: só consegui descobrir isso depois de olhar uma linha do ChangeLog!)

Até aí tudo bem. Mas vendo como o plugin funciona, percebi que essa função de tema apenas gera um trecho de HTML, mas todo o conteúdo importante é gerado por um javascript. Esse javascript é executado automaticamente no rodapé da página (footer), e apesar de funcionar bem na página, quando o Infinite-Scroll carrega a outra via AJAX, esse javascript não é carregado! E não tinha função específica que pudesse ser colocada na Callback do Infinite-Scroll pra remediar isso…

A solução! O WordPress.com já tinha implementado o 
Infinite Scroll em seus blogs e temas, por isso o plugin do Polldaddy 
tinha suporte a isso (só que estava bem obscuro. Então eis a solução que encontrei:

1. Edite o arquivo functions.php de seu tema, incluindo a seguinte função:




?


01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27


// Suporte a Infinite Scroll + Polldaddy

// $id = ID da Coleçao no Polldaddy

function polldaddyrating($id, $postid, $title = "", $permalink = "") {

&nbsp;&nbsp;$unique_id = is_page() ? 'wp-page-'.$postid : 'wp-post-'.$postid;

&nbsp;&nbsp;$item_id = is_page() ? '_page_'.$postid : '_post_'.$postid;

&nbsp;&nbsp;$unique_id = wp_strip_all_tags( $unique_id );

&nbsp;&nbsp;$item_id&nbsp;&nbsp; = wp_strip_all_tags( $item_id );

&nbsp;&nbsp;$item_id&nbsp;&nbsp; = preg_replace( '/[^_a-z0-9]/i', '', $item_id );

&nbsp;

&nbsp;&nbsp;$settings = json_encode(array(

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

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

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'title'&nbsp;&nbsp;&nbsp;&nbsp; =&gt; rawurlencode( trim( $title ) ),

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'permalink' =&gt; esc_url( $permalink ),

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'item_id'&nbsp;&nbsp; =&gt; $item_id

&nbsp;&nbsp;));

&nbsp;

&nbsp;&nbsp;$data = esc_attr($settings);

&nbsp;

return &lt;&lt;&lt;SCRIPT

&lt;div class="pd-rating" id="pd_rating_holder_{$id}{$item_id}" data-settings="{$data}"&gt;&lt;/div&gt;

&lt;script type="text/javascript" charset="UTF-8"&gt;&lt;!--//--&gt;&lt;![CDATA[//&gt;&lt;!--

PDRTJS_settings_{$id}{$item_id}={$settings};

//--&gt;&lt;!]]&gt;&lt;/script&gt;

SCRIPT;

&nbsp;

}





Isso é basicamente a mesma coisa que o plugin faz quando usa o 
suporte à Infinite Scroll no WordPress.com. A idéia do funcionamento é 
inteligente: ao invés de executar um javascript, ele armazena as 
informações de cada post (que é um JSON) em um atributo HTML5 (data-settings) para depois ser lida pela CallBack do Infinite-Scroll.

2. Agora no arquivo do seu tema, utilize a função para gerar o HTML correto:




?


1

2

3

4

5

6

7

8

9


&lt;?php

// Variáveis no começo do template, para serem usadas depois

$polldaddy_id = '&lt;ID DO SEU POLLDADDY&gt;';

$postid = get_the_ID();

$title = apply_filters( 'wp_title', get_the_title(), '', '' );

$permalink = get_permalink($postid);

?&gt;

&nbsp;

&lt;?php echo polldaddyrating($polldaddy_id, $postid, $title, $permalink); ?&gt;





Esse código vai gerar o código HTML para o post atual dentro do Loop.

3. Carregue o javascript no rodapé da sua página

Logo antes da tag &lt;/body&gt;:




?


1


&lt;script type="text/javascript" charset="UTF-8" src="http://i.polldaddy.com/ratings/rating.js"&gt;&lt;/script&gt;





4. Configure o Infinite-Scroll para, no Callback, executar esse javascript novamente

Em Configurações – Infinite Scroll – Callback, adicione as seguintes linhas:




?


01

02

03

04

05

06

07

08

09

10

11

12


// Polldaddy Ratings

var PDRTJS_doc = document.getElementsByTagName("div");

var PDRTJS_id = "";

for (var i = 0; i &lt; PDRTJS_doc.length; i++) {

&nbsp;&nbsp;&nbsp;&nbsp;if (PDRTJS_doc[i].id.substring(0, 17) == "pd_rating_holder_") {

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PDRTJS_id = PDRTJS_doc[i].id.replace(/pd_rating_holder_/, "");

&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var PD_SETTINGS = document.getElementById('pd_rating_holder_' + PDRTJS_id);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PD_SETTINGS = PD_SETTINGS.getAttribute('data-settings');

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eval("PDRTJS_" + PDRTJS_id + " = new PDRTJS_RATING(" + PD_SETTINGS + ");");

&nbsp;&nbsp;&nbsp;&nbsp;}

};





Toda vez que o Infinite Scroll carregar uma nova página via AJAX, esse javascript irá procurar por todos as tags div que começam com pd_rating_holder_, ler as configurações da tag HTML5 data-settings que geramos no passo 1 e executar o código para gerar os botões de rating.

Essa função foi obtida diretamente do rating.js e modificada para ler em tempo real os atributos HTML5.

5. Pronto!

Agora além dos ratings estarem em qualquer lugar que você queira 
dentro do tema, o Infinite Scroll vai executar a geração dos botões nas 
páginas que requisitar via AJAX.


Integração do Infinite Scroll com ShareThis
Aproveitando a deixa, o plugin de WordPress Share This
 foi utilizado aqui para gerar botões para compartilhar nas redes 
sociais e outros sites. Este plugin também monta os botões com uma 
chamada javascript, e por isso a página carregada via AJAX pelo Infinite
 Scroll não vai executar essa montagem automaticamente.

Agora é mais fácil, basta ir em Configurações – Infinite Scroll – Callback e adicionar a linha:




?


1

2


// Botões do ShareThis

stButtons.makeButtons();





 - See more at: http://www.devin.com.br/infinite-scroll-e-polldaddy/#sthash.hyhIKkJn.dpuf