カスタム投稿内に人気記事の表示をしたいが同じものが並んでしまう
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 194
wordpress人気記事の表示をしたいが同じものが並んでしまう
プラグインなしで人気記事を3つ表示しようと思っています。
カスタム投稿ページ内にコードを書いているためか、開いているページのものが
3つ(同じもの)並んでしまっています。
調べると皆さんsidebarに記事を表示されているのでそうしないといけないのかな?と
思ってはいるのですが、sidebarの下にお問い合わせや新着記事をページの横幅いっぱい表示させる
デザインの関係上sidebarを使うことを躊躇しています。。
もし解決方法をご存じの方がいればお教えいただけると助かります。
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';
}
//カスタム投稿の「post_views_count」アクセス数を保持する
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);
single-infopage.php
<!-- 人気記事一覧 -->
<?php if(is_mobile()): //SP
$popular = new WP_Query(
array(
'meta_key' => 'post_views_count',
'orderby' => 'meta_value_num',
'order' => 'DESC',
'post_type' => 'infopage',
'posts_per_page' => 6,
'caller_get_posts' => 1,
'offset' => 0,
)
);
else: //PC tablet
$popular = new WP_Query(
array(
'meta_key' => 'post_views_count',
'orderby' => 'meta_value_num',
'order' => 'DESC',
'post_type' => 'infopage',
'posts_per_page' => 3,
'caller_get_posts' => 1,
'offset' => 0,
)
); ?>
<?php if($popular->have_posts());
while ($popular->have_posts()) : $popular->the_post();
?>
<div class="Popular3">
<div class="Img">
<?php
global $wp_query;
$postID = $wp_query->post->ID;
echo wp_get_attachment_image($image, 'medium');?>
</div>
<div class="center">
<div class="Red">
<?php
global $wp_query;
$postID = $wp_query->post->ID;
echo get_post_meta($postID, '例題', true);
?>
</div><div class="White">
<?php
global $wp_query;
$postID = $wp_query->post->ID;
echo get_post_meta($postID, 'その他', true);
?>
</div>
</div>
<div class="fee">
<?php
global $wp_query;
$postID = $wp_query->post->ID;
echo get_post_meta($postID, '例', true);
?>
</div>
<a href="<?php the_permalink(); ?>">
<div class="Btn">詳細を見る</div>
</a>
</div>
<?php endwhile; wp_reset_postdata();?>
<?php endif; ?>
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
たしかに$wp_query
はWP_Queryオブジェクトですが、
$popular = new WP_Query();
と宣言されていますから、
$postID = $popular->post->ID;
でループ内の記事IDを取得するのではないでしょうか?
おそらく$wp_query
は特に変更されず表示中の記事の情報を持っているため
$postID = $wp_query->post->ID;
は表示中の記事IDを取得して、
それをecho get_post_meta($postID, '例題', true);
で渡しているので、表示中の記事の情報が出力されるのではないでしょうか。
ループの中ですから$postID = get_the_ID();
でもOKだと思います。
いずれにせよglobal $wp_query;
は不要です。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.09%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2020/11/13 16:30
phpのことを良く分かっていないので助かりました。。
ありがとうございます!!