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

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

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

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

Q&A

1回答

2047閲覧

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

O40okllBOj0dJrS

総合スコア2

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

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

1グッド

0クリップ

投稿2021/05/08 14:22

編集2021/05/08 14:23

前提・実現したいこと 

週間人気ランキング、月間人気ランキングを表示したい。

記事の中から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;
}

homepage-site👍を押しています

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

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

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

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

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

guest

回答1

0

<?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"> <?php foreach( $posts as $post ) : setup_postdata( $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> <div class="viewcount"> <?php echo getPostViews(get_the_ID()); // 記事閲覧回数表示 ?> </div> </div> </div> </div> <?php endforeach; wp_reset_postdata(); ?> </ul> <?php else : ?> <p>アクセスランキングはまだ集計されていません。</p> <?php endif; ?>

でコードは完成しました。ただ自分の場合プラグインで記事を出力しているためこの方法は使えないようです。

固定ページの内容が5つ表示されます。

投稿2021/05/09 11:45

編集2021/05/09 12:20
O40okllBOj0dJrS

総合スコア2

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問