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

<center>
{block:Pagination}
{block:PreviousPage}
<a href="{PreviousPage}"> <big><big><big>←</big></big></big></a>
{/block:PreviousPage}


{block:NextPage}
<a href="{NextPage}"><big><big><big> Infinite Scrolling</big></big></big></a>
{/block:NextPage}
{/block:Pagination}



</center>

e modifica conforme mostrado na figura.

Atenção: eu coloquei na zona onde tem inicio o corpo to Tumblr, ou seja <body>.
 O fim do body aparece como <body/>



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 & 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
<?php
if (function_exists('polldaddy_get_rating_html')) { echo polldaddy_get_rating_html(); }
?>
(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 = "") {
  $unique_id = is_page() ? 'wp-page-'.$postid : 'wp-post-'.$postid;
  $item_id = is_page() ? '_page_'.$postid : '_post_'.$postid;
  $unique_id = wp_strip_all_tags( $unique_id );
  $item_id   = wp_strip_all_tags( $item_id );
  $item_id   = preg_replace( '/[^_a-z0-9]/i', '', $item_id );
 
  $settings = json_encode(array(
                                'id'        => $id,
                                'unique_id' => $unique_id,
                                'title'     => rawurlencode( trim( $title ) ),
                                'permalink' => esc_url( $permalink ),
                                'item_id'   => $item_id
  ));
 
  $data = esc_attr($settings);
 
return <<<SCRIPT
<div class="pd-rating" id="pd_rating_holder_{$id}{$item_id}" data-settings="{$data}"></div>
<script type="text/javascript" charset="UTF-8"><!--//--><![CDATA[//><!--
PDRTJS_settings_{$id}{$item_id}={$settings};
//--><!]]></script>
SCRIPT;
 
}
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
<?php
// Variáveis no começo do template, para serem usadas depois
$polldaddy_id = '<ID DO SEU POLLDADDY>';
$postid = get_the_ID();
$title = apply_filters( 'wp_title', get_the_title(), '', '' );
$permalink = get_permalink($postid);
?>
 
<?php echo polldaddyrating($polldaddy_id, $postid, $title, $permalink); ?>
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 </body>:
?
1
<script type="text/javascript" charset="UTF-8" src="http://i.polldaddy.com/ratings/rating.js"></script>
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 < PDRTJS_doc.length; i++) {
    if (PDRTJS_doc[i].id.substring(0, 17) == "pd_rating_holder_") {
        PDRTJS_id = PDRTJS_doc[i].id.replace(/pd_rating_holder_/, "");
 
        var PD_SETTINGS = document.getElementById('pd_rating_holder_' + PDRTJS_id);
        PD_SETTINGS = PD_SETTINGS.getAttribute('data-settings');
        eval("PDRTJS_" + PDRTJS_id + " = new PDRTJS_RATING(" + PD_SETTINGS + ");");
    }
};
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 & 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
<?php
if (function_exists('polldaddy_get_rating_html')) { echo polldaddy_get_rating_html(); }
?>
(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 = "") {
  $unique_id = is_page() ? 'wp-page-'.$postid : 'wp-post-'.$postid;
  $item_id = is_page() ? '_page_'.$postid : '_post_'.$postid;
  $unique_id = wp_strip_all_tags( $unique_id );
  $item_id   = wp_strip_all_tags( $item_id );
  $item_id   = preg_replace( '/[^_a-z0-9]/i', '', $item_id );
 
  $settings = json_encode(array(
                                'id'        => $id,
                                'unique_id' => $unique_id,
                                'title'     => rawurlencode( trim( $title ) ),
                                'permalink' => esc_url( $permalink ),
                                'item_id'   => $item_id
  ));
 
  $data = esc_attr($settings);
 
return <<<SCRIPT
<div class="pd-rating" id="pd_rating_holder_{$id}{$item_id}" data-settings="{$data}"></div>
<script type="text/javascript" charset="UTF-8"><!--//--><![CDATA[//><!--
PDRTJS_settings_{$id}{$item_id}={$settings};
//--><!]]></script>
SCRIPT;
 
}
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
<?php
// Variáveis no começo do template, para serem usadas depois
$polldaddy_id = '<ID DO SEU POLLDADDY>';
$postid = get_the_ID();
$title = apply_filters( 'wp_title', get_the_title(), '', '' );
$permalink = get_permalink($postid);
?>
 
