カテゴリ・タクソノミー・タグのタームページ(カテゴリページ・タームアーカイブページ)で訪問数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等制作)などを経験