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

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

ただいまの
回答率

87.34%

プラグインなしで月別カスタム投稿記事ランキング表示する

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,457

score 12

wordpressの質問です。
タイトル通り、「プラグインなしで月別カスタム投稿記事ランキング表示」したいです。

総合カスタム投稿記事ランキングは表示することができているので、そのコードと月間PV数取得のコードを足したらできると思っていたのですが、そんなうまいこといくわけがありませんでした。
③のコードで月間PV数を取得しているので、あとは①のコードに何かを足したらいいと思っていたのですが...
そこの答えがなかなかわからないです。

以下ののコードを表示したいところに足したのですが、2行目で「syntax error, unexpected ','」というエラーが出ました。
「,」は、足りているような...

<?php
 'example',
  'numberposts' => 5,
  'meta_key' => 'pv_count_week',
  'orderby' => 'meta_value_num',
  'order' => 'DESC',
);
$posts = get_posts( $args );
if( $posts ): ?>


PHPについて知識がないので、苦戦中です。
ご教授、宜しくお願い致します。

①総合記事ランキング表示部分

<?php
    $args = array(
    'post_type' => 'product_samples'
    ); ?>

    <?php $my_query = new WP_Query( $args ); ?>
        <ul class="boxWrap clearfix">
            <?php
            $popular = new WP_Query(array(
                'posts_per_page'   => 5,
                'meta_key'         => 'post_views_count',//投稿数をカウントするカスタムフィールド名
                'orderby'          => 'meta_value_num',
                'order'            => 'DESC',
                'post_type'        => array('example'),
                'post_status'      => 'publish',
                'caller_get_posts' => 1,
                'offset'           => 0,
            ));
            while ($popular->have_posts()) : $popular->the_post();
            ?>
            <!-- サムネイルの表示 -->
                <li class="block circle">
                    <a href="<?php echo get_permalink(); ?>">
                        <div class="mosaic-backdrop">
                            <?php if ( has_post_thumbnail() ) { the_post_thumbnail( 'post-thumbnail'); } ?>
                            <div class="info topinfo">
                                <p>
                                    <?php // 連番表示
                                    $count = sprintf("%02d",$count); // 一桁を二桁に
                                    echo $count + 1; // 01を出力
                                    $count++;
                                    ?>
                                </p>
                                <div class="modelName">
                                    <span class="name">
                                        <?php the_title(); ?>
                                        <span id="likeCount3"></span>
                                    </span>
                                    <span class="univ"><?php echo get_secondary_title(); ?></span>
                                </div>
                            </div>
                          </div>
                    </a>
                  </li>
            <?php endwhile; ?>
        </ul>
        <?php wp_reset_postdata(); ?>


②総合記事ランキング(functions.php)

// 人気記事総合
function getPostViews($postID){
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
            delete_post_meta($postID, $count_key);
            add_post_meta($postID, $count_key, '0');
            return "0 View";
    }
    return $count.' Views';
}
function setPostViews($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);
    }
}
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);


③月間PV数取得(functions.php)

//アクセス数をカウントする
function set_post_views_month() {
    $postID = get_the_ID();
    $num = (int)date_i18n('H'); // 現在時間で番号取得
    $key = 'pv_count_month';
    $count_key = '_pv_count_month';
    $count_array = get_post_meta( $postID, $count_key, true );
    $sum_count = get_post_meta( $postID, $key, true );
    if( !is_array($count_array) ) { //配列ではない
        $count_array = array();
        $count_array[$num] = 1;
    } else { //配列である
        if ( isset( $count_array[$num] ) ) { //カウント配列[n]が存在する
            $count_array[$num] += 1;
        } else { //カウント配列[n]が存在しない
            $count_array[$num] = 1;
        }
    }
    //アクセス数を更新する
    update_post_meta( $postID, $count_key, $count_array );
    update_post_meta( $postID, $key, $sum_count + 1 );
}

//アクセス数をリセットする
function reset_post_views_month() {
    $num = (int)date_i18n('H');
    $key = 'pv_count_month';
    $reset_key = '_pv_count_month';
    $args = array(
        'posts_per_page'   => -1,
        'post_type' => 'your_post_name',
        'post_status'=>'publish',
        'meta_key' => $reset_key,
    );
    $reset_posts = get_posts($args);
    if($reset_posts):
        foreach($reset_posts as $reset_post):
            $postID = $reset_post->ID;
            $count_array = get_post_meta( $postID , $reset_key, true );
            if ( isset( $count_array[$num] ) ) { //カウント配列[n]が存在する
                $count_array[$num] = 0;
            }
            //アクセス数をリセットする
            update_post_meta( $postID, $reset_key, $count_array );
            update_post_meta( $postID, $key, array_sum( $count_array ) );
        endforeach;
    endif;
}

//リセット関数を実行するアクションフックを追加
// add_action( 'set_hours_event', 'reset_post_views' );
add_action( 'set_week_event', 'reset_post_views_week' );
add_action( 'set_month_event', 'reset_post_views_month' );

//実行間隔の追加
function my_interval_week( $schedules ) {
    // 1週間ごとを追加
    $schedules['1week'] = array(
        'interval' => 604800,
        'display' => 'every 1 week'
);
    return $schedules;
}
add_filter( 'cron_schedules', 'my_interval_week' );

//実行間隔の追加
function my_interval_month( $schedules_month ) {
  // 1ヶ月ごとを追加
    $schedules_month['1month'] = array(
        'interval' => 2592000,
        'display' => 'every 1 month'
    );
    return $schedules_month;
}
add_filter( 'cron_schedules', 'my_interval_month' );

//アクションフックを定期的に実行するスケジュールイベントの追加
function my_activation_week() {
    if ( ! wp_next_scheduled( 'set_week_event' ) ) {
        wp_schedule_event( 1451574000, '1week', 'set_week_event' );
    }
}
add_action('wp', 'my_activation_week');

//アクションフックを定期的に実行するスケジュールイベントの追加
function my_activation_month() {
  if ( ! wp_next_scheduled( 'set_month_event' ) ) {
        wp_schedule_event( 1451574000, '1month', 'set_month_event' );
    }
}
add_action('wp', 'my_activation_month');

//ボットの判別
function isBot() {
    $bot_list = array (
    'Googlebot',
    'Yahoo! Slurp',
    'Mediapartners-Google',
    'msnbot',
    'bingbot',
    'MJ12bot',
    'Ezooms',
    'pirst; MSIE 8.0;',
    'Google Web Preview',
    'ia_archiver',
    'Sogou web spider',
    'Googlebot-Mobile',
    'AhrefsBot',
    'YandexBot',
    'Purebot',
    'Baiduspider',
    'UnwindFetchor',
    'TweetmemeBot',
    'MetaURI',
    'PaperLiBot',
    'Showyoubot',
    'JS-Kit',
    'PostRank',
    'Crowsnest',
    'PycURL',
    'bitlybot',
  'Hatena',
    'facebookexternalhit',
    'NINJA bot',
    'YahooCacheSystem',
    'NHN Corp.',
    'Steeler',
    'DoCoMo',
    );
    $is_bot = false;
    foreach ($bot_list as $bot) {
        if (stripos($_SERVER['HTTP_USER_AGENT'], $bot) !== false) {
            $is_bot = true;
            break;
        }
    }
    return $is_bot;
}
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

+1

「,」は、足りているような...

$args = array( // ← これが足りない
 'example',
  'numberposts' => 5,
  'meta_key' => 'pv_count_week',
  'orderby' => 'meta_value_num',
  'order' => 'DESC',
);

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/01/19 14:08

    「 $args = array( 」の1行足してら新らしくエラーが出て、ifが閉じれていないと出ました。

    エラー分
    syntax error, unexpected end of file, expecting elseif (T_ELSEIF) or else (T_ELSE) or endif (T_ENDIF)

    </ul>の前に<?php endwhile; ?>の一文を足したのですが、 同じエラー分が出ました。

    以下がコードです。
    <?php
    $args = array(
    'example',
    'numberposts' => 5,
    'meta_key' => 'pv_count_week',
    'orderby' => 'meta_value_num',
    'order' => 'DESC',
    );
    $posts = get_posts( $args );
    if( $posts ):?>
    <ul class="boxWrap clearfix">
    <li class="block circle">
    <a href="<?php echo get_permalink(); ?>">more</a>
    <div class="mosaic-backdrop">
    <?php if ( has_post_thumbnail() ) { the_post_thumbnail( 'post-thumbnail'); } ?>
    <div class="info topinfo">
    <p><?php // 連番表示
    $count = sprintf("%02d",$count); // 一桁を二桁に
    echo $count + 1; // 01を出力
    $count++;
    ?>
    </p>
    <div class="modelName">
    <span class="name"><?php the_title(); ?><span id="likeCount3"></span></span>
    <span class="univ"><?php echo get_secondary_title(); ?></span>
    </div>
    </div>
    </div>
    </li>
    <?php endwhile; ?>
    </ul>

    キャンセル

  • 2020/01/19 15:29

    デバッグ作業はご自身でお願いします。提示されたコードもこれが全体でないので、これ以上対応しませんが、whileがないのにendwhileしても意味はありません。

    キャンセル

  • 2020/01/19 15:39

    array() の要素の最後って , で終わること許容されてたっけ( 基本かかないからしらないんだが )

    キャンセル

  • 2020/01/19 15:41

    To: asahina1979さん
    手元に環境を作って試してみてください。

    キャンセル

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

  • ただいまの回答率 87.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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