Página de arquivo do tipo de postagem personalizada: definir postagens por página, paginar

4

Eu tenho um tipo de post personalizado chamado video . Gostaria de paginar sua página de arquivo, mostrando somente 3 postagens em cada página.

Há também um loop personalizado na página de arquivo que gera todas as postagens em vídeo (para uma galeria de miniaturas).

Este é o archive-video.php :

<?php while( have_posts() ) : the_post(); ?>
    MAIN LOOP...
<?php endwhile; wp_reset_query(); ?>

<?php next_posts_link(); previous_posts_link(); >

<?php $custom_loop = new WP_Query( array('post_type' => 'video', 'posts_per_page' => '-1' ) );
<?php while ( $custom_loop->have_posts() ) : $custom_loop->the_post(); ?>
    CUSTOM LOOP...
<?php endwhile; ?>

Eu tentei definir posts_per_page como 3 usando pre_get_posts (código aqui) . A paginação funcionaria perfeitamente, mas o loop personalizado agora gera apenas 3 posts e não todos os posts!

Alguém com uma solução codificada / não-plug-in? Estudei no googling sem sucesso ... Qualquer conselho / ajuda seria muito apreciado !!!

    
por asymptote 27.06.2011 / 13:58

3 respostas

4

O código no link que você postou (usando pre_get_posts ) sempre mudará o número de posts_per_page para 3 se você estiver consultando postagens desse tipo. Então, uma solução melhor seria não usar esse código e simplesmente acima do seu código antes:

<?php while( have_posts() ) : the_post(); ?>

adicione:

if ( get_query_var('paged') )
    $paged = get_query_var('paged');
elseif ( get_query_var('page') )
    $paged = get_query_var('page');
else
    $paged = 1;
query_posts(array('post_type' => 'video', 'posts_per_page' => '3', 'paged' => $paged ));

e isso afetará apenas essa consulta e nem todas as consultas desse tipo de postagem.

Atualização:

a estrutura do seu código deve ficar assim:

if ( get_query_var('paged') )
    $paged = get_query_var('paged');
elseif ( get_query_var('page') )
    $paged = get_query_var('page');
else
    $paged = 1;
query_posts(array('post_type' => 'video', 'posts_per_page' => '3', 'paged' => $paged ));
while( have_posts() ) : the_post(); 
    //MAIN LOOP...
endwhile; wp_reset_query(); 

next_posts_link(); previous_posts_link(); 

$custom_loop = new WP_Query( array('post_type' => 'video', 'posts_per_page' => '-1' ) );
while ( $custom_loop->have_posts() ) : $custom_loop->the_post();
    //CUSTOM LOOP...
endwhile;
wp_reset_query(); 
    
por Bainternet 27.06.2011 / 14:37
1

Experimente 'paged' => $paged, após new WP_Query( array('post_type' => 'video', e altere 'posts_per_page' => '-1' para 'posts_per_page' => '3'

    
por MartinJJ 27.06.2011 / 14:12
0

Eu usaria o gancho pre_get_posts no seu caso e filtraria a consulta principal. Adicione o seguinte código ao seu functions.php

add_action( 'pre_get_posts', function ( $query ) {
  if ( $query->is_post_type_archive( 'video' ) && $query->is_main_query() && ! is_admin() ) {
    $query->set( 'posts_per_page', 3 );
  }
} );

Espero que isso ajude!

    
por Robert Bokori 10.02.2017 / 00:48