Paginação adicionando pontos de números de páginas ao usar 'mid_size' = 0

4

Olá a todos, estou tentando converter minha paginação atual:

  • de: Prev 1 2 3 Next
  • para: Page 1 of 2 -->

Meu código atual se parece com isto:

if( ! function_exists( 'my_pagination' ) ) {
    function my_pagination() {
        global $wp_query;    
        $big = 999999999; // This needs to be an unlikely integer
        $paginate_links = paginate_links( array(
            'base' => str_replace( $big, '%#%', get_pagenum_link($big) ),
            'current' => max( 1, get_query_var('paged') ),
            'total' => $wp_query->max_num_pages,
            'mid_size' => 0,
            'prev_next' => True,            
            'prev_text' => __('<span class="fa fa-long-arrow-left" aria-hidden="true"></span>'),
            'next_text' => __('<span class="fa fa-long-arrow-right" aria-hidden="true"></span>'),
            'type' => 'list'
        ) );
        if ( $paginate_links ) {
            echo '<div class="pagination">';
            echo $paginate_links;
            echo '</div>';
        }
    }
}

Eu não tive muita experiência em lidar com paginação no WordPress até agora, o que é. Eu achei que seria mais fácil para mim e simplesmente mudei o tamanho para 0, então use CSS antes e depois para adicionar o page of , assim:

.pagination li:first-child:before {
    content: "Page "
}

.pagination li:first-child:after {
    content: " of"
}

Mas então percebo que o WordPress está inserindo:

<li><span class="page-numbers dots">…</span></li>

Por causa do 'mid_size' => 0 , e obviamente eu poderia usar apenas li:nth(2) { display: none; } no CSS. Mas outra questão é que o último número da página é a href , o que é algo que eu também não quero, portanto, usar todos esses métodos de trabalho parece ser uma tarefa malfeita e, em vez disso, fazer no códice em vez do CSS. Eu tentei várias soluções sem sucesso.

Como desabilito a adição de:

  • <span class="page-numbers dots">…</span> ?
  • <a href> no último número da página?
  • Ou como você recomenda que eu proceda alterando o array atual?
por Simon Hayter 23.04.2016 / 13:53

1 resposta

3

Veja uma solução alternativa:

Primeiro, altere o tipo de saída paginate_links() para:

'type' => 'array',

Em seguida, podemos coletar as partes anterior , atual e próximo da saída paginate_links() .

Veja um exemplo simples em que segmentamos as classes relevantes:

$next       = '';
$current    = '';
$prev       = '';
foreach( (array) $paginate_links as $link )
{           
    if( false !== strpos( $link, 'prev ' ) )
        $prev = $link;
    elseif( false !== strpos( $link, ' current' ) )
        $current = $link;       
    elseif( false !== strpos( $link, 'next ' ) )
        $next = $link;
}

Finalmente, podemos construir a saída conforme necessário:

! empty( $current ) && printf(
    '<div class="pagination">%s %s %s %s %d %s</div>',
    $prev,
    esc_html__( 'Page', 'my-domain' ),
    $current,
    esc_html__( 'of', 'my-domain' ),
    $wp_query->max_num_pages,
    $next
);
    
por birgire 23.04.2016 / 23:39