WordPressの『サイト全体』の総ページ数を取得する方法が意外と見つからないので考えました。
ページネーションで使う総ページ数とはちがいます。あれは同じ種類の投稿のページ数でサイト全体からするとごく一部に過ぎません。
難しいことはしません。ただの足し算です。
アクセス解析ツールは総ページ数を知らない
サイトのアクセス解析をするとき、全体のページ総数は、
アクセスがあったページの総数
です。アクセス解析を自作する人は少ないでしょう。Google Analyticsなどの外部ツールを使うはずです。
これらのツールは、サイトのすべてのページを知っているわけではなく、
1回でもアクセスがあったら保存する
という仕組みなので、まったく0アクセスのページのことは知りません。
ツールでは、ページのアクセスが0になることがありますが、『対象期間が0』であって、そのページは解析をはじめてから最低1アクセスあるページです。
サイトの総ページ数の計算
そうなると、『サイトのページ総数に対して〇〇』という解析がむずかしくなります。ボクもこれがしたくて探しました。
サイトの1ページあたりのPV
アクセスのあるページの割合
(逆にアクセスのない割合)
etc...
WordPressでは、カテゴリやタグの一覧ページなどの、ページネーションで使う総ページ数を取得する方法はすぐ見つかりますが、サイトの総ページ数についてはあまり見かけません。
ということで自分で作ることにしました。サイトの総ページ数は次のように計算します。
投稿ページ数
+
固定ページ数
+
アーカイブページ数
+
ホーム
サンプルコード
いきなりサンプルコードからです。
function my_get_all_page_count() {
$post = wp_count_posts()->publish;
$page = wp_count_posts('page')->publish;
$lp = wp_count_posts('lp')->publish;
// +1: ホームとアーカイブページ
return $post + $page + $lp + 1;
}
公開済みのページだけをカウントするために、'->publish'を使います。
ホームとアーカイブページは、WordPress公式のアクセス数カウント(Jetpackプラグインを使う)で、'Home page / Archives'にまとめまれて数えるので+1にしました。
アーカイブページは、カテゴリやタグの一覧ページなど、archive.phpがらみのページ。
4行目の'lp'はカスタム投稿タイプです。
#args = [
'labels' => [
'name' => 'LP',
'singular_name' => 'LP',
'add_new_item' => '新しいLPを追加',
'add_new' => '新規追加',
'new_item' => '新しいLP',
'view_item' => 'LPを表示',
'not_found' => 'LPはありません',
'not_found_in_trash' => 'ゴミ箱にLPはありません。',
'search_items' => 'LPを検索',
],
'public' => true,
'show_ui' => true,
'query_var' => true,
'hierarchical' => false,
'menu_position' => 5,
'has_archive' => false,
'show_in_rest' => true,
'supports' => [
'title',
'editor',
'thumbnail',
'page-attributes'
]
];
register_post_type( 'lp', $args );
カスタム投稿タイプを作るregister_post_type()の第1パラメータの値か、URLでも確認できます。
https://sample.com/lp/posts-xxxxxxx/
カスタム投稿タイプの数だけ足していけばいいでしょう。
ホームとアーカイブページを細かく分けるには?
Google Analyticsなど外部ツールを使うとき、ホームとアーカイブページのカウントは別々です。細かく分けたいこともあるでしょう。
そこで、ホームとアーカイブページのページ数を出すには、カテゴリ・タグの数を出します。アーカイブページ数は、カテゴリ・タグの数と同じなので。
カテゴリ数
+
タグ数
+
カスタム・タクソノミー数
function my_get_all_taxonomy_count() {
$category = wp_count_terms('category');
$tag = wp_count_terms('post_tag');
$custom = wp_count_terms('category_sample');
return $category + $tag + $custom;
}
'category' | デフォルトのカテゴリ数 |
'post_tag' | デフォルトのタグ数 |
'category_sample'のように、自分で作ったカテゴリやタグなどのカスタム・タクソノミーも足しましょう。
wp_count_terms()で指定するものは、カスタム・タクソノミーを作るregister_taxonomy()の第1パラメータの値かURLで確認できます。
$args = [
"label" => "サンプルカテゴリー",
"labels" => [
"name" => "サンプルカテゴリー",
"singular_name" => "サンプルカテゴリー",
],
"public" => true,
"publicly_queryable" => true,
"hierarchical" => true,
"show_ui" => true,
"show_in_menu" => true,
"show_in_nav_menus" => true,
"query_var" => true,
"rewrite" => [ 'slug' => 'category_sample', 'with_front' => true, ],
"show_admin_column" => true,
"show_in_rest" => true,
"rest_base" => "category_sample",
"rest_controller_class" => "WP_REST_Terms_Controller",
"show_in_quick_edit" => false,
];
register_taxonomy( "category_sample", [ "post" ], $args );
https://sample.com/category_sample/taxonomy-xxxxxxx/
作成したカスタム・タクソノミーの数だけwp_count_terms()で取得すればいいです。
最終的なサンプルコードです。
function my_get_all_taxonomy_count() {
$category = wp_count_terms('category');
$tag = wp_count_terms('post_tag');
$custom = wp_count_terms('category_sample');
return $category + $tag + $custom;
}
function my_get_all_page_count() {
$post = wp_count_posts()->publish;
$page = wp_count_posts('page')->publish;
$lp = wp_count_posts('lp')->publish;
$taxonomy = my_get_all_taxonomy_count();
// +1: ホーム
return $post + $page + $lp + $taxonomy + 1;
}
サイトのページ総数が取れました。
Not Found(404)ページは外しています。あまり意味ないので。
ユーザーのページも足す
ユーザーのページもあるならそれも足しましょう。説明は省略してサンプルコードだけご紹介します。
function my_get_all_taxonomy_count() {
$category = wp_count_terms('category');
$tag = wp_count_terms('post_tag');
$custom = wp_count_terms('category_sample');
return $category + $tag + $custom;
}
function my_get_user_count() {
$args = [
'blog_id' => $GLOBALS['blog_id'],
'role' => '',
'meta_key' => '',
'meta_value' => '',
'meta_compare' => '',
'meta_query' => [],
'date_query' => [],
'include' => [],
'exclude' => [],
'orderby' => 'login',
'order' => 'ASC',
'offset' => '',
'search' => '',
'number' => '',
'count_total' => false,
'fields' => 'all',
'who' => ''
];
return array_sum( get_users( $args ) );
}
function my_get_all_page_count() {
$post = wp_count_posts()->publish;
$page = wp_count_posts('page')->publish;
$lp = wp_count_posts('lp')->publish;
$taxonomy = my_get_all_taxonomy_count();
$user = my_get_user_count();
// +1: ホーム
return $post + $page + $lp + $taxonomy + $user + 1;
}