質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

863閲覧

人気記事をプラグインなしで15日毎にアクセスをリセットして人気記事を表示させたい

morningl

総合スコア11

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2018/01/10 08:53

編集2018/01/11 01:46

###前提・実現したいこと

人気記事を表示させるために下記サイトを参考に実装しました。
下記サイトの通りに実装すると、作成したカスタムフィールドの値を毎月1日にリセットされます。
こちら毎月1日にリセットではなく、15日毎にリセットにし、人気記事を表示させたいですが、
どうすればよいかわからず困ってます。
お力添えいただきますよう、よろしくお願いいたします。

WordPress:カテゴリ別のタグクラウドを出す方法

function.php

php

1function wpb_set_post_views($postID) { 2 $count_key = 'wpb_post_views_count'; 3 $count = get_post_meta($postID, $count_key, true); 4 if($count==''){ 5 $count = 0; 6 delete_post_meta($postID, $count_key); 7 add_post_meta($postID, $count_key, '0'); 8 }else{ 9 $count++; 10 update_post_meta($postID, $count_key, $count); 11 } 12} 13//To keep the count accurate, lets get rid of prefetching 14remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0); 15 16/* add post views to single page */ 17function wpb_track_post_views ($post_id) { 18 if ( !is_single() ) return; 19 if ( empty ( $post_id) ) { 20 global $post; 21 $post_id = $post->ID; 22 } 23 wpb_set_post_views($post_id); 24} 25add_action( 'wp_head', 'wpb_track_post_views'); 26 27add_action('my_hourly_event', 'my_hourly_action'); 28 29function my_hourly_action() { 30 // 投稿記事全取得 31 $args = array( 32 'posts_per_page' => -1, 33 'post_type' => array( 34 'post' 35 ) 36 ); 37 // 変数に格納 38 $the_query = new WP_Query($args); 39 $count_key = 'wpb_post_views_count'; 40 delete_post_meta_by_key('wpb_post_views_count'); 41 if ($the_query->have_posts()) : 42 while ($the_query->have_posts()) : $the_query->the_post(); 43 $post_id = $the_query->post->ID; 44 $count = get_post_meta($post_id, $count_key, true); 45 if(empty($count)){ 46 $count = 0; 47 delete_post_meta($post_id, $count_key); 48 add_post_meta($post_id, $count_key, '0'); 49 }else{ 50 $count++; 51 update_post_meta($post_id, $count_key, 0); 52 } 53 endwhile; 54 endif; 55} 56 57// イベントの時間追加 58 59add_filter('cron_schedules', 'my_interval' ); 60function my_interval($schedules) { 61 date_default_timezone_set( 'Asia/Tokyo' ); 62 $dt = new DateTime('now'); 63 $dt_2 = new DateTime('midnight first day of next month'); 64 $d = $dt_2->diff($dt, true); 65 $dt_array = get_object_vars($d); 66 $day = $dt_array["d"] * 24 * 60 * 60; 67 $hour = $dt_array["h"] * 60 * 60; 68 $minutes = $dt_array["i"] * 60; 69 $second = $dt_array["s"]; 70 $difftime = $day + $hour + $minutes + $second + 60; 71 $schedules['Nextmonth'] = array( 72 'interval' => $difftime, 73 'display' => 'Nextmonth' 74 ); 75 return $schedules; 76} 77 78function my_activation() { 79 // イベントが未登録なら登録する 80 if(!wp_next_scheduled('my_hourly_event')){ 81 wp_schedule_event(time(), 'Nextmonth', 'my_hourly_event'); 82 } 83} 84add_action('wp', 'my_activation'); 85 86// イベント排除 87register_deactivation_hook(__FILE__, 'my_deactivation'); 88function my_deactivation() { 89 wp_clear_scheduled_hook('my_hourly_event'); 90}
index.php

php

1<?php 2$popularpost = new WP_Query( array( 'posts_per_page' => 10, 'meta_key' => 'wpb_post_views_count', 'orderby' => 'meta_value_num', 'order' => 'DESC' ) ); 3 4while ( $popularpost->have_posts() ) : $popularpost->the_post();?> 5 <div class="latest_wrap"> 6 <a href="<?php the_permalink(); ?>"> 7 <?php if ( has_post_thumbnail() ) { ?> 8 <?php the_post_thumbnail('thumbnail', array('class' => 'thumbnail')); ?> 9 <?php } else { ?> 10 <img src="<?php echo get_stylesheet_directory_uri(); ?>/img/no_image3.gif" /> 11 <?php } ?> 12 13 <h2 class="title"><?php the_title(); ?></h2> 14 <span class="view_count"><?php echo post_custom('wpb_post_views_count'); ?></span> 15 </a> 16 </div> 17<?php endwhile; ?>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/01/10 11:06

『こちら毎月1日にリセットではなく、直近2週間でアクセスが多かった順、人気記事を表示させたい』文章的に変ではないですか?毎月1日にリセットではなく10日毎にリセットしたい等なら分かりますが、完全に論点が変わってますよね?あと、直近2週間とはどのように考えてますか?2週間毎にリセット?15日毎にリセット?集計して2週間経過したら順位を表示?考え方が分かりませんが?
morningl

2018/01/11 01:43

ご指摘ありがとうございます。15日毎リセットで考えています。何卒よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2018/01/11 02:06

リセットが何日間隔でも同じことが言えますが、細かく考えるとリセット直前でなければ正しい?結果ではないと思いますし、リセット直後だとアクセスが無ければ順位も無いということになると思います。これって無意味ではないでしょうか?
morningl

2018/01/11 03:22

そうですね。リセットではなく、ただしく表示させるには集計対象期間を過去15日間設定して表示しなければならないということですよね?
退会済みユーザー

退会済みユーザー

2018/01/11 03:47

どのような想定か分からないので個人的な考えですが、そうだと思います。
guest

回答1

0

ベストアンサー

毎月1日にリセット→15日毎にリセットに変更するだけなら

PHP

1 $schedules['Once15days'] = array( 2 'interval' => 1296000, // 60s * 60m * 24h * 15d 3 'display' => 'Once15days' 4 );

とcronのインターバルを変更してあげれば良いのではないでしょうか

投稿2018/01/11 04:42

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問