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

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

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

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

PHP

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

Q&A

解決済

3回答

1329閲覧

wordpressで新着情報を作る際に通常の投稿は1日1件のみ表示したい

Lariat

総合スコア23

WordPress

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

PHP

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

0グッド

0クリップ

投稿2018/02/06 07:49

編集2018/02/06 10:21

お世話になっております。

wordpressでサイトのトップページに更新情報を5件掲載しようと思っています。

表示したい項目は下記の通りで、

  • ブログ
  • カスタム投稿タイプA
  • カスタム投稿タイプB
  • カスタム投稿タイプC
  • カスタム投稿タイプD

上記の「ブログ」(WordPressの通常の投稿)のみ数人で更新しており、毎日数件の記事が追加されている状況です。
この状態では5件しかない表示枠に全が「ブログ」になってしまい、他の情報を見落としてしまう可能性があります。

そこで、「ブログ」のみ1日1件のみ表示したいのですが、5日間「ブログ」の記事の追加しかなかった場合は、
表示枠全てが「ブログ」になってしまうのは問題ありません。

理想の状態は下記になります

  • 2018/02/06 「ブログ」を更新しました(この日に何件記事が追加されても1枠のみ表示)
  • 2018/02/05 「カスタム投稿タイプA」を更新しました。
  • 2018/02/05 「カスタム投稿タイプA」を更新しました。
  • 2018/02/04 「カスタム投稿タイプB」を更新しました。
  • 2018/02/03 「ブログ」を更新しました(この日に何件記事が追加されても1枠のみ表示)

各カスタム投稿タイプについては1日に5件記事が追加された場合、表示枠が全て埋まっても問題ありません。

現在のコードは以下になります。

php

1$count = 1; 2$args = array( 3 'post_type' => array( 'post', 'kasutamu1', 'kasutamu2', 'kasutamu3' ) 4); 5$posts = get_posts( $args ); 6foreach ($posts as $post) { 7 if (get_post_type() === 'post') { 8 if (!$date === get_the_date()) { 9 $date = get_the_date(); 10 echo $date.' 「ブログ」を更新しました'; 11 } else { 12 continue; 13 } 14 } else { 15 echo get_the_date().' 「'.get_post_type().'」を更新しました'; 16 } 17 if ($count === 5) { 18 break; 19 } else { 20 $count++; 21 } 22}

何とぞ、ご教授のほどお願いします。

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

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

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

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

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

guest

回答3

0

ちょっと冗長な気はしますが

PHP

1$count = 1; 2foreach ($posts as $post) { 3 if (get_post_type() === 'post') { 4 if (!$date === get_the_date()) { 5 $date = get_the_date(); 6 echo $date.' 「ブログ」を更新しました'; 7 } else { 8 continue; 9 } 10 } else { 11 echo get_the_date().' 「'.get_post_type().'」を更新しました'; 12 } 13 if ($count === 5) { 14 break; 15 } else { 16 $count++; 17 } 18}

post_typeがpostなら一旦出力(日付を変数に入れておく)
次もpostで日付が前回の投稿と一致したら出力せずにcontinueで次のループへ
出力が5件になったらbreakでループを抜ける

こんな感じでしょうか?
未検証なので上手く動かない時は言ってください。

投稿2018/02/06 08:31

編集2018/02/06 09:00
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Lariat

2018/02/06 08:34

ありがとうございます! ループを二重にしたり、いろいろ試してみていましたが、カウントは思いつきませんでした! さっそく試してみようと思います。 取り急ぎ御礼まで。
Lariat

2018/02/06 09:30

いただいた回答に $count = 1; $args = array( 'post_type' => array( 'post', 'カスタムA', 'カスタムB', 'カスタムC' ) ); $posts = get_posts( $args ); foreach ($posts as $post) { if (is_singular( 'post' ) ) { if (!$date === get_the_date()) { $date = get_the_date(); echo $date.' 「ブログ」を更新しました'; } else { continue; } } else { echo get_the_date().' 「'.get_post_type().'」を更新しました'; } if ($count === 5) { break; } else { $count++; } } としたところ、上手く表示されたようです!ありがとうございます!!
Lariat

2018/02/06 10:18

申し訳ありません。 上記のわたくしのコードでは上手く表示できていませんでした。 aozukiさんのコードを実行してみたところ、件数が1件しか表示されておらず、postがカウントされていないような気がしています。 改めてご助力いただけるのであればありがたいです・・・!
guest

0

ベストアンサー

have_postsを利用した場合は、以下のような感じかと思います。
カウントさせておくってところはaozukiさんと同じですね。
実際の条件式やプログラムなどは書いてないですが。考え方だけでもいいですか?

PHP

1//どれだけ出力したかと、何日のブログを表示したかの配列を用意しておく 2$intPostNum = 0; 3$arrBlogDate = array(); 4 5if ( have_posts() ) : 6 while ( have_posts() && $intPostNum < 5) : 7 // ↑have_postsだけではなく、表示件数($intPostNum)が5件に満たなかったときの条件を追加する 8 9 the_post(); 10 11 // 投稿タイプがブログの場合 12 13 // $arrBlogDateに、ループ中の記事の日付が入っていなければ 14 // フォーマットに沿って出力 15 16 // $arrBlogDateに、今の日付を追加する 17 // 記事件数($intPostNum)をプラスする 18 19 // 日付の配列に、該当記事の日付が入ってたら 20 // 何も処理しない(スルー) 21 22 // 投稿タイプがブログじゃない場合 23 // フォーマットに沿って出力 24 // 記事件数($intPostNum)をプラスする 25 26 endwhile; 27else : 28 29endif; 30

投稿2018/02/06 08:48

kszk311

総合スコア3404

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

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

Lariat

2018/02/06 09:33

ありがとうございます! 考え方のみでも非常にありがたいです!! やりたい事を日本語で書くというのは凄くわかりやすいですね。 今回はaozukiさんからいただいたコードで表現することができました。 まだまた初心者なので、これから勉強していきます! お時間いただきまして、ありがとうございました!
guest

0

みなさんご回答ありがとうございました。
下記のコードで無事に解決できました!!

aozukiさん、kszk311さん本当にありがとうございました!
自己解決欄に書くのは大変おこがましいのですが、
こちらの方が他の方にもコードが見やすいかと思い、こちらに最終的なコードを記載させていただきます。
お二人のコードや考え方を自分なりに書いてみましたので、不要な箇所などあるかもしれませんが、今のところ動作しています。

php

1$intPostNum = 0; 2$arrBlogDate = array(); 3$args = array( 4 'post_type' => array( 'post', 'kasuamu01', 'kasuamu02', 'kasuamu03' ) 5); 6$the_query = new WP_Query( $args ); 7if ( $the_query->have_posts()) { 8 while( $the_query->have_posts()&& $intPostNum < 5 ) { 9 $the_query->the_post(); 10 if (get_post_type() === 'post' ) { 11 $blogDate = get_the_date(); 12 $key = in_array($blogDate, $arrBlogDate); 13 if(!$key){ 14 echo '<li>'.get_the_date().' 「ブログ」を更新しました'.'</li>'; 15 $arrBlogDate[]=$blogDate; 16 $intPostNum++; 17 18 }else{ 19 continue; 20 $blogDate=0; 21 22 } 23 }else{ 24 echo '<li>'.get_the_date().' 「'.get_post_type().'」を更新しました'.'</li>'; 25 $intPostNum++; 26 27 } 28 } 29 wp_reset_postdata(); 30}

投稿2018/02/07 01:17

編集2018/02/07 01:18
Lariat

総合スコア23

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問