<?php echo polldaddyrating($polldaddy_id, $postid, $title, $permalink); ?>
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 </body>:
?
1
<script type="text/javascript" charset="UTF-8" src="http://i.polldaddy.com/ratings/rating.js"></script>
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 < PDRTJS_doc.length; i++) {
    if (PDRTJS_doc[i].id.substring(0, 17) == "pd_rating_holder_") {
        PDRTJS_id = PDRTJS_doc[i].id.replace(/pd_rating_holder_/, "");
 
        var PD_SETTINGS = document.getElementById('pd_rating_holder_' + PDRTJS_id);
        PD_SETTINGS = PD_SETTINGS.getAttribute('data-settings');
        eval("PDRTJS_" + PDRTJS_id + " = new PDRTJS_RATING(" + PD_SETTINGS + ");");
    }
};
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 & 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
<?php
if (function_exists('polldaddy_get_rating_html')) { echo polldaddy_get_rating_html(); }
?>
(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 = "") {
  $unique_id = is_page() ? 'wp-page-'.$postid : 'wp-post-'.$postid;
  $item_id = is_page() ? '_page_'.$postid : '_post_'.$postid;
  $unique_id = wp_strip_all_tags( $unique_id );
  $item_id   = wp_strip_all_tags( $item_id );
  $item_id   = preg_replace( '/[^_a-z0-9]/i', '', $item_id );
 
  $settings = json_encode(array(
                                'id'        => $id,
                                'unique_id' => $unique_id,
                                'title'     => rawurlencode( trim( $title ) ),
                                'permalink' => esc_url( $permalink ),
                                'item_id'   => $item_id
  ));
 
  $data = esc_attr($settings);
 
return <<<SCRIPT
<div class="pd-rating" id="pd_rating_holder_{$id}{$item_id}" data-settings="{$data}"></div>
<script type="text/javascript" charset="UTF-8"><!--//--><![CDATA[//><!--
PDRTJS_settings_{$id}{$item_id}={$settings};
//--><!]]></script>
SCRIPT;
 
}
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
<?php
// Variáveis no começo do template, para serem usadas depois
$polldaddy_id = '<ID DO SEU POLLDADDY>';
$postid = get_the_ID();
$title = apply_filters( 'wp_title', get_the_title(), '', '' );
$permalink = get_permalink($postid);
?>
 
<?php echo polldaddyrating($polldaddy_id, $postid, $title, $permalink); ?>
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 </body>:
?
1
<script type="text/javascript" charset="UTF-8" src="http://i.polldaddy.com/ratings/rating.js"></script>
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 < PDRTJS_doc.length; i++) {
    if (PDRTJS_doc[i].id.substring(0, 17) == "pd_rating_holder_") {
        PDRTJS_id = PDRTJS_doc[i].id.replace(/pd_rating_holder_/, "");
 
        var PD_SETTINGS = document.getElementById('pd_rating_holder_' + PDRTJS_id);
        PD_SETTINGS = PD_SETTINGS.getAttribute('data-settings');
        eval("PDRTJS_" + PDRTJS_id + " = new PDRTJS_RATING(" + PD_SETTINGS + ");");
    }
};
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 & 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
<?php
if (function_exists('polldaddy_get_rating_html')) { echo polldaddy_get_rating_html(); }
?>
(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 = "") {
  $unique_id = is_page() ? 'wp-page-'.$postid : 'wp-post-'.$postid;
  $item_id = is_page() ? '_page_'.$postid : '_post_'.$postid;
  $unique_id = wp_strip_all_tags( $unique_id );
  $item_id   = wp_strip_all_tags( $item_id );
  $item_id   = preg_replace( '/[^_a-z0-9]/i', '', $item_id );
 
  $settings = json_encode(array(
                                'id'        => $id,
                                'unique_id' => $unique_id,
                                'title'     => rawurlencode( trim( $title ) ),
                                'permalink' => esc_url( $permalink ),
                                'item_id'   => $item_id
  ));
 
  $data = esc_attr($settings);
 
return <<<SCRIPT
<div class="pd-rating" id="pd_rating_holder_{$id}{$item_id}" data-settings="{$data}"></div>
<script type="text/javascript" charset="UTF-8"><!--//--><![CDATA[//><!--
PDRTJS_settings_{$id}{$item_id}={$settings};
//--><!]]></script>
SCRIPT;
 
}
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
<?php
// Variáveis no começo do template, para serem usadas depois
$polldaddy_id = '<ID DO SEU POLLDADDY>';
$postid = get_the_ID();
$title = apply_filters( 'wp_title', get_the_title(), '', '' );
$permalink = get_permalink($postid);
?>
 
<?php echo polldaddyrating($polldaddy_id, $postid, $title, $permalink); ?>
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 </body>:
?
1
<script type="text/javascript" charset="UTF-8" src="http://i.polldaddy.com/ratings/rating.js"></script>
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 < PDRTJS_doc.length; i++) {
    if (PDRTJS_doc[i].id.substring(0, 17) == "pd_rating_holder_") {
        PDRTJS_id = PDRTJS_doc[i].id.replace(/pd_rating_holder_/, "");
 
        var PD_SETTINGS = document.getElementById('pd_rating_holder_' + PDRTJS_id);
        PD_SETTINGS = PD_SETTINGS.getAttribute('data-settings');
        eval("PDRTJS_" + PDRTJS_id + " = new PDRTJS_RATING(" + PD_SETTINGS + ");");
    }
};
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 & 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
<?php
if (function_exists('polldaddy_get_rating_html')) { echo polldaddy_get_rating_html(); }
?>
(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 = "") {
  $unique_id = is_page() ? 'wp-page-'.$postid : 'wp-post-'.$postid;
  $item_id = is_page() ? '_page_'.$postid : '_post_'.$postid;
  $unique_id = wp_strip_all_tags( $unique_id );
  $item_id   = wp_strip_all_tags( $item_id );
  $item_id   = preg_replace( '/[^_a-z0-9]/i', '', $item_id );
 
  $settings = json_encode(array(
                                'id'        => $id,
                                'unique_id' => $unique_id,
                                'title'     => rawurlencode( trim( $title ) ),
                                'permalink' => esc_url( $permalink ),
                                'item_id'   => $item_id
  ));
 
  $data = esc_attr($settings);
 
return <<<SCRIPT
<div class="pd-rating" id="pd_rating_holder_{$id}{$item_id}" data-settings="{$data}"></div>
<script type="text/javascript" charset="UTF-8"><!--//--><![CDATA[//><!--
PDRTJS_settings_{$id}{$item_id}={$settings};
//--><!]]></script>
SCRIPT;
 
}
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
<?php
// Variáveis no começo do template, para serem usadas depois
$polldaddy_id = '<ID DO SEU POLLDADDY>';
$postid = get_the_ID();
$title = apply_filters( 'wp_title', get_the_title(), '', '' );
$permalink = get_permalink($postid);
?>
 
<?php echo polldaddyrating($polldaddy_id, $postid, $title, $permalink); ?>
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 </body>:
?
1
<script type="text/javascript" charset="UTF-8" src="http://i.polldaddy.com/ratings/rating.js"></script>
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 < PDRTJS_doc.length; i++) {
    if (PDRTJS_doc[i].id.substring(0, 17) == "pd_rating_holder_") {
        PDRTJS_id = PDRTJS_doc[i].id.replace(/pd_rating_holder_/, "");
 
        var PD_SETTINGS = document.getElementById('pd_rating_holder_' + PDRTJS_id);
        PD_SETTINGS = PD_SETTINGS.getAttribute('data-settings');
        eval("PDRTJS_" + PDRTJS_id + " = new PDRTJS_RATING(" + PD_SETTINGS + ");");
    }
};
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
Welcome to My Blog



Popular Post

- Copyright © DICAS PARA MICROS -Robotic Notes- Powered by Blogger - Designed by Johanes Djogan -