web-dev-qa-db-fra.com

Est-il possible de sauter certaines pages spécifiées en utilisant les liens <prev et next>?

merci d'avoir pris une minute pour lire ma question. J'ai fait quelques recherches sur Google et je n'arrive pas à trouver la réponse à cette question. Pardonnez-moi si c'est déjà quelque part ici sur l'échange de pile.

J'utilise ce plugin pour autoriser les liens "<prev" et "next>" dans mon ensemble de pages. Je peux changer l'ordre des pages en utilisant le menu admin de wordpress, c'est donc presque parfait. Cependant, j'ai quelques pages que je voudrais sauter dans les boucles "précédente" et "suivante".

Par exemple, j'utilise une page d'accueil statique. À un moment donné, le lien "suivant" renvoie à la page d'accueil. Je voudrais exclure la page d'accueil et quelques autres de cette boucle. Est-ce possible? Quelle est la meilleure façon de faire cela?

Merci!

Tim

P. S. Le plugin fonctionne à peu près de la même manière que la fonctionnalité intégrée Next/Prev post. Je suppose que s’il existe un moyen d’exclure des publications de cette boucle, cela fonctionnera de la même manière pour les pages avec le plugin. Merci

1
timshutes

Je n'ai pas vérifié le plugin que vous avez mentionné ... mais j'utilise cette solution pour faire une navigation "auteur".

J'ai ajusté les fonctions et cela devrait probablement fonctionner sans le plugin (non testé). Vous devez ajuster l'ID et les conditions si vous souhaitez plus d'exclusions.

[edit: fonctions corrigées, les conditions manquaient à la condition menu_order]

remarques:

1) l’ID 99999 correspond à la page statique définie comme page de garde

2) toutes les pages doivent avoir un ordre de menu défini, je crois que s'il y a des pages avec 0 (zéro) comme ordre de menu cela ne fonctionnera pas

//PAGE.PHP
get_next_page_nav();
get_prev_page_nav();

//FUNCTIONS.PHP
function get_next_page_nav($link="%link", $title="%title") {
    global $wpdb, $post;
    $prev = $wpdb->get_row($wpdb->prepare("SELECT ID, post_title FROM $wpdb->posts WHERE post_type='page' AND post_status='publish' AND ID!='99999' AND menu_order < '".$post->menu_order."' ORDER BY menu_order DESC LIMIT 1;"));
    if($prev) {
        $title = preg_replace('/%title/',$prev->post_title, $title);
        echo preg_replace('/%link/', '<a href="'.get_permalink($prev->ID).'" rel="prev" class="next-page">'.$title.'</a> ', $link);
    }
}  

function get_prev_page_nav($link="%link", $title="%title") {
    global $wpdb, $post;
    $next = $wpdb->get_row($wpdb->prepare("SELECT ID, post_title FROM $wpdb->posts WHERE post_type='page' AND post_status='publish' AND ID!='99999'  AND menu_order > '".$post->menu_order."' ORDER BY menu_order ASC LIMIT 1;"));
    if($next) {
        $title = preg_replace('/%title/',$next->post_title, $title);
        echo preg_replace('/%link/', ' <a href="'.get_permalink($next->ID).'" rel="next" class="previous-page">'.$title.'</a>', $link);
    } 
}
1
brasofilo