WordPressの$wpdbで現在の記事が何記事目か条件指定で取得して連番を表示する

WordPressで連載記事などを書きたいとき、毎回手動で連番をつけるのは嫌なので自動で表示させるようにしてみます。また、途中で記事を並び替えた場合も自動で番号が正しく表示させるようにしました。

全記事中何記事目かを取得


function getPostThNumber() {
  global $wpdb, $post;
  
  $number = $wpdb->get_var("
    SELECT COUNT(*)
    FROM $wpdb->posts
    WHERE post_status = 'publish'
    AND post_type = 'post'
    AND post_date <= '$post->post_date'
  ");
  
  return $number;
}

$wpdb を使ってSQL文で取得するようにします。


<h1>第<?php echo getPostThNumber() ?>回:<?php the_title() ?></h1>

例えば、こんな感じで記述すれば記事タイトル前に第3回:のように自動で表記されるようになります。

カテゴリごとに何記事目かを取得


function getPostThNumber() {
  global $wpdb, $post;
  $categoryID = get_the_category($post->ID)[0]->term_id;
  
  $number = $wpdb->get_var("
    SELECT COUNT(*)
    FROM $wpdb->posts INNER JOIN $wpdb->term_relationships ON $wpdb->posts.ID = $wpdb->term_relationships.object_id
    WHERE post_status = 'publish'
    AND post_type = 'post'
    AND term_taxonomy_id = $categoryID
    AND post_date <= '$post->post_date'
  ");
  
  return $number;
}

検索条件にカテゴリを指定するために2つのテーブルを内部結合させています。