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

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

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

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

PHP

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

Q&A

解決済

1回答

1157閲覧

wordpress 投稿日が同じ場合と違う場合で処理を分けたい

takayuu

総合スコア5

WordPress

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

PHP

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

0グッド

0クリップ

投稿2019/08/26 04:13

前提・実現したいこと

カスタム投稿タイプで「スケジュール」機能を作成しているのですが、
投稿日(スケジュール日)が同じだった場合に、投稿日は1つだけ表示して個別記事リンクはループで表示させるようにしたいです。
下記のサイトをイメージして頂けるとわかりやすいと思います。

【参考サイト】
http://festive.rizepro.net/schedule/

現在「投稿日」自体は管理画面上から未来分も設定できるようにしてあります。
カスタムフィールドの作成は「Advanced Custom Fields」を使用しています。

該当のソースコード

php

1<?php 2   $this_date = date('Y-m-1'); // 今日の日付を元に今月の月初めを取得 3   $this_year = date('Y', strtotime($this_date)); // 年を取得 4   $this_month = date('m', strtotime($this_date)); // 月を取得 5 6   $args = array( 7            'year' => $this_year, 8            'monthnum' => $this_month, 9            'post_type' => 'schedule', 10           ); 11           $the_query = new WP_Query($args); 12?> 13 14<?php if ( $the_query->have_posts() ) : ?> 15  <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?> 16 17    <?php $post_day = get_the_date('j'); ?> <!-- 投稿記事の「投稿日」を取得 --> 18 19       <?php if ( $post_day == $post_day ) : ?> <!--「投稿日」が同じなら --> 20 21        <li> 22          <p> 23            <span><?php echo $post_day; ?></span><!--「投稿日」 --> 24            <span><?php echo get_post_time('D'); ?></span><!--「投稿日」英語 --> 25          </p> 26          <div> 27            <!-- ここの個別記事リンクをループで表示させたい --> 28             <a href="<?php echo get_permalink(); ?>"> 29               <p ><?php the_title(); ?></p> 30             </a> 31         <!-- ループここまで --> 32          </div> 33        </li> 34 35       <?php else : ?> <!--「投稿日」が違うなら --> 36        37         <li> 38          39           通常のリスト表示 40 41         </li> 42       43       <?php endif; ?> 44 45  <?php endwhile; ?> 46 47<?php wp_reset_postdata(); ?> 48 49<?php endif; ?>

試したこと

if文で分岐させて見たのですがうまく出し分けされませんでした…。
カスタムタイプで新たに「投稿日」を作成してみたりしたのですが、結果は同じでした。
そもそもやり方が違うのか………。

私自身wordpress、phpともに初心者のもので大変見苦しい点が多々あると思いますが
皆様のお力添えのほどよろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

wordpressバージョン 5.2.2

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

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

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

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

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

guest

回答1

0

ベストアンサー

PHP

1<?php if ( $post_day == $post_day ) : ?> <!--「投稿日」が同じなら -->

変数同じにしてしまうとダメですよ。これだと$post_dayには同じタイミングで同じ値しか入らないし、どんな値を入れても真を返すので、elseに分岐することはまずないです。

$post_day = '2019/08/26';
だとすると、**2019/08/26は2019/08/26か?**って問いかけるようなものです。仮に$post_dayが「日本」と代入されても、数字の「47」であっても、真しか返さないです。

比較したい場合は一時データを待避するかセッションなどを使って保持させるようにしないと。

たとえば、

PHP

1$last_post_day = $post_day; //lastは”最終の”という接頭辞

そして、それを$_SESSIONなどで保持し、再度転送された際に$_SESSIONなどから値を受け取り、それを$last_post_dayに代入します。それを用いて

<?php if ( $post_day == $last_post_day ) : ?> <!--「投稿日」が同じなら -->

のように記述するのがセオリーです。

投稿2019/08/26 04:50

編集2019/08/26 08:26
FKM

総合スコア3633

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

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

takayuu

2019/08/26 08:07

<?php session_start();?> <?php $post_day = get_the_date('j'); $last_post_day = $post_day; $_SESSION['post_day'] = $last_post_day; ?> <?php if ( $post_day == $last_post_day ) : ?> 上記のようにやってみたのですがだめでした。 転送された際の判定や代入の処理など、他にも必要でしょうか? 初歩的な質問で本当に申し訳ありません。
FKM

2019/08/26 08:37 編集

$_SESSION['post_day']に格納した日付を、もう一度出力しています? $_SESSIONは少し検索すればすぐ理屈はわかると思いますが、要は預かり所みたいなものです。なので、預かったものは引き取りましょう。 ※さっきの答えだとちょっとおかしい部分があったので修正してます。流れはこんな感じです。 $last_post_day = $_SESSION['post_day']; //保持した前回の値を受け取る $post_day = get_post_day('D') //今回の値を受け取る if($post_day == $last_post_day) //前回の値と比較 $last_post_day = $post_day; //今回の値を退避 $_SESSION['post_day'] = $last_post_day; //値を保持しておく これが基本です。
takayuu

2019/08/26 09:47

ありがとうございました。実装できました! $_SESSIONという変数自体知らなかったのですが、 細かく流れまで教えていただき本当にありがとうございました。 このような質問板?を利用するのも初めてだったので少々不安でしたが 親切にご回答頂きありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問