アクセスランキングを付けることになった。
なったけどどうにもプラグインだと気に入る構成にできるのがない。
調べたら作れた。
やろうとしたこと
デザインとか表示したい情報をこっちで好きに選べるアクセスランキングにしたい。
今回引っ張ってきたいやつ
- パーマリンク
- 記事タイトル
- カテゴリー名
- カテゴリースラッグ
参考
- [WordPress]プラグイン無しで記事のアクセス数をカウントする関数と、アクセスランキングの表示を行うスニペット
- WordPress:get_the_categoryでカテゴリー名やスラッグを取得する方法 | NxWorld
functions.php
//アクセス数の取得
function get_post_views( $postID ) {
$count_key = 'post_views_count';
$count = get_post_meta( $postID, $count_key, true );
if ( $count == '' ) {
delete_post_meta( $postID, $count_key );
add_post_meta( $postID, $count_key, '0' );
return "0 views";
}
return $count . '';
}
//アクセス数の保存
function set_post_views( $postID ) {
$count_key = 'post_views_count';
$count = get_post_meta( $postID, $count_key, true );
if ( $count == '' ) {
$count = 0;
delete_post_meta( $postID, $count_key );
add_post_meta( $postID, $count_key, '0' );
} else {
$count ++;
update_post_meta( $postID, $count_key, $count );
}
}
カウントの準備、カウントの保存のためにこれらを入れる。
アクセスランキング対象の記事ページ
アクセス数: <?php echo get_post_views( get_the_ID() ); set_post_views( get_the_ID() ); ?>
カウントのトリガーになるphp。
このままだと表示しちゃうので、表示したくなかったらechoを付けない。
ログインした状態の閲覧をカウントしたくなかったら↓にする。
アクセス数: <?php echo get_post_views( get_the_ID() ); ?> <?php if( !is_user_logged_in() ) { set_post_views( get_the_ID() ); } ?>
side.phpとか、ランキングを表示したいやつ
<section>
<h2>アクセスランキング</h2>
<?php
$args = array(
'post_type' => 'post', //投稿タイプ
'numberposts' => 10, //表示数
'meta_key' => 'post_views_count',
'orderby' => 'meta_value_num',
'order' => 'DESC',
);
$posts = get_posts( $args );
if($posts) :
?>
<ul class="list_ar">
<?php
foreach( $posts as $post ) : setup_postdata( $post );
$cat = get_the_category();
$cat_id = $cat[0]->cat_ID;
$cat_name = $cat[0]->cat_name;
$cat_slug = $cat[0]->category_nicename;
?>
<li>
<p class="title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
<p class="category"><a href="/category/<?php echo $cat_slug; ?>"><?php echo $cat_name; ?></a></p>
</li>
<?php endforeach; ?>
<?php wp_reset_postdata(); ?></ul>
<?php else : ?>
アクセスランキングはまだ集計されていません。
<?php endif; ?>
</section>
パーマリンクとかタイトルはいつものやつ。
カテゴリーの云々は変数で宣言しなくてもいいけどこんな感じで出す。
まとめ
カウント数はカスタムフィールドで表示される。
そこでいじることもできるから、差異的なアレをアレしたければそこでどうぞ。
こんなかんじ
コメント
お世話になります。
現在WPでサイト構築中で、プラグインを使わずにランキングを設置したいと思い検索していたところ、こちらのページがヒットし拝見させていただきました。
無事に設置でき、動いているのですがアクセス数がランキングに即反映されます。このアクセス数の集計に期間を設定することは可能でしょうか。
例:1ヶ月間集計し、月が変わるタイミングでランキングに反映する
(11月になったら、10月1日?10月31日の集計結果をランキングに)
お教えいただけましたら幸いです。
以上、よろしくお願いいたします。
コメントありがとうございます。
結論から言えば、僕の手には負えない内容です。
お力になれず申し訳ありません。
今後僕が機能発展したランキングを設置しようと考えるなら、
マンスリー、ウィークリー、デイリーなど指定ができるプラグインに頼ると思います。
【例】https://ja.wordpress.org/plugins/wp-postviews/
当記事は青天井のランキングを設定することがゴールでした。
期間を反映させるとなると、
・日付別にアクセスカウント
・期間を指定してランキング作成
あたりが必要となりますね。
カスタムフィールドを使ってカウントしてますので、
これを発展させるとめんどくさいことになるかもしれないです。
記事の公開期間が長引くほどフィールドを増やす羽目になりので、
違う方法を考えた方がいいかもです。
プラグインを使わずに機能を設置するのは僕も好きなので、
ぜひ頑張ってもらいたいです。