質問編集履歴

3 更新

bgmapinds

bgmapinds score 11

2017/03/05 15:10  投稿

$intervalの指定期間
3日前~2日前までの期間が知りたいのですがどうすれば良いのでしょうか。
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
  • PHP

    23979 questions

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

2 更新情報

bgmapinds

bgmapinds score 11

2017/03/05 15:07  投稿

$intervalの指定期間
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
  • PHP

    23979 questions

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

1 追加情報

bgmapinds

bgmapinds score 11

2017/03/05 15:05  投稿

$intervalの指定期間
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;
               }
               }
申し訳ございません。
       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
  • PHP

    23979 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る