O post fixo aparece duas vezes

Estou tentando modificar o número de posts_per_page no loop. Deste jeito:

function posts_per_page($query) { $query->query_vars['posts_per_page'] = 3; } add_filter('pre_get_posts', 'posts_per_page', 11); 

O problema que tenho é que quando eu faço isso, as mensagens adesivas aparecem duas vezes no loop: primeiro no início do loop e segundo na sua posição original. Então, neste caso, a primeira página tem 4 posts (3 de loop sem pegajoso + a publicação pegajosa), e a publicação adesiva aparecerá (novamente) mais tarde em sua “página” com outras 2 postagens.

EDIT: SOLUÇÃO

Depois de fazer muita pesquisa, percebi que as mensagens adesivas aparecem sempre na primeira página. Se a postagem original pegajosa já estivesse na primeira página, apenas aparece o pegajoso (esta publicação apenas aparecerá). Eu precisava saber exatamente quantas postagens minha consulta teria, mas $ wp_query-> found_posts não estava contando as postagens pegajosas. E se eu fiz $ wp_query-> found_posts + get_option (‘sticky_posts’) não seria correto, pois não considera a “publicação adesiva da primeira página”, eu disse antes e também conta as publicações não publicadas.

Com $ wp_query-> posts eu recebo o número real de postagens na minha primeira página, então:

 $sticky = count($wp_query->posts) - get_option( 'posts_per_page' ); if ($sticky<0) {$sticky=0;}//In case there is only one page of results 

Agora, $ pegajoso terá o número real de mensagens adesivas.

Solutions Collecting From Web of "O post fixo aparece duas vezes"

O que você descreve não é um problema, mas o comportamento normal do WordPress. Quando você marca uma postagem como pegajosa, estará na parte superior da lista e também aparecerá na sua publicação original, a menos que a posição original esteja na primeira página. Um pegajoso aparecerá no topo das postagens e na sua posição original, mas não aparecerá duas vezes na mesma página.

Você pode querer fazer algo como isto:

 < ?php while (have_posts()) : the_post(); if ( !in_array( $post->ID, $do_not_duplicate ) ) { // check IDs // display posts ... the_title(); //store id in "do not duplicate $do_not_duplicate = $post->ID; } endwhile; ?> 

fonte com edição menor: http://wpengineer.com/1719/filter-duplicate-posts-in-the-loop/

Mais correto seria usar o método set .

 function posts_per_page($query) { $query->set('posts_per_page',3); } add_filter('pre_get_posts', 'posts_per_page', 11); 

Tente isso.

Nota: Não consigo duplicar esse múltiplo problema. Se isso não resolver as coisas, edite sua pergunta com mais detalhes. Isso pode ser específico do tema ou devido a um plugin.