前提・実現したいこと
週間人気ランキング、月間人気ランキングを表示したい。
記事の中から5件ランキングにして表示したいのですが、1件しか表示されずサムネイル画像も表示されません。
発生している問題・エラーメッセージ
5件中1件しかランキング表示されず、サムネイル画像は表示されない。
該当のソースコード(pageview.php)
<?php set_post_views_month(); $args = array( ‘meta_key’ => ‘pv_count_month’, ‘orderby’ => ‘meta_value_num’, ‘order’ => ‘DESC’, ‘numberposts’ => 5, // ← 5件取得 ); $posts = get_posts( $args ); if( $posts ): ?> <ul class="boxWrap clearfix"> <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> <div class="viewcount"> <?php echo getPostViews(get_the_ID()); // 記事閲覧回数表示 ?> </div> </div> </div> </div> </li> <?php endif; ?> </ul>該当のソースコード(functions.php)
//アクセス数をカウントする
function set_post_views_week() {
$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_week() {
$num = (int)date_i18n('H');
$key = 'pv_count_week';
$reset_key = '_pv_count_week';
$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;
}
//アクセス数をカウントする
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;
}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。