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

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

ただいまの
回答率

90.54%

  • PHP

    23563questions

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

$intervalの指定期間

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 399

bgmapinds

score 11

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • Kosuke_Shibuya

    2017/03/05 14:56

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

    キャンセル

  • kei344

    2017/03/05 14:59

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

    キャンセル

  • bgmapinds

    2017/03/05 15:05

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

    キャンセル

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

同じタグがついた質問を見る

  • PHP

    23563questions

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