Página de archivo de tipo de publicación personalizada: Configurar publicaciones por página, Paginar

4

Tengo un tipo de publicación personalizado llamado video . Quisiera paginar su página de archivo, mostrando solo 3 publicaciones en cada página.

También hay un bucle personalizado en la página de archivo que muestra todas las publicaciones de video (para una galería de miniaturas).

Este es el 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; ?>

He intentado establecer posts_per_page en 3 utilizando pre_get_posts (codifique aquí) . La paginación funcionaría perfectamente, ¡pero el bucle personalizado ahora genera solo 3 publicaciones y no todas las publicaciones!

¿Alguien con una solución de código duro / sin plugin? He estado buscando en Google en vano ... ¡Cualquier consejo / ayuda sería muy apreciado!

    
pregunta asymptote 27.06.2011 - 13:58

3 respuestas

4

El código en el enlace que publicaste (usando pre_get_posts ) siempre cambiará el número de posts_per_page a 3 si estás consultando publicaciones de ese tipo. Por lo tanto, una mejor solución sería no usar ese código y simplemente encima de su código, antes de:

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

añadir:

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 ));

y esto solo afectará esa consulta y no todas las consultas de ese tipo de publicación.

Actualización:

la estructura de su código debería tener este aspecto:

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(); 
    
respondido por el Bainternet 27.06.2011 - 14:37
1

Prueba 'paged' => $paged, después de new WP_Query( array('post_type' => 'video', y cambia 'posts_per_page' => '-1' a 'posts_per_page' => '3'

    
respondido por el MartinJJ 27.06.2011 - 14:12
0

Yo usaría el gancho pre_get_posts en su caso y filtraría la consulta principal. Agregue el siguiente código a sus funciones.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 esto ayude!

    
respondido por el Robert Bokori 10.02.2017 - 00:48

Lea otras preguntas en las etiquetas