web-dev-qa-db-fra.com

Autoriser les utilisateurs à choisir la pagination ou Suivant/Précédent (Combiner)

Je construis un panneau d'options de thèmes et souhaite que les utilisateurs puissent choisir entre les liens Suivant/Précédent ou la pagination dans mes archives et ma page d'accueil.

J'ai besoin d'aide pour combiner les deux fonctions ci-dessous (pagination et suivante) pour créer une fonction qui choisit en fonction de la sélection de l'utilisateur.

Je pense que la fonction que j’ajoute au panneau d’options ressemblera à ceci:

array( "name" => "Paginate or next/previous links?",
    "desc" => "Choose your option",
    "id" => $shortname."_next_prev_or_paginate",
    "type" => "select",
    "options" => array("Next/Previous Links", "Pagination"),
    "std" => ""),

Voici comment j'appelle la pagination:

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

Voici comment j'appelle les liens next/prev:

<?php previous_posts_link ('Newer') ?>
<?php next_posts_link('Older') ?>
1
AndrettiMilas

Une simple déclaration if devrait suffire, donc quelque chose comme ceci:

function my_theme_navigation() {
    if( get_option( $shortname .'_next_prev_or_paginate' ) == 'Next/Previous Links' ) :
        // the block for next-prev navigation
    else :
        // the code for pagination
    endif;
}

Je n'ai aucun moyen de savoir ce que le tableau de votre premier bloc de code fait exactement, mais je pense que j'ai bien compris. La seule chose à faire est de remplacer $shortname par tout ce que cette variable contient. Si c'est un global, ajoutez simplement global $shortname; en haut de la fonction. Je suppose également que les valeurs des options de sélection sont les mêmes que celles des titres.

3
shabushabu

Bon travail, mais je le ferais un peu différemment:

function get_pagination_option() {
$option = get_option(your_option_name_here);
if ($option)? return $option : return 'no_selection';
}

function display_pagination() {
$option = get_pagination_option();

  switch($option) {
    case 'no_selection':
      //handle no pagination selected condition
    break;

    case 'previous_next':
      //handle previous/next pagination selection
    break;

    case 'full_pagination':
      //handle full pagination selection
    break;

  }

}

Pourquoi?

  1. switch/case est légèrement plus rapide. Pas très rapide, mais il est agréable de pouvoir économiser chaque microseconde dans la mesure du possible.

  2. gère une situation où il n'y a pas de sélection, pour une raison quelconque.

  3. donnez à vos fonctions une chose à faire, en règle générale. plus il en fait, moins il est flexible et plus il est difficile pour quiconque de le déboguer.

J'admettrais la solution fournie avant que cela ne fasse le travail, mais c'est plutôt dans la lignée des "meilleures pratiques";)

0
akamaozu

Je suis d’accord avec @shabushabu pour dire qu’une déclaration if ferait probablement l'affaire très bien dès que les deux fonctions sont prêtes. J'envisagerais également d'ajouter wp_pagenavi en tant qu'option, qui combine essentiellement vos deux options. wp_pagenavi

0
WouterB