Post X of Y in single.php / sidebar.php

The question:

Is there a way of putting “Post X of Y” into my sidebar? I think I can only show it when it is a single blog post (something like checking if the content is_single) but I want to be able to see which post I am viewing. Googling “wordpress post x of y” for the last 20 minutes has given me a lot about category x in page y or something similar, so I thought to ask here.

The Solutions:

Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.

Method 1

class MY_Post_Numbers {

    private $count = 0;
    private $posts = array();

    public function display_count() {
        $this->init(); // prevent unnecessary queries
        $id = get_the_ID();
        echo sprintf( '<div class="post-counter">Post number<span class="num">%s</span><span class="slash">/</span><span class="total">%s</span></div>', $this->posts[$id], $this->count );

    private function init() {
        if ( $this->count )
        global $wpdb;       
        $posts = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' ORDER BY post_date " ); // can add or change order if you want 
        $this->count = count($posts);

        foreach ( $posts as $key => $value ) {
            $this->posts[$value] = $key + 1;

$GLOBALS['my_post_numbers'] = new MY_Post_Numbers;

function my_post_number() {

to use in template file :

<?php my_post_number(); ?>

All methods was sourced from or, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Comment