今日は、WordPressのお仕事で実装した「カスタム投稿の人気記事一覧をプラグインなしで実装する」をアウトプットします!
こんにちは。Webコーダーのharuです。
3歳1歳の育児をしながら、5~7時・21~0時にプログラミングを独学しています。
2020.5.11~学習スタート
2020.8.10~実務でコーディングしています
HTML/CSS(SCSS)/jQuery/WordPress。
これからもっと知識をつけていきたく、インプット・アウトプットを続けています。
【学習記録やアウトプットのTwitterはこちらです*】
普段から学習していてわかったことや、気付きをログに残しています。
※認識の間違っている箇所があれば、ご教授いただけるとうれしいです!
【WordPress】カスタム投稿の人気記事一覧をプラグインなしで実装する
人気記事一覧をプラグインなしで実装したので、アウトプットです!
お仕事では、さらにここから機能をカスタマイズしたので、別記事でまとめる予定です!今日は、ノーマルな実装方法をまとめていきます。
【この記事のゴール】
①functions.phpに、閲覧回数を記録するコードを追加
②それぞれの記事に、カウント用のコードを追加
③WP_Query(サブループ)を使用して、人気記事一覧を表示させる
です!それではアウトプットしていきます!
①functions.phpに、閲覧回数を記録するコードを追加
今回はプラグインを使用しないので、functions.phpに閲覧回数を記録するコードを追加します。
// 記事の閲覧回数を計測
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);
}
}
今回の実装は、以下の記事を参考にさせていただきました。ありがとうございます!
②それぞれの記事に、カウント用のコードを追加
single.phpに以下のコードを追加します。わたしはsingle-column.phpに記載しました。
<?php if (!is_user_logged_in() && !is_robots()) {
setPostViews(get_the_ID());
}?>
追加の場所は、single.php内ならどこでも大丈夫です。
!is_user_logged_in()
→ログインユーザーのアクセスを除く
!is_robots()
→ロボットのアクセスを除く
③WP_Query(サブループ)を使用して、人気記事一覧を表示させる
最後に、人気記事一覧を表示させたいphpファイルに以下を記述します。
<?php
$args = array(
'meta_key' => 'post_views_count', //functions.phpに記述したもの
'post_type' => 'column',//カスタム投稿名
'orderby' => 'meta_value_num',
'order' => 'DESC',
'posts_per_page' => 5 //表示件数
);
//ループ開始
$query = new WP_Query($args);
if ($query->have_posts()) :
while ($query->have_posts()) :
$query->the_post();
?>
//表示させたい記事の内容
<?php
endwhile;
endif;
wp_reset_postdata();
?>
//ループ終了
ループ内の記述や、CSSは割愛します。
ここまでで、人気記事一覧の取得がうまくできているか確認します。
以下の記事の「テスト投稿③」をクリックしまくって自作自演してみますw
サイドバーに人気記事一覧を取得してみました。
ちゃんと一番上に来ました!
あとがき
簡単ですが、今日は以上です。
次回は、この人気記事一覧をさらにカスタマイズしてみます。
Thanks:師匠「もりけんさん」(@terrace_tec)
もりけんさんのHPはこちら