web-dev-qa-db-fra.com

Numéro d'impression du message (en sens inverse)

J'essaie de saisir le numéro du message à côté, mais dans l'ordre inverse, ce qui signifie

ne pas

1 2 3 4

mais

4 3 2 1.

J'ai réussi à le faire dans le "bon" ordre avec ceci:

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

<?php echo $wp_query->current_post + 1; ?>

mais je ne peux pas comprendre comment faire le contraire. Morethough, quand j'ai mes messages dans plusieurs pages, ça casse aka

PAGE 1: 1234 PAGE 2: 1234 (devrait être 5678)

J'ai essayé ceci:

<?php echo $wp_query->found_posts - $wp_query->current_post ?>

qui entre 8765 puis la page suivante 8765 au lieu de 4321 ...

2
Dikeneko

Pour imprimer un compteur décroissant pour la requête principale à la maison, sans les posts collants, vous pouvez essayer:

// current page number - paged is 0 on the home page, we use 1 instead
$_current_page  = is_paged() ?  get_query_var( 'paged', 1 ) : 1; 

// posts per page
$_ppp           = get_query_var( 'posts_per_page', get_option( 'posts_per_page' ) );

// current post index on the current page
$_current_post  = $wp_query->current_post;

// total number of found posts
$_total_posts   = $wp_query->found_posts;

// Decreasing counter    
echo $counter = $_total_posts - ( $_current_page - 1 ) * $_ppp - $_current_post;

Exemple:

Pour un total de 10 messages, avec 4 messages par page, le compteur décroissant doit être:

Page 1: 
    10 - ( 1 - 1 ) * 4 - 0 = 10
    10 - ( 1 - 1 ) * 4 - 1 = 9
    10 - ( 1 - 1 ) * 4 - 2 = 8
    10 - ( 1 - 1 ) * 4 - 3 = 7

Page 2: 
    10 - ( 2 - 1 ) * 4 - 0 = 6
    10 - ( 2 - 1 ) * 4 - 1 = 5
    10 - ( 2 - 1 ) * 4 - 2 = 4
    10 - ( 2 - 1 ) * 4 - 3 = 3

Page 3: 
    10 - ( 3 - 1 ) * 4 - 0 = 2
    10 - ( 3 - 1 ) * 4 - 1 = 1

ou:

Page 1: 10,9,8,7
Page 2: 6,5,4,3
Page 3: 2,1

Mise à jour:

Pour supporter les posts collants, nous pouvons ajuster le compteur ci-dessus avec:

// Decreasing counter    
echo $counter = $_total_posts
    + $sticky_offset 
    - ( $_current_page - 1 ) * $_ppp 
    - $_current_post;

où nous définissons:

$sticky_offset =  is_home() && ! is_paged() && $_total_posts > $_ppp 
    ? $wp_query->post_count - $_ppp 
    : 0;

Notez qu'il peut y avoir trois cas de messages collants:

  1. tous les messages collants proviennent de la première page (d'accueil). (Le nombre de messages affichés sur la page d'accueil est le même que sans les messages collants).
  2. négatif de 1)
  3. mixte 1) et 2)

Nos ajustements devraient gérer les trois cas.

1
birgire

Question étrange. Vous pouvez créer une requête secondaire ou exécuter un hook dans pre_get_posts mais l’idée générale est que vous le feriez par ID dans l'ordre décroissant:

$query = new WP_Query( array(
    'orderby' => array( 'ID' => 'DESC' ),
) );

Vous pourriez aussi probablement exécuter array_reverse () sur le tableau posts de la requête d'origine, mais je n'ai pas tendance à gâcher l'objet de requête WP d'origine.

0
Howdy_McGee

Voici...

<?php
$per_page = 4;
$post_query = new WP_Query('post_type=post&posts_per_page='.$per_page);
$total_found_posts = $post_query->found_posts;

if($total_found_posts >= $per_page){
    $count_from  = $per_page;
} elseif ($total_found_posts < $per_page){
    $count_from  = $total_found_posts;
}

if (have_posts()) : while (have_posts()) : the_post();

the_title();

echo 'Serial #'. $count_from--; 

endwhile;
endif;
wp_reset_postdata();
?>
0
Abdul Awal