Paginar página de tipo de postagem personalizada

2

Eu criei uma página para meus tipos de postagem personalizados. O código pode ser visto em Snippi: enlace

Estou tentando inserir paginado_links, mas, por alguma razão, ele simplesmente não está aparecendo. Aqui está o código paginate_links (este código funciona em arquivos archive.php normais):

<?php
global $wp_query;

$big = 999999999; // need an unlikely integer

echo paginate_links( array(
    'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) ),
    'format' => '?paged=%#%',
    'current' => max( 1, get_query_var('paged') ),
    'total' => $wp_query->max_num_pages
) );
?>
    
por AndrettiMilas 25.02.2012 / 16:36

7 respostas

9

O seguinte funciona para mim (removi toda a formatação / pós meta personalizada).

Gostaria de acrescentar, não está claro por que você precisa usar uma página com um modelo personalizado e, em vez disso, não crie um modelo chamado archive-portfolio.php , que é usado para as páginas de arquivo de um tipo de postagem personalizado (consulte hierarquia de modelos )

<?php
/*
Template Name: Portfolio
*/
?>

<?php get_header(); ?>
<div id="container">
<div id="portfolio_content">
<div id="portfolio_wrap">

    <?php $loop = new WP_Query(array('post_type' => 'portfolio', 'posts_per_page' => get_option('to_count_portfolio'), 'paged' => get_query_var('paged') ? get_query_var('paged') : 1 )
); ?>
    <?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
        <span class="title"><?php the_title(); ?></span></br>
        <?php endwhile; ?>  

<?php

$big = 999999999; // need an unlikely integer
 echo paginate_links( array(
    'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) ),
    'format' => '?paged=%#%',
    'current' => max( 1, get_query_var('paged') ),
    'total' => $loop->max_num_pages
) );
?>
</div>
</div>
</div>
</div>

<?php get_footer(); ?>
    
por Stephen Harris 29.02.2012 / 16:23
1

Já tentou usar a página de arquivo raiz do tipo de postagem de portfólio?

Se você mover a maior parte do seu código para um arquivo archive-portfolio.php, o loop deverá ser configurado corretamente e a paginação deverá funcionar imediatamente, sem funções funky, ou hacks ou kludges, assim como acontece em postar arquivos.

Isso também significa que você não precisa usar sua própria consulta personalizada, apenas use o loop principal, tornando a página mais rápida

    
por Tom J Nowell 01.03.2012 / 13:55
1

Em vez de usar a abordagem "$ loop- > have_posts ()", como Stephen Harris apontou, você também pode tentar colocar os posts em loop desta forma:

<?php foreach ($loop->get_posts() as $post) { ?>
     <span class="title"><?php echo $post->post_title; ?></span></br>
<?php } ?>
    
por Pablo S G Pacheco 29.12.2012 / 22:16
0

Você está fazendo a consulta principal, então é provável que esteja tentando exibir apenas "postagens", em oposição ao seu tipo de postagem personalizado.

Não sei qual é o seu formato exato, mas eu refazia a consulta.

$args = Array( // Array of arguments for query_posts()
    'numberposts' => -1,
    'posts_per_page' => get_option('posts_per_page'),
    'paged' => $paged,
    'post_type' => array('your-post-type-slug', 'another-post-type-slug-if-you-want')
);
query_posts($args);

Isso significa que seu código se tornaria -

<?php
global $wp_query; // You don't need this if you are not in a function, so can probably be removed.

$args = Array( // Array of arguments for query_posts()
    'numberposts' => -1,
    'posts_per_page' => get_option('posts_per_page'),
    'paged' => $paged,
    'post_type' => array('your-post-type-slug', 'another-post-type-slug-if-you-want')
);
query_posts($args);


$big = 999999999; // need an unlikely integer

echo paginate_links( array(
    'base' => str_replace( $big, '%#%', get_pagenum_link( $big ) ),
    'format' => '?paged=%#%',
    'current' => max( 1, get_query_var('paged') ),
    'total' => $wp_query->max_num_pages )
);
?>
    
por David Gard 29.02.2012 / 12:14
0

Este é um problema com o qual tenho lutado em muitas ocasiões.

Aqui está o que funcionou para mim nesta situação (WP 3.1.1):

<?php   
                $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
                $args = array( 'post_type' => 'custom_post_type', 'posts_per_page' => 5, 'paged' => $paged);
                $loop = new WP_Query( $args );
                if($loop->have_posts()):
                    while ( $loop->have_posts() ) : $loop->the_post();
                        //whatever output you require, such as, e.g:
                        the_excerpt();
                    endwhile;
                endif;
        ?>

Em seguida, para os controles de paginação:

<?php 
    echo custom_paginate_links( 
                            array(
                                'format' => '?paged=%#%',
                                'current' => max( 1, get_query_var( 'paged' ) ),
                                'total' => $loop->max_num_pages
                                ) );
?>
    
por heathenJesus 29.02.2012 / 17:28
0

Seria melhor criar uma função dentro do seu arquivo functions.php que lida com a paginação e pode ser usado em todo o seu tema, para tipos de postagem padrão e personalizados.

Com a seguinte função, descartar get_pagination() no seu tema lhe dará navegação sempre que precisar. Eu escrevi um post no blog aqui: enlace (e o código é baseado em enlace originalmente)

/**
 * A pagination function
 * @param integer $range: The range of the slider, works best with even numbers
 * Used WP functions:
 * get_pagenum_link($i) - creates the link, e.g. http://site.com/page/4
 * previous_posts_link(' ‚ '); - returns the Previous page link
 * next_posts_link(' é '); - returns the Next page link
 * http://robertbasic.com/blog/wordpress-paging-navigation/
 * tweaked by tdB ...
 */
function get_pagination($range = 4) {
global $paged, $wp_query;

// How much pages do we have?
if ( !$max_page ) {
    $max_page = $wp_query->max_num_pages;
}

// We need the pagination only if there is more than 1 page
if ( $max_page > 1 ) {
    if ( !$paged ) $paged = 1;

    echo '<div class="postpagination">';

    // To the previous page
    previous_posts_link('Prev');

    if ( $paged >= $range ) echo '<a href="' . get_pagenum_link(1) . '">1</a>';
    if ( $paged >= ($range + 1) ) echo '<span class="page-numbers">&hellip;</span>';

    // We need the sliding effect only if there are more pages than is the sliding range
    if ( $max_page > $range ) {
        // When closer to the beginning
        if ( $paged < $range ) {
            for ( $i = 1; $i <= ($range + 1); $i++ ) {
                    echo ( $i != $paged ) ? '<a href="' . get_pagenum_link($i) .'">'.$i.'</a>' : '<span class="this-page">'.$i.'</span>';
            }
        // When closer to the end
        } elseif ( $paged >= ($max_page - ceil(($range/2))) ) {
            for ( $i = $max_page - $range; $i <= $max_page; $i++ ) {
                echo ( $i != $paged ) ? '<a href="' . get_pagenum_link($i) .'">'.$i.'</a>' : '<span class="this-page">'.$i.'</span>';
            }
        // Somewhere in the middle
        } elseif ( $paged >= $range && $paged < ($max_page - ceil(($range/2))) ) {
            for ( $i = ($paged - ceil($range/2)); $i <= ($paged + ceil(($range/2))); $i++ ) {
                echo ($i != $paged) ? '<a href="' . get_pagenum_link($i) .'">'.$i.'</a>' : '<span class="this-page">'.$i.'</span>';
            }
        }
    // Less pages than the range, no sliding effect needed
    } else {
        for ( $i = 1; $i <= $max_page; $i++ ) {
                echo ($i != $paged) ? '<a href="' . get_pagenum_link($i) .'">'.$i.'</a>' : '<span class="this-page">'.$i.'</span>';
            }
    }

    // On the last page, don't put the Last page link
    if ( $paged <= $max_page - ($range - 1) ) echo '<span class="page-numbers">&hellip;</span><a href="' . get_pagenum_link($max_page) . '">' . $max_page . '</a>';

    // Next page
    next_posts_link('Next');

    echo '</div><!-- postpagination -->';
}
}
    
por deadlyhifi 01.03.2012 / 09:00
0

Nunca tive um problema ao usar paginação em um arquivo personalizado. Assim, em vez de criar uma página e depois escrever minha própria consulta, basta copiar / colar archive.php e renomeá-la para corresponder à sua postagem personalizada, por exemplo, archive-videos.php .

Se você realmente quiser usar um modelo de página personalizado, adicione isso antes da consulta:

query_posts( array( 'post_type' => 'videos', 'paged' => get_query_var('page') ) )

Mais informações: enlace

    
por Dominic 02.03.2012 / 01:33