La paginación de taxonomía personalizada de WordPress no funciona

4 minutos de lectura

Estoy usando el complemento WP PageNavi para la paginación. Este problema particular de no hacer que la página taxonomy-portflio-category.php se pagine también es un problema cuando WP PageNavi está desactivado.

Me costó muchísimo hacer que la paginación funcionara en la página de inicio y en una página de plantilla de página, pero logré que funcionaran. Aquí está su código:

página-inicio.php (utilizado como plantilla de página en una página principal estática llamada “Inicio”)

$paged = 1;
if ( get_query_var('paged') ) $paged = get_query_var('paged');
if ( get_query_var('page') ) $paged = get_query_var('page');
$i = 0;
$loop = new WP_Query( array( 'post_type' => 'portfolio', 'paged' => $paged, 'posts_per_page' => 24 ) );
while ( $loop->have_posts() ) : $loop->the_post();
// output
$i++; endwhile;
if ( function_exists( 'wp_pagenavi' ) ) {
    wp_pagenavi( array( 'query' => $loop ) );
    wp_reset_postdata();
}

¡La paginación funciona!

página-portafolio.php (utilizado como plantilla de página en una página llamada “Trabajo”)

$i = 0;
$loop = new WP_Query( array( 'post_type' => 'portfolio', 'paged' => get_query_var( 'paged' ), 'posts_per_page' => 24 ) );
while ( $loop->have_posts() ) : $loop->the_post();
// output
$i++; endwhile;
if ( function_exists( 'wp_pagenavi' ) ) {
    wp_pagenavi( array( 'query' => $loop ) );
    wp_reset_postdata();
}

¡La paginación funciona!

taxonomy-portfolio-category.php (utilizado como una forma de mostrar las secciones de la cartera, por ejemplo, impresión, fotografía, etc.)

$term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
global $wp_query;
query_posts( array_merge( $wp_query->query, array( 'posts_per_page' => 2 ) ) );
if (have_posts()) : while ( have_posts() ) : the_post();
// output
endwhile; endif;
if ( function_exists( 'wp_pagenavi' ) ) {
    wp_pagenavi();
}

¡La página 1 (/portfolio/interactive/) se ve muy bien! Definitivamente solo publica 2 elementos y calcula el número correcto de páginas de paginación. Pero cuando hace clic en la página 2 o 3 o 4 (/portfolio/interactive/page/2/) el sitio predeterminado es index.php y muestra “Página no encontrada”. ¡La paginación falla!

Ojalá pueda resolver esto pronto. He visto MUCHAS personas con este mismo problema de paginación en páginas de taxonomía personalizadas, pero no hay soluciones sólidas. ¡Por favor ayuda!

Debe configurar las publicaciones por página en 24 en la página Configuración -> Lectura en el administrador de WP. Espero que esto ayude a alguien.

Intenté usar WP-Pagenavi pero nunca funcionó, así que usé la paginación de WordPress, usé la función twentyfourteen_paging_nav() de Twentyfourteen porque tiene una página de taxonomía, aquí está el código:

if ( ! function_exists( 'twentyfourteen_paging_nav' ) ) :
function twentyfourteen_paging_nav() {
global $wp_query, $wp_rewrite;

// Don't print empty markup if there's only one page.
if ( $wp_query->max_num_pages < 2 ) {
    return;
}

$paged        = get_query_var( 'paged' ) ? intval( get_query_var( 'paged' ) ) : 1;
$pagenum_link = html_entity_decode( get_pagenum_link() );
$query_args   = array();
$url_parts    = explode( '?', $pagenum_link );

if ( isset( $url_parts[1] ) ) {
    wp_parse_str( $url_parts[1], $query_args );
}

$pagenum_link = remove_query_arg( array_keys( $query_args ), $pagenum_link );
$pagenum_link = trailingslashit( $pagenum_link ) . '%_%';

$format  = $wp_rewrite->using_index_permalinks() && ! strpos( $pagenum_link, 'index.php' ) ? 'index.php/' : '';
$format .= $wp_rewrite->using_permalinks() ? user_trailingslashit( $wp_rewrite->pagination_base . '/%#%', 'paged' ) : '?paged=%#%';

// Set up paginated links.
$links = paginate_links( array(
    'base'     => $pagenum_link,
    'format'   => $format,
    'total'    => $wp_query->max_num_pages,
    'current'  => $paged,
    'mid_size' => 1,
    'add_args' => array_map( 'urlencode', $query_args ),
    'prev_text' => __( '&larr; Previous', 'twentyfourteen' ),
    'next_text' => __( 'Next &rarr;', 'twentyfourteen' ),
) );

if ( $links ) :

?>

<nav class="pagination-contaner" role="navigation">
    <h1 class="screen-reader-text"><?php _e( 'Posts navigation', 'twentyfourteen' ); ?></h1>
    <ul class="pagination">
        <?php echo $links; ?>
    </ul><!-- .pagination -->
</nav><!-- .navigation -->
<?php
endif;
}
endif;

Me encontré con un problema similar, ¡me tomó horas buscar en Google! Encontré la solución al fin. Agregue el siguiente código a functions.php en su carpeta de temas:

$option_posts_per_page = get_option( 'posts_per_page' );
add_action( 'init', 'my_modify_posts_per_page', 0);
function my_modify_posts_per_page() {
    add_filter( 'option_posts_per_page', 'my_option_posts_per_page' );
}
function my_option_posts_per_page( $value ) {
    global $option_posts_per_page;
    if ( is_tax( 'portfolio-category') ) {
        return 2;
    } else {
        return $option_posts_per_page;
    }
}

URL de la solución

avatar de usuario
EmpújaloTu___

Puede ser que necesite habilitar la búsqueda para habilitar la paginación

Al declarar una taxonomía personalizada, debe deshabilitar la exclusión de búsqueda.

exclude_from_search => false

Esto solucionó mi problema.

avatar de usuario
jmarceli

Me gustaría compartir la siguiente solución (agregue este código a functions.php en tu tema):

function fix_taxonomy_pagination ( $query ) {
  // not an admin page and it is the main query
  if (!is_admin() && $query->is_main_query()){

    if(is_tax()){
      // where 24 is number of posts per page on custom taxonomy pages
      $query->set('posts_per_page', 24);

    }
  }
}
add_action( 'pre_get_posts', 'fix_taxonomy_pagination' );

fuente

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad