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

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

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

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

Q&A

0回答

1303閲覧

$intervalの指定期間

bgmapinds

総合スコア17

PHP

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

0グッド

0クリップ

投稿2017/03/05 05:42

編集2017/03/05 06:10

Wordpressの人気記事ランキングのwordpress popular postsですが、
集計期間をオリジナルで例えば3日前~2日前とかの期間が知りたいのですがどうすれば良いのでしょうか。
申し訳ありません。教えてください。

$interval = ""; switch( $instance['range'] ){ case "daily": $interval = "1 DAY"; break; case "weekly": $interval = "1 WEEK"; break; case "monthly": $interval = "1 MONTH"; break; default: $interval = "1 DAY"; break; }

申し訳ございません。追加情報を記載します。お許しください。Wordpressの人気記事ランキングなのですが・・。

protected function _query_posts($instance) { global $wpdb; // parse instance values $instance = $this->__merge_array_r( $this->defaults, $instance ); $prefix = $wpdb->prefix . "popularposts"; $fields = "p.ID AS 'id', p.post_title AS 'title', p.post_date AS 'date', p.post_author AS 'uid'"; $from = ""; $where = "WHERE 1 = 1"; $orderby = ""; $groupby = ""; $limit = "LIMIT {$instance['limit']}"; $post_types = ""; $pids = ""; $cats = ""; $authors = ""; $content = ""; $now = $this->__now(); // post filters // * freshness - get posts published within the selected time range only if ( $instance['freshness'] ) { switch( $instance['range'] ){ case "daily": $where .= " AND p.post_date > DATE_SUB('{$now}', INTERVAL 1 DAY) "; break; case "weekly": $where .= " AND p.post_date > DATE_SUB('{$now}', INTERVAL 1 WEEK) "; break; case "monthly": $where .= " AND p.post_date > DATE_SUB('{$now}', INTERVAL 1 MONTH) "; break; default: $where .= ""; break; } } // * post types - based on code seen at https://github.com/williamsba/WordPress-Popular-Posts-with-Custom-Post-Type-Support $types = explode(",", $instance['post_type']); $sql_post_types = ""; $join_cats = true; // if we're getting just pages, why join the categories table? if ( 'page' == strtolower($instance['post_type']) ) { $join_cats = false; $where .= " AND p.post_type = '{$instance['post_type']}'"; } // we're listing other custom type(s) else { if ( count($types) > 1 ) { foreach ( $types as $post_type ) { $post_type = trim($post_type); // required in case user places whitespace between commas $sql_post_types .= "'{$post_type}',"; } $sql_post_types = rtrim( $sql_post_types, ","); $where .= " AND p.post_type IN({$sql_post_types})"; } else { $where .= " AND p.post_type = '{$instance['post_type']}'"; } } // * posts exclusion if ( !empty($instance['pid']) ) { $ath = explode(",", $instance['pid']); $where .= ( count($ath) > 1 ) ? " AND p.ID NOT IN({$instance['pid']})" : " AND p.ID <> '{$instance['pid']}'"; } // * categories if ( !empty($instance['cat']) && $join_cats ) { $cat_ids = explode(",", $instance['cat']); $in = array(); $out = array(); for ($i=0; $i < count($cat_ids); $i++) { if ($cat_ids[$i] >= 0) $in[] = $cat_ids[$i]; else $out[] = $cat_ids[$i]; } $in_cats = implode(",", $in); $out_cats = implode(",", $out); $out_cats = preg_replace( '|[^0-9,]|', '', $out_cats ); if ($in_cats != "" && $out_cats == "") { // get posts from from given cats only $where .= " AND p.ID IN ( SELECT object_id FROM {$wpdb->term_relationships} AS r JOIN {$wpdb->term_taxonomy} AS x ON x.term_taxonomy_id = r.term_taxonomy_id WHERE x.taxonomy = 'category' AND x.term_id IN({$in_cats}) )"; } else if ($in_cats == "" && $out_cats != "") { // exclude posts from given cats only $where .= " AND p.ID NOT IN ( SELECT object_id FROM {$wpdb->term_relationships} AS r JOIN {$wpdb->term_taxonomy} AS x ON x.term_taxonomy_id = r.term_taxonomy_id WHERE x.taxonomy = 'category' AND x.term_id IN({$out_cats}) )"; } else { // mixed $where .= " AND p.ID IN ( SELECT object_id FROM {$wpdb->term_relationships} AS r JOIN {$wpdb->term_taxonomy} AS x ON x.term_taxonomy_id = r.term_taxonomy_id WHERE x.taxonomy = 'category' AND x.term_id IN({$in_cats}) AND x.term_id NOT IN({$out_cats}) ) "; } } // * authors if ( !empty($instance['author']) ) { $ath = explode(",", $instance['author']); $where .= ( count($ath) > 1 ) ? " AND p.post_author IN({$instance['author']})" : " AND p.post_author = '{$instance['author']}'"; } // All-time range if ( "all" == $instance['range'] ) { $fields .= ", p.comment_count AS 'comment_count'"; // order by comments if ( "comments" == $instance['order_by'] ) { $from = "{$wpdb->posts} p"; $where .= " AND p.comment_count > 0 "; $orderby = " ORDER BY p.comment_count DESC"; // get views, too if ( $instance['stats_tag']['views'] ) { $fields .= ", IFNULL(v.pageviews, 0) AS 'pageviews'"; $from .= " LEFT JOIN {$prefix}data v ON p.ID = v.postid"; } } // order by (avg) views else { $from = "{$prefix}data v LEFT JOIN {$wpdb->posts} p ON v.postid = p.ID"; // order by views if ( "views" == $instance['order_by'] ) { $fields .= ", v.pageviews AS 'pageviews'"; $orderby = "ORDER BY pageviews DESC"; } // order by avg views elseif ( "avg" == $instance['order_by'] ) { $fields .= ", ( v.pageviews/(IF ( DATEDIFF('{$now}', MIN(v.day)) > 0, DATEDIFF('{$now}', MIN(v.day)), 1) ) ) AS 'avg_views'"; $groupby = "GROUP BY v.postid"; $orderby = "ORDER BY avg_views DESC"; } } } else { // CUSTOM RANGE $interval = ""; switch( $instance['range'] ){ case "daily": $interval = "1 DAY"; break; case "weekly": $interval = "1 WEEK"; break; case "monthly": $interval = "1 MONTH"; break; default: $interval = "1 DAY"; break; } // order by comments if ( "comments" == $instance['order_by'] ) { $fields .= ", COUNT(c.comment_post_ID) AS 'comment_count'"; $from = "{$wpdb->comments} c LEFT JOIN {$wpdb->posts} p ON c.comment_post_ID = p.ID"; $where .= " AND c.comment_date_gmt > DATE_SUB('{$now}', INTERVAL {$interval}) AND c.comment_approved = 1 "; $groupby = "GROUP BY c.comment_post_ID"; $orderby = "ORDER BY comment_count DESC"; if ( $instance['stats_tag']['views'] ) { // get views, too $fields .= ", IFNULL(v.pageviews, 0) AS 'pageviews'"; $from .= " LEFT JOIN (SELECT postid, SUM(pageviews) AS pageviews FROM {$prefix}summary WHERE last_viewed > DATE_SUB('{$now}', INTERVAL {$interval}) GROUP BY postid) v ON p.ID = v.postid"; } } // ordered by views / avg else { $from = "{$prefix}summary v LEFT JOIN {$wpdb->posts} p ON v.postid = p.ID"; $where .= " AND v.last_viewed > DATE_SUB('{$now}', INTERVAL {$interval}) "; $groupby = "GROUP BY v.postid"; // ordered by views if ( "views" == $instance['order_by'] ) { $fields .= ", SUM(v.pageviews) AS 'pageviews'"; $orderby = "ORDER BY pageviews DESC"; } // ordered by avg views elseif ( "avg" == $instance['order_by'] ) { $fields .= ", ( SUM(v.pageviews)/(IF ( DATEDIFF('{$now}', DATE_SUB('{$now}', INTERVAL {$interval})) > 0, DATEDIFF('{$now}', DATE_SUB('{$now}', INTERVAL {$interval})), 1) ) ) AS 'avg_views' "; $orderby = "ORDER BY avg_views DESC"; } // get comments, too if ( $instance['stats_tag']['comment_count'] ) { $fields .= ", IFNULL(c.comment_count, 0) AS 'comment_count'"; $from .= " LEFT JOIN (SELECT comment_post_ID, COUNT(comment_post_ID) AS 'comment_count' FROM {$wpdb->comments} WHERE comment_date_gmt > DATE_SUB('{$now}', INTERVAL {$interval}) AND comment_approved = 1 GROUP BY comment_post_ID) c ON p.ID = c.comment_post_ID"; } } } // List only published, non password-protected posts $where .= " AND p.post_password = '' AND p.post_status = 'publish'"; // Build query $query = "SELECT {$fields} FROM {$from} {$where} {$groupby} {$orderby} {$limit};"; $this->__debug( $query ); $result = $wpdb->get_results($query); return apply_filters( 'wpp_query_posts', $result, $instance ); } // end query_posts

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/03/05 05:56

何か前提となる条件とか、必要となる条件とか一切合切バッサリと省略されていて状況把握できません。極端な話、「何がしたいのか」読み取れません。
kei344

2017/03/05 05:59

質問文のコードはそれぞれコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。また、$instanceはどのように生成しているかも質問文に追記してください。
bgmapinds

2017/03/05 06:05

申し訳ございません。追加情報を記載しました。教えてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問