Articles paginés - comment utiliser les nombres et les liens suivants / précédents?

16

Je souhaite que wp_link_pages (plusieurs publications) affiche les numéros de page, le mot "précédent" avant ces numéros et un "suivant" après ces numéros. Cela ressemblerait à ceci:

Précédent 1, 2, 3, 4 Suivant

J'essaie de faire cela sans plugin. Voici ce que j'ai essayé jusqu'à présent, mais cela ne fonctionne pas, il ne fait qu'afficher des chiffres.

<?php wp_link_pages(array(
    'before' => '<span style="clear:both; display:block">Pages', 
    'after'  => '</span>',
    'next_or_number'=>'number',
    'previouspagelink' => 'previous',
    'nextpagelink'=> 'Next'
)); ?>
    
posée AndrettiMilas 24.12.2011 - 20:04

6 réponses

12

La fonction que vous utilisez, wp_link_pages Codex a>, ne possède pas la fonctionnalité que vous recherchez par défaut.

Cependant, vous pouvez facilement l'étendre en utilisant une fonction de rappel, enregistrée en tant que filtre sur les arguments de cette fonction:

add_filter('wp_link_pages_args', 'wp_link_pages_args_prevnext_add');

Le filtre modifiera ensuite les paramètres utilisés dans cette fonction à la volée et injectera les liens manquants dans les arguments prev et next qui sont affichés à gauche et à droite. côté droit de la liste de liens numérotés ( next_or_number' => 'number' ):

/**
 * Add prev and next links to a numbered page link list
 */
function wp_link_pages_args_prevnext_add($args)
{
    global $page, $numpages, $more, $pagenow;

    if (!$args['next_or_number'] == 'next_and_number') 
        return $args; # exit early

    $args['next_or_number'] = 'number'; # keep numbering for the main part
    if (!$more)
        return $args; # exit early

    if($page-1) # there is a previous page
        $args['before'] .= _wp_link_page($page-1)
            . $args['link_before']. $args['previouspagelink'] . $args['link_after'] . '</a>'
        ;

    if ($page<$numpages) # there is a next page
        $args['after'] = _wp_link_page($page+1)
            . $args['link_before'] . ' ' . $args['nextpagelink'] . $args['link_after'] . '</a>'
            . $args['after']
        ;

    return $args;
}

Utilisation:

wp_link_pages(array(
    'before' => '<p>' . __('Pages:'),
    'after' => '</p>',
    'next_or_number' => 'next_and_number', # activate parameter overloading
    'nextpagelink' => __('Next'),
    'previouspagelink' => __('Previous'),
    'pagelink' => '%',
    'echo' => 1 )
);

Si votre thème toujours utilise les liens prev et next, vous pouvez alors modifier légèrement la fonction pour en faire le comportement par défaut à chaque fois que number (le comportement par défaut) est utilisé. écrivez moins dans vos thèmes.

Il s’agit d’une implémentation légèrement différente de celle proposée par proposée par Velvet Blues .

    
réponse donnée hakre 31.12.2011 - 18:54
6

La fonction wp_link_pages() affiche uniquement le texte ou le nombre soit , jamais les deux. Si vous examinez le code de la fonction, vous verrez qu’il n’ya pas d’option lui permettant de se comporter différemment en passant des paramètres.

Cela étant dit, il existe trois façons de faire cela sans plugin:

  1. Créez votre propre fonction dans le fichier functions.php de votre thème. Fonctionne, mais vous auriez alors une nouvelle fonction.
  2. Utilisez 2-3 instances de wp_link_pages() . bidouille très inefficace.
  3. Utilisez un filtre. Méthode préférée . Voir ci-dessous.

J'ai écrit un article sur la façon de procéder sur mon blog. Fondamentalement, j'utilise le filtre wp_link_pages_args et ajoute une fonction dans le fichier functions.php qui ajoute une nouvelle option, "next_and_number".

Piratage de WordPress: numéro d'affichage & Liens suivant / précédent avec wp_link_pages ()

    
réponse donnée Velvet Blues 30.12.2011 - 15:14
3

Essayez ceci, vous pouvez davantage le personnaliser. Mais il devrait faire ce que vous vouliez: -)

function tp_link_pages() {
    global $page, $numpages;

    echo paginate_links( array(
        'format' => get_permalink() . '%#%/',
        'current' => $page,
        'total' => $numpages
    ) );
}
    
réponse donnée Tareq 30.12.2011 - 18:01
1

Je ne comprends pas quel est le problème ... Avez-vous une erreur?

Cela devrait fonctionner:

<?php $args = array(
    'before'           => '<span style="clear:both; display:block">Pages',
    'after'            => '</span>',
    'nextpagelink'     => __('Next'),
    'previouspagelink' => __('Previous')
); 

wp_link_pages($args);
?> 

Vous n'avez pas besoin d'ajouter next_or_number car le numéro est déjà la valeur par défaut.

    
réponse donnée Mat_ 25.12.2011 - 22:06
1

Ce code est sur la boucle de messages? Le codage me convient. Voici l'exemple du Codex sur la façon d'utiliser:

<?php

wp_link_pages(array(
    'before' => '<p>' . __('Pages:'),
    'after' => '</p>',
    'next_or_number' => 'number',
    'nextpagelink' => __('Next page'),
    'previouspagelink' => __('Previous page'),
    'pagelink' => '%',
    'echo' => 1 )
);

?>
    
réponse donnée Caio Alves 28.12.2011 - 16:35
0

La réponse est différente, mais cela a été inspiré @ 荒野 无 灯 qui a décidé de supprimer sa réponse. À mon humble avis, c’est la solution la plus simple et la plus flexible:

La solution dépend de paginate_links() . La seule chose à savoir est que base sera l'URL dès le début, ajoutée par %_% , qui sera ensuite remplacée par format . Donc, tant que nous utilisons get_permalink().'%_%'; , nous savons que nous resterons dans tous les cas sur le poste en cours. Dans format , le # est remplacé par le numéro de page:

function wpse37256_paginate_paged()
{
    if ( ! $paginate_links = paginate_links( array(
         'type'      => 'array'

        ,'total'     => $GLOBALS['numpages']
        ,'mid_size'  => 1
        ,'end_size'  => 1

        #,'prev_next' => false
        ,'prev_text' => '&laquo; '.__( 'Prev', 'your_textdomain' )
        ,'next_text' => __( 'Next', 'your_textdomain' ).' &raquo;'

        ,'base'      => get_permalink().'%_%'
        ,'format'    => user_trailingslashit( '%#%' )

        ,'current'   => $GLOBALS['page']
    ) ) )
        return;

    echo "<div class='pagination-container'>{$paginate_links}</div>";
}
    
réponse donnée kaiser 12.10.2012 - 13:44

Lire d'autres questions sur les étiquettes