web-dev-qa-db-fra.com

Pagination aller à la première page si je suis sur le dernier post

J'ai un type de message personnalisé et utilisé get_next_post () et get_previous_post () pour créer une pagination simple. Cependant, j'ai besoin de créer une boucle de pagination (si c'est le terme correct). Si je suis sur le premier post, je dois revenir au dernier post et si je suis sur le dernier post, je dois aller au premier post. Y at-il un moyen simple de faire cela que je n’ai pas vu mais Google, ce site et le codex n’a pas été très utile: /

Le code actuel que j'ai est. J'ai essayé d'utiliser wp_list_pages et d'autres fonctions, mais avec un peu de chance.

$next_post = get_next_post();
$prev_post = get_previous_post();
$nav = array(
    "next_post" => array(
        "url"       => get_permalink($next_post->ID),
        "id"        => $next_post->ID,
        "titill"    => get_field("vinstri_titill", $next_post->ID)." - ".get_field("vinstri_undirtitill", $next_post->ID)
    ),
    "prev_post" => array(
        "url"       => get_permalink($prev_post->ID),
        "id"        => $prev_post->ID,
        "titill"    => get_field("vinstri_titill", $prev_post->ID)." - ".get_field("vinstri_undirtitill", $prev_post->ID)
    ),
);
1
dansige

Voici une idée pour le cercle de post précédent :

$next_post = get_next_post();
$prev_post = get_previous_post_circle();

où nous avons défini cette fonction:

function get_previous_post_circle($in_same_cat = false, $excluded_categories = ''){
    $prev_post = get_previous_post($in_same_cat,$excluded_categories);
    if($prev_post){
        return $prev_post;
    }else{
        add_filter('get_previous_post_where','custom_get_previous_post_where');
        $prev_post = get_previous_post($in_same_cat,$excluded_categories);
        remove_filter('get_previous_post_where','custom_get_previous_post_where');
        if($prev_post){
            return $prev_post;
        }else{
            return '';
        }
    }
}

et la fonction de filtrage pour supprimer la comparaison de date spécifique:

function custom_get_previous_post_where($where){
    $where=" WHERE ".implode(" AND ",array_slice(explode("AND",$where),1));
    return $where;
}

Le but est d'émuler la fonction get_previous_post() avec les mêmes paramètres d'entrée, mais vous pouvez bien sûr jouer avec get_post() dans votre code à la place pour créer la boucle fermée.

1
birgire

Ma solution si next n'est pas vide me donne la boucle, mais seulement la première avec permalink:

            <?php
            $next_post = get_previous_post();
            if (!empty( $next_post )): ?>
              <a href="<?php echo esc_url( get_permalink( $next_post->ID ) ); ?>"><?php echo esc_attr( $next_post->post_title ); ?></a>
            <?php else: ?>
                        <?php $args = array(
                        'post_type'=> 'post',
                        'orderby'    => 'ID',
                        'post_status' => 'publish',
                        'order'    => 'ASC',
                        'posts_per_page' => 1 // this will retrive all the post that is published
                        );
                        $result = new WP_Query( $args );
                        if ( $result-> have_posts() ) : ?>
                        <?php while ( $result->have_posts() ) : $result->the_post(); ?>
                        <?php the_permalink(); ?>
                        <?php endwhile; ?>
                <?php endif; wp_reset_postdata(); endif; ?>
0
Francesco Cortese