カテゴリ・タクソノミー・タグのタームページ(カテゴリページ・タームアーカイブページ)で訪問数viewsをカウント【Worpdree】
D−MAKING 渡辺です。
wordpressでweb制作している方向けの記事です。
本日お休みの日の旅を記録します。

カテゴリーページなどにもポストカウントをつけて訪問数を図りたい
幾度と、こんな思いが湧いたのですが、クライアントの制作中に、逃避行、いや、探求心はそこそこにしないと、いつまで経っても完成しないので、基本、抑えています。
本日、探検の旅に出て、頑張ってコードをカスタムして実現できましたので、ご紹介
カスタムフィールド views はACFで追加しました。
カテゴリ・タグ・タクソノミーページのタームのカスタムフィールドにタームページに訪問したらカウントさせる
fanction.phpに
//タームアーカイブページで訪問数
function set_term_views($term_id) {
$taxonomy_slug = get_query_var('taxonomy'); // タクソノミースラッグを取得
if(is_category()){
$taxonomy_slug = 'category'; }//カテゴリはcategory
if(is_tag()){
$taxonomy_slug = 'post_tag'; }//タグはtag
$count = get_field( 'views',$taxonomy_slug . '_' . $term_id );
if($count==''){
$count = 0;
delete_term_meta($term_id, 'views');
add_term_meta($term_id, 'views', '1');//タームのカスタムフォールドに追加
}else{
$count++;
//update_post_meta($postID, $count_key, $count);
update_term_meta( $term_id, 'views', $count );
}
}
カウントしたいテンプレートに
<?php set_term_views( get_queried_object_id()); ?>
以上で、それっぽい動作をしました。
参考サイト
https://plusers.net/wordpress_application_access
管理画面のカテゴリーページ等の一覧で訪問数viewsを表示させたい
上記コードでは、カウントはできたのですが、
いざ訪問数を確認したいときに、わざわざ、カテゴリのタームを選んで編集を押して一つづつ確認しなければなりません。
これではな、、と思い、再び探しに出掛けました。
かなり、いい線行ってる記事があるのですが、どうも違う。
参考サイト
https://www.nxworld.net/wordpress/wp-add-posts-columns-custom-fields.html
https://www.nxworld.net/wordpress/wp-add-taxonomy-columns-term-id.html
ここはあきらめて、実験するしかない、と関数をさがしたり、フィルターを勉強したりしながら完成しました。
どこの記事でも、カスタムタクソノミーは手動で、タクソノミー名を入れなくてはならないような書き方だったので、
もうやめようかとおもったのですが、フォーチで回して、いけるんじゃないか?と思って、
全てのタクソノミーを取得する関数ってあるの?って思ったらあったので実行できました。
(追記、できたと思ったら、管理画面ではタクソノミーはできてなかったので正解は最後追記)
get_taxonomies は登録済みのカスタム分類を返します。
<?php $taxonomies = get_taxonomies(); ?>
また、途中で管理画面のターム情報を取りたくて、どうやればいいかわからなくなたけど、タームIDからタームの情報を全て取得する関数を再発見?そういえばあったなって感じで利用しました。
メタデータを取得します。
get_term_meta($term_id)
上記だと、全ての情報を取得してしまっていて、連想配列になっていて、どうやっても出力の仕方がわからず、さらに調べると、idのあとにほしいフィールドを指定すれば、それだけ取得できました。
ただ、配列で入っていたので、さらに探索すると、最後に tureをつければ、中身だけ取り出せました。
get_term_meta($term_id,'views',true ); // メタデータを取得
fanction.phpに
//ターム一覧ページでviews
function add_taxonomy_columns( $columns ) {
$columns['views'] = 'views';
return $columns;
}
function custom_taxonomy_column( $content, $column_name, $term_id ) {
if ( $column_name == 'views' ) {
$term_views = get_term_meta($term_id,'views',true ); // メタデータを取得
echo $term_views;
}
}
$taxonomies = get_taxonomies();
foreach ( $taxonomies as $tx_name ) {
add_filter( 'manage_edit-'.$tx_name.'_columns', 'add_taxonomy_columns' );
add_action( 'manage_'.$tx_name.'_custom_column', 'custom_taxonomy_column', 10, 3 );
}
で、できた、、
感動です。
大人のプラモデルみたいな感動です。
と思ったのですが、カテゴリー・ダグだけできていて、
タクソノミーはできていなかった。。。
管理画面でget_taxonomiesをしてもうまく情報が取れないのです。
もう諦めかけたけど、
URLでカテゴリの編集画面は
edit-tags.php?taxonomy=category
となっているところに着目し、
URLから強引にタクソノミー名を取る方法でやってみたところ
ギリギリできました。
これは力技っぽいので、クライアントさんにはつかえないかな、。
urlの変更とかあったら使えないし。
//ターム一覧ページでviews
function add_taxonomy_columns( $columns ) {
$columns['views'] = 'views';
return $columns;
}
function custom_taxonomy_column( $content, $column_name, $term_id ) {
if ( $column_name == 'views' ) {
$term_views = get_term_meta($term_id,'views',true ); // メタデータを取得
echo $term_views;
}
}
$this_url = $_SERVER['REQUEST_URI'];
$this_url = urldecode ($this_url);//デコード
$this_url = explode("/" , $this_url); // スラッシュで 分割 して
$this_url = explode("taxonomy=" , $this_url[2]); // 分割
$this_url = explode("&" , $this_url[1]); // 分割
// echo "<pre>";
// print_r($this_url[0]);
// echo "</pre>";
if($this_url[0]){
$taxonomy = $this_url[0];
add_filter( 'manage_edit-'.$taxonomy.'_columns', 'add_taxonomy_columns' );
//add_filter( 'manage_edit-'.$tx_name.'_sortable_columns', 'add_taxonomy_sortable_columns' );
add_action( 'manage_'.$taxonomy.'_custom_column', 'custom_taxonomy_column', 10, 3 );
}
これで、一応全てのカテゴリー・ターム・カスタムタクソノミーのページにviewsで簡易訪問数が計測できます。
俄然更新のやる気でます。が、疲れた、、。
1980.11.26生まれ 2児の父 愛娘家 趣味:料理 DIY
2000年、名古屋栄の東京デザイナー学院名古屋校(現名古屋デザイナー・アカデミー)を卒業。
グラフィックデザイン歴25年以上、WEB制作歴20年以上。
30歳で起業。起業前は音楽活動(HIPHOP)、看板屋(看板・店内サイン制作)、デザイン会社(WEB等制作)などを経験