どうも、イソップです。
WordPressで、記事を出力する際に連番をつけるにはどうするか。
やりたいことは次の2つの方法です。
- 記事一覧を出力するループで、それぞれ連番を付けたい
- 記事の詳細ページで、頭から数えて何投稿目かを出力したい
どちらも functions.php
にコードを追記する方法を紹介します。
記事のループ内で連番を出力する
ループ内で連番を出力するには、まず functions.php
に以下のコードを追記します。
<?php
// ループ回数を取得
function get_loop_number(){
global $wp_query;
return $wp_query->current_post + 1;
}
出力する際は、ループの中で次のように書きます。
<php? echo get_loop_number(); ?> // => 1〜
記事の詳細ページで、投稿のいくつ目かを出力する
記事の詳細ページで投稿のいくつ目かを出力するには、
データベースから投稿タイプの指定をしてカウントを取得します。
functions.php
に次のコードを追記します。
<?php
// 現在の記事は何記事目かを取得
function get_post_number( $post_type = 'post', $op = '<=' ) {
global $wpdb, $post;
$post_type = is_array($post_type) ? implode("','", $post_type) : $post_type;
$number = $wpdb->get_var("
SELECT COUNT( * )
FROM $wpdb->posts
WHERE post_date {$op} '{$post->post_date}'
AND post_status = 'publish'
AND post_type = ('{$post_type}')
");
return $number;
}
出力する際は、single.php
の中で次のように書きます。
<?php echo get_post_number(); ?> // => 6
上記のコードでは投稿タイプが post
になりますが、
get_post_number()
に投稿タイプを指定すれば、カスタム投稿でのカウントを取得できます。
<?php echo get_post_number('products'); ?> // => 1 (カスタム投稿タイプ「products」から取得する)
以上です。
functions.php
にテンプレとして2つのコードを書いておくと、どのプロジェクトでも使いまわせるのでオススメです。