Simplicityの特徴 › フォーラム › 要望・機能追加など › うちはJetpackの機能でPV表示に切り替えました
-
投稿者投稿
-
-
2017年2月22日 2:50 PM #50471
Mori
ゲストいつもお世話になります。
MixHostが快適に機能しています。
Popular postsを停止しましたこれはPVを表示するのに便利だったのですが・・・代わりに、公式プラグインのJetpackの統計情報を利用しています。
こちらはWordPressサーバーにデータが蓄積されるのでデータベース負荷がありません。
それを使って、PVを表示するようにしてみましたコード
<?php if ( is_user_logged_in() ) : ?> d-<?php $jetpack_views = stats_get_csv('postviews', array('days' => 1, 'limit' => 1, 'post_id' => $post->ID )); echo $jetpack_views[0]['views']; ?> w-<?php $jetpack_views = stats_get_csv('postviews', array('days' => 7, 'limit' => 1, 'post_id' => $post->ID )); echo $jetpack_views[0]['views']; ?> t-<?php $jetpack_views = stats_get_csv('postviews', array('days' => -1, 'limit' => 1, 'post_id' => $post->ID )); echo $jetpack_views[0]['views']; ?> <a href="http://mori-room.com/wp-admin/admin.php?page=stats&view=post&post=<?php echo get_the_ID() ?>" target="_blank">■</a> <?php endif; ?>
順に1日、7日、トータルのPV表示になっており、■はその記事の個別統計ページにいけます。
Jetpackの導入は必要ですが、公式であることと、サーバー負担がないことを考えると、脱Popular postsを進めるほうがいいのではないかなと思ってやっています。
Jetpackの統計を使うことで、人気記事の一覧も作れるようですので、こちらの方向でSimplicityのバージョンアップもいいのかなと勝手に思っております。ので、うちでやっているカスタマイズでした。(コードは素人なので、無駄が多い気がしますが・・・)
参考↓
https://amiten.net/archives/998Attachments:
-
2017年2月22日 4:58 PM #50473
Mori
ゲストちなみに、人気記事の方は、functions.phpに書き込み、
function my_pop_list( $target_days, $n ) { $i = 0; $args = array( 'days'=>$target_days, 'limit'=>$n+2 ); $top_posts = stats_get_csv( 'postviews', $args ); echo "<ol>\n"; foreach ( $top_posts as $value ) { $my_id = $value['post_id']; //投稿ID取得 if ( $my_id != 0 && $my_id != get_the_ID() && get_post_type($my_id) == 'post' ) { //homeと現在のページは除外で、投稿のみ if( has_post_thumbnail($my_id) ) { //サムネイルの有無 $pop_img = get_the_post_thumbnail( $my_id, array(75, 75), array('alt'=>get_the_title($my_id)) ); } else { $pop_img = '<img src="noimage.png" width="75" height="75" />'; } echo '<li><a href="'.$value['post_permalink'].'">'.$pop_img.$value['post_title'].'</a>('.$value['views']."views)</li>\n"; $i++; if ( $i >= $n ) { break; } //指定数を超えたら終了 } } echo "</ol>\n"; }
表示したい箇所のテンプレートに、
<?php my_pop_list( 7, 5 ); ?>
を打ち込むことで、人気記事をJetpackの統計データから読み取って表示することが可能です。
参考↓
https://ateitexe.com/jetpack-popular-post/ -
2017年2月22日 5:34 PM #50474
Mori
ゲストいろいろと試してみていますが、この方法では、Jetpackからのデータ読み込みに時間がかかるので、キャッシュされないと、管理人のみ最初の表示が遅いのがネックですね。(一般の訪問者には表示されないので、おそらく快適な表示のはず)
-
2017年2月22日 6:15 PM #50475
Mori
ゲスト何度もすいません。
結局、速度が遅いので、「Jetpack Post Views」プラグインを導入して、API認証をして、以下のようなコードを書くとJetpackの日、週、月、合計のPVを何のストレスもなく表示できるようになりました。
<?php if ( is_user_logged_in() ) : ?> d-<?php echo get_post_meta( $post->ID, 'jetpack-post-views-Day', true ); ?> w-<?php echo get_post_meta( $post->ID, 'jetpack-post-views-Week', true ); ?> m-<?php echo get_post_meta( $post->ID, 'jetpack-post-views-Month', true ); ?> t-<?php echo get_post_meta( $post->ID, 'jetpack-post-views', true ); ?> <a href="https://tetrapot-labo.com/wp-admin/admin.php?page=stats&view=post&post=<?php echo get_the_ID() ?>" target="_blank">■</a> <?php endif; ?>
もはや自己満足な投稿で申し訳ないです。。。
脱Popular postsはなかなか大変ですね。。。stats_get_csvでの取得が時間がかかるようで、ループ処理の前に関数を取得しておいて、あとループ処理の中で表示だけにすると速くなるようですが、、、そこまではさっぱりですね。
Jetpackとこのプラグインで、人気記事と記事ごとのPV数の取得は問題なさそうにできそうです。ということで、要望というよりも、こうやってカスタマイズしてPVを表示しています、ということです
何かの参考になれば。 -
2017年2月22日 6:19 PM #50478
Mori
ゲスト※ 上記投稿はミスしたので、削除してもらうと助かります・・・。
もう一度投稿しておきます。何度もすいません。
結局、速度が遅いので、「Jetpack Post Views」プラグインを導入して、API認証をして、以下のようなコードを書くとJetpackの日、週、月、合計のPVを何のストレスもなく表示できるようになりました。
<?php if ( is_user_logged_in() ) : ?> d-<?php echo get_post_meta( $post->ID, 'jetpack-post-views-Day', true ); ?> w-<?php echo get_post_meta( $post->ID, 'jetpack-post-views-Week', true ); ?> m-<?php echo get_post_meta( $post->ID, 'jetpack-post-views-Month', true ); ?> t-<?php echo get_post_meta( $post->ID, 'jetpack-post-views', true ); ?> <a href="https://mori-room.com/wp-admin/admin.php?page=stats&view=post&post=<?php echo get_the_ID() ?>" target="_blank">■</a> <?php endif; ?>
もはや自己満足な投稿で申し訳ないです。。。
脱Popular postsはなかなか大変ですね。。。stats_get_csvでの取得が時間がかかるようで、ループ処理の前に関数を取得しておいて、あとループ処理の中で表示だけにすると速くなるようですが、、、そこまではさっぱりですね。
Jetpackとこのプラグインで、人気記事と記事ごとのPV数の取得は問題なさそうにできそうです。ということで、要望というよりも、こうやってカスタマイズしてPVを表示しています、ということです
何かの参考になれば。 -
2017年2月22日 7:32 PM #50480
わいひら
キーマスターJetpackの統計情報のそういった取得方法もあるんですね。
Popular Postsがインストールされていなかったら、Jetpackの統計情報を利用するというのはありかもしてませんね。
とりあえず、アクセス数表示のところは、ちょっと試してみようと思います。 -
2017年2月22日 8:51 PM #50485
わいひら
キーマスターちょっと実装してみたんですけど、最初の取得時間が長すぎて、機能について知らない人は(テーマもしくはサーバーの)不具合を疑われるレベルなので、機能としての実装はしないと思います。
ただ、せっかくコードを書いたので、後で記事を書くために、カスタマイズ方法のメモを残しておきます。
functions.phpに以下を追記。
//Jetpackがインストールされているかどうか function is_jetpack_sgc_enable(){ return function_exists('stats_get_csv'); }
admin-pv.phpテンプレートの中身を以下のコードと入れ替える。
<?php //管理者のみにPV表示 ?> <?php if ( is_admin_pv_visible() && is_user_logged_in() && (is_wpp_enable() || is_jetpack_sgc_enable()) && !(is_front_page() && is_page()) ): ?> <div class="admin-pv"> <?php //全体、月別、週別、日別のPV表示 $views_all = 0; $views_monthly = 0; $views_weekly = 0; $views_daily = 0; if (is_wpp_enable()) {//Wordpress Popular Posts利用時 $views_all = wpp_get_views ( get_the_ID(), 'all' ); $views_monthly = wpp_get_views ( get_the_ID(), 'monthly' ); $views_weekly = wpp_get_views ( get_the_ID(), 'weekly' ); $views_daily = wpp_get_views ( get_the_ID(), 'daily' ); } elseif (is_jetpack_sgc_enable()) {//Jetpack利用時 $jetpack_views = stats_get_csv('postviews', array('days' => -1, 'limit' => 1, 'post_id' => $post->ID )); if (isset($jetpack_views[0]['views'])) { $views_all = $jetpack_views[0]['views']; } $jetpack_views = stats_get_csv('postviews', array('days' => 30, 'limit' => 1, 'post_id' => $post->ID )); if (isset($jetpack_views[0]['views'])) { $views_monthly = $jetpack_views[0]['views']; } $jetpack_views = stats_get_csv('postviews', array('days' => 7, 'limit' => 1, 'post_id' => $post->ID )); if (isset($jetpack_views[0]['views'])) { $views_weekly = $jetpack_views[0]['views']; } $jetpack_views = stats_get_csv('postviews', array('days' => 1, 'limit' => 1, 'post_id' => $post->ID )); if (isset($jetpack_views[0]['views'])) { $views_daily = $jetpack_views[0]['views']; } } echo '<span class="all">全体:<span class="pv-count">', $views_all, '</span></span>'; echo '<span class="monthly">月:<span class="pv-count">', $views_monthly, '</span></span>'; echo '<span class="weekly">週:<span class="pv-count">', $views_weekly, '</span></span>'; echo '<span class="daily">日:<span class="pv-count">', $views_daily, '</span></span>'; if (is_jetpack_sgc_enable()) { echo '<span class="jp-page"><a href="'.admin_url().'admin.php?page=stats&view=post&post='.get_the_ID().'" target="_blank"><span class="fa fa-bar-chart"></span></a></span>'; } ?> </div> <?php endif ?>
-
2017年2月22日 9:23 PM #50487
Hidekichi
ゲストjetpackが使われているかどうかは、
if { is_user_logged_in()
&& class_exists( ‘jetpack’ )
&& Jetpack::is_module_active( ‘stats’ ) ) {
//ログイン、かつjetpack使ってる、かつ統計使ってる
}みたいな感じで行けるかも。試してないですが。
-
2017年2月22日 9:25 PM #50488
Hidekichi
ゲストうほう盛大に間違ってた(笑)
if ( is_user_logged_in() && class_exists( 'jetpack' ) && Jetpack::is_module_active( 'stats' ) ) { //ログイン、かつjetpack使ってる、かつ統計使ってる }
-
2017年2月22日 9:51 PM #50489
わいひら
キーマスターとりあえず以下のように修正してみました。
一覧で表示しないようにしたら、あまりストレスなく利用できるようになりました。functions.phpに以下を追記。
//Jetpackがインストールされているかどうか function is_jetpack_stats_module_active(){ return class_exists( 'jetpack' ) && Jetpack::is_module_active( 'stats' ); }
admin-pv.phpテンプレートの中身を以下のコードと入れ替える。
<?php //管理者のみにPV表示 ?> <?php if ( is_admin_pv_visible() && is_user_logged_in() && (is_wpp_enable() || (is_jetpack_stats_module_active() && is_singular())) && !(is_front_page() && is_page()) ): ?> <div class="admin-pv"> <?php //全体、月別、週別、日別のPV表示 $views_all = 0; $views_monthly = 0; $views_weekly = 0; $views_daily = 0; if (is_wpp_enable()) {//Wordpress Popular Posts利用時 $views_all = wpp_get_views ( get_the_ID(), 'all' ); $views_monthly = wpp_get_views ( get_the_ID(), 'monthly' ); $views_weekly = wpp_get_views ( get_the_ID(), 'weekly' ); $views_daily = wpp_get_views ( get_the_ID(), 'daily' ); } elseif (is_jetpack_stats_module_active()) {//Jetpack利用時 $jetpack_views = stats_get_csv('postviews', array('days' => -1, 'limit' => 1, 'post_id' => $post->ID )); if (isset($jetpack_views[0]['views'])) { $views_all = $jetpack_views[0]['views']; } $jetpack_views = stats_get_csv('postviews', array('days' => 30, 'limit' => 1, 'post_id' => $post->ID )); if (isset($jetpack_views[0]['views'])) { $views_monthly = $jetpack_views[0]['views']; } $jetpack_views = stats_get_csv('postviews', array('days' => 7, 'limit' => 1, 'post_id' => $post->ID )); if (isset($jetpack_views[0]['views'])) { $views_weekly = $jetpack_views[0]['views']; } $jetpack_views = stats_get_csv('postviews', array('days' => 1, 'limit' => 1, 'post_id' => $post->ID )); if (isset($jetpack_views[0]['views'])) { $views_daily = $jetpack_views[0]['views']; } } echo '<span class="all">全体:<span class="pv-count">', $views_all, '</span></span>'; echo '<span class="monthly">月:<span class="pv-count">', $views_monthly, '</span></span>'; echo '<span class="weekly">週:<span class="pv-count">', $views_weekly, '</span></span>'; echo '<span class="daily">日:<span class="pv-count">', $views_daily, '</span></span>'; if (is_jetpack_stats_module_active()) { echo '<span class="jp-page"><a href="'.admin_url().'admin.php?page=stats&view=post&post='.get_the_ID().'" target="_blank"><span class="fa fa-bar-chart"></span></a></span>'; } ?> </div> <?php endif ?>
これなら使えるかも。ということで暫く当サイトで実装して使い勝手を検証してみたいと思います。
-
2017年2月22日 10:31 PM #50490
Mori
ゲストおおーーーありがとうございます!!
試してみましたが、やはりPV取得に時間がかかってしまうのがネックですね・・・
便利ではあるんですが。。。ちなみに、Jetpack Post Viewsを入れると別の関数ができるので、こちらは本当にさっくりと動きますよ。
<?php if ( is_user_logged_in() ) : ?> d-<?php echo get_post_meta( $post->ID, 'jetpack-post-views-Day', true ); ?> w-<?php echo get_post_meta( $post->ID, 'jetpack-post-views-Week', true ); ?> m-<?php echo get_post_meta( $post->ID, 'jetpack-post-views-Month', true ); ?> t-<?php echo get_post_meta( $post->ID, 'jetpack-post-views', true ); ?> <a href="URL/wp-admin/admin.php?page=stats&view=post&post=<?php echo get_the_ID() ?>" target="_blank">■</a> <?php endif; ?>
こちらの方がおすすめでありますが、このプラグインが3年も更新されていないのが心配でありますが・・・。
JetpackでAPI認証をかけるとデータ取得が簡単になるんでしょうか。 -
2017年2月22日 10:44 PM #50491
わいひら
キーマスター -
2017年2月22日 10:52 PM #50492
Mori
ゲスト了解です!!ありがとうございます。
Jetpack Post Viewsは負荷をかけているかもしれないんですね。
関数を見ても何のことやらわからずでした。でしたら、個別ページに書き込むのがいいですね
あと、、、、できたら、、、人気記事一覧を作っていただけると助かります・・・。
test版を人気記事10をサイトのサイドバーに置いてますが、デザインがうまくいかずでして・・・
https://mori-room.com/functions.phpに
function my_pop_list( $target_days, $n ) { $i = 0; $args = array( 'days'=>$target_days, 'limit'=>$n+2 ); $top_posts = stats_get_csv( 'postviews', $args ); echo "<ol>\n"; foreach ( $top_posts as $value ) { $my_id = $value['post_id']; //投稿ID取得 if ( $my_id != 0 && $my_id != get_the_ID() && get_post_type($my_id) == 'post' ) { //homeと現在のページは除外で、投稿のみ if( has_post_thumbnail($my_id) ) { //サムネイルの有無 $pop_img = get_the_post_thumbnail( $my_id, array(75, 75), array('alt'=>get_the_title($my_id)) ); } else { $pop_img = '<img src="noimage.png" width="75" height="75" />'; } echo '<li><a href="'.$value['post_permalink'].'">'.$pop_img.$value['post_title'].'</a>('.$value['views']."views)</li>\n"; $i++; if ( $i >= $n ) { break; } //指定数を超えたら終了 } } echo "</ol>\n"; }
あとは、7日間の人気記事トップ10表示の場合は、
<?php my_pop_list( 7, 10 ); ?>
を好きな場所に入れ込みだけなんですが、、、画像の横にテキストがこずに、、、困っております。
ここまでできると、代替は完了するんですが・・・うーんです。もしも気が向けばでかまいませんので。。。気にされず・・・
-
2017年2月22日 11:13 PM #50493
Hidekichi
ゲスト実はrest apiで、statsの値を拾えるんですけどね。jetpackにjson apiってあるでしょう?
あやつを使えばoAuthでwordpress.comに接続して統計の情報とか取れるのです。速いかどうかは試してないので知りませんが、一挙にデータを取得できるのは便利だと思います。
参考2のResponse参照。セキュリティ云々でrest apiやらを無効にするという傾向にありますが、これらは試してみる価値はあると思います。
参考1: [WordPress] Jetpack の JSON API を使ってみる
※ 2015年の記事なのでエンドポイントが変わっているかも -
2017年2月22日 11:33 PM #50494
Mori
ゲスト>Hidekichiさん
これは・・・・無理ですね・・・さっぱりとわかりません・・・。
そもそも論で言うとGoogle AnalyticsのAPIが取得できるので、こちらからやりたいところではあるんですが、意味不明で・・・さっぱりです。
(うちのサイドバーの人気記事はSimple GA Rankingでアナリティクスデータを使用していますが、カスタマイズが難しすぎて・・)簡易と言う意味では、Popular Postsは本当にありがたいですね。
データーベースにも負担をかけず、簡単カスタマイズとはなかなかいかないものですかね -
2017年2月23日 8:09 PM #50513
わいひら
キーマスターとりあえず実装してみました。
https://wp-simplicity.com/wp-content/uploads/2017/02/simplicity2-3.zip
テーマカスタマイザーの「管理者機能」項目から再設定する必要があります。当トピックで書いたコードなどでカスタマイズをしている場合は、エラーが出る可能性があるので元に戻す必要があるかもしれません。
-
2017年2月23日 11:14 PM #50533
Mori
ゲストこんばんは!
試してみたところ動きました!!
支障なしです、たぶん。表示に関しては、ちょっとの重さは感じますが、PVが見られることを思えば問題なしの範囲でしょうか。
訪問者には重くないですし。
これでPopular postsがなくなっても寂しさが紛れますね 笑ありがとうございます。
わがままを言うとJetpack経由で人気記事が出るウィジェットがあるとありがたいです
実装してみた感じでは、全然重くないです。
ただ、Jetpackの統計データはリアルタイムではなくて、ちょっとしたタイム差があるようなので、数値の更新は遅い感じです -
2017年2月24日 8:01 PM #50621
わいひら
キーマスター申し訳ないですが、人気記事ウィジェットの作成は、最も面倒な機能追加の部類に入ります。どういった設定項目を追加できるかの検証も必要になりますし。
なので、今のところ機能追加は考えていません。
やるとしても、よほど時間的余裕があるときになると思うので、あまり期待しないでいただければと思います。 -
2017年2月24日 11:23 PM #50630
Mori
ゲストこんばんは!
なるほど、いろいろ作業の難易度があるんですね。
わいひらさんの判断されるようにやってください。自分はカスタマイズを進めてみようと思います!
ありがとうございます!! -
2017年2月25日 4:49 PM #50646
わいひら
キーマスターとりあえず、TODOリストには入れておいたので、空いている時間があればJetpackが利用できる機能の検証はしてみようと思います。
-
-
投稿者投稿
- トピック「うちはJetpackの機能でPV表示に切り替えました」には新しい返信をつけることはできません。