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

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

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

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

PHP

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

タブ

コンテンツの上下左右に参照用のメニューを設けることで、複数の要素やページの表示を可能にするユーザーインターフェイスパターンのこと。メニューをクリックすると、一つの要素が可視化され、他の要素は見えなくなる。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

1084閲覧

【WP】現在と比較して過去と未来のイベント記事をタブで出し分けたい。

koinu

総合スコア6

WordPress

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

PHP

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

タブ

コンテンツの上下左右に参照用のメニューを設けることで、複数の要素やページの表示を可能にするユーザーインターフェイスパターンのこと。メニューをクリックすると、一つの要素が可視化され、他の要素は見えなくなる。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

1グッド

1クリップ

投稿2020/03/12 06:08

前提

カスタム投稿 "live" のカスタムフィールド "event-date" へ開催日を入力しています。
なお、"event-date"のフィールドタイプは"デイトピッカー"です。

初めは日付と比較して記事毎にラベルを貼って対応しておりましたが、タブで切り替える方法ができないかと色々調べた結果自分の知識不足で実装できませんでしたのでご質問させていただいております。

お力を貸していただきたいです。
どうぞよろしくお願いします。

やりたいこと

カスタムフィールド"event-date"に入力された日付を元に現在の日付と比較してアーカイブページで

Up coming ➡ 開催日前のイベント一覧
Past ➡ 終了したイベント一覧

のように"タブ"で切り替えて表示したいです。

現状

php

1<ul class="archive"> 2 3<?php $args = array( 4'numberposts' => -1, 5'post_type' => 'live' 6); 7$posts = get_posts( $args ); 8if( $posts ) : foreach( $posts as $post ) : setup_postdata( $post ); 9?> 10 11<li> 12 13<?php 14date_default_timezone_set('Asia/Tokyo'); 15$today = date("Ymd"); 16$to = intval($today); 17$date_start = get_field('event-date', false, false); 18$y1 = substr($date_start,0,4); 19$m1 = substr($date_start,4,2); 20$d1 = substr($date_start,6,2); 21$start_app = $y1.$m1.$d1; 22$sa = intval($start_app); 23?> 24 25<?php if ($sa > $to):?> 26<div class="upcoming">Up coming!</div> 27 28<?php elseif($to > $start_app) : ?> 29<div class="past">Past</div> 30 31<?php endif; ?> 32 33<div class="live_info"> 34<div class="inner"> 35<?php 36if ($terms = get_the_terms($post->ID, 'live-tag')) { 37foreach ( $terms as $term ) { 38echo '<span class="tag">',esc_html($term->name),'</span>'; 39} 40} 41?> 42 43<h3 class="media_title"><a href="<?php the_permalink();?>"><?php the_title_attribute(); ?></a></h3> 44<span class="term_tag inner"><?php the_field('live_venue'); ?></span> 45<div class="date"> 46<?php 47$date = get_field('event-date', false, false); 48$date = new DateTime($date);{ 49echo $date->format('Y.n.j D'); 50} 51?> 52</div> 53</div> 54</div> 55 56</li> 57 58<?php endforeach; ?> 59<?php else : ?> 60<li><p>ライブ情報が見つかりませんでした。</p></li> 61<?php endif; 62wp_reset_postdata(); ?> 63 64</ul>

試したこと

<input id="all" type="radio" name="tab_item" checked> <label class="tab_item" for="all">Up coming!</label> <input id="programming" type="radio" name="tab_item"> <label class="tab_item" for="programming">Past</label> <?php date_default_timezone_set('Asia/Tokyo'); $today = date("Ymd"); $to = intval($today); $date_start = get_field('event-date', false, false); $y1 = substr($date_start,0,4); $m1 = substr($date_start,4,2); $d1 = substr($date_start,6,2); $start_app = $y1.$m1.$d1; $sa = intval($start_app); ?> <?php if ($sa > $to):?> <div class="tab_content" id="programming_content"> ループ内容(上記で記述した内容と重複する為省略させていただきます。) </div> <?php elseif($to > $start_app) : ?> <div class="tab_content" id="programming_content"> ループ内容(上記で記述した内容と重複する為省略させていただきます。) </div> <?php endif; ?>

CSSのみでタブを切り替える方法をためしました。
こちらで実装できないかと思ったのですが、やはりできず記事の情報が表示されませんでした。

css

1.tab_item { 2 width: calc(100%/2); 3 height: 40px; 4 background-color: #f5f5f5; 5 line-height: 40px; 6 font-size: 1.2em; 7 text-align: center; 8 color: #565656; 9 display: block; 10 float: left; 11 text-align: center; 12 transition: all 0.2s ease; 13} 14.tab_item:hover { 15 opacity: 0.75; 16} 17 18input[name="tab_item"] { 19 display: none; 20} 21 22.tab_content { 23 display: none; 24 padding: 2em 0 0; 25 clear: both; 26 overflow: hidden; 27} 28 29#all:checked ~ #all_content, 30#programming:checked ~ #programming_content, 31#design:checked ~ #design_content { 32 display: block; 33} 34 35.tabs input:checked + .tab_item { 36 background-color: #25c6da; 37 color: #fff; 38}
s.k👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

最初に取得したpostsを2つに分けて、それぞれでループすればできると思います。
2種類に分けるif文とタブ表示のスタイルは質問内容そのままなので、必要であれば調整してください。
全件取得しているので、データ量が多くなると重くなりますのでご注意ください。

PHP

1<?php 2$tabs= []; 3 4$args = array( 5 'numberposts' => -1, 6 'post_type' => 'live' 7); 8$posts = get_posts($args); 9 10foreach($posts as $post) { 11 ... 12 if ($sa > $to) { 13 $tabs[0][] = $post; 14 } else { 15 if($to > $start_app) { 16 $tabs[1][] = $post; 17 } 18 } 19} 20?> 21 22<?php foreach ($tabs as $tab): ?> 23 <div class="tab_content" id="programming_content"> 24 <ul> 25 <?php foreach ($tab as $post): ?> 26 <li> 27 ... 28 </li> 29 <?php endforeach; ?> 30 </ul> 31 </div> 32<?php endforeach; ?>

投稿2020/03/12 07:36

tabuu

総合スコア2480

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

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

koinu

2020/03/16 03:45

ベストアンサーにした後で申し訳ございません。 こちらの書き方が悪いのかもしれないですが、カスタムフィールドの日付を変更して未来の値にしてもPastのほうに表示されてしまいます… <?php … foreach($posts as $post) { date_default_timezone_set('Asia/Tokyo'); $today = date("Ymd"); $to = intval($today); $date_start = get_field('event-date', false, false); $y1 = substr($date_start,0,4); $m1 = substr($date_start,4,2); $d1 = substr($date_start,6,2); $start_app = $y1.$m1.$d1; $sa = intval($start_app); if ($sa > $to) { $tabs[0][] = $post; } else { if($to > $start_app) { $tabs[1][] = $post; } } } ?> 後半部分はこの書き方で問題ないでしょうか?
tabuu

2020/03/16 04:55

こちらではどのようなデータが登録されているか確認のしようがありませんので、 if文でチェックしている各変数($sa、$to、$start_appなど)の値が想定通りがご確認いただけないでしょうか。 念のためキャッシュされているページが表示されていないかもご確認ください。
koinu

2020/03/16 05:18

echoで出力してみたところ、$toで今日の日付、$sa、$start_appでカスタムフィールドに入力した値がハイフンなしで出力できました。 echo $sa > $to , $to > $sa; ではどちらも1と出力されました。 キャッシュについても何度か消してみたのですが表示は変わりませんでした。
tabuu

2020/03/16 06:42

> echo $sa > $to , $to > $sa; > ではどちらも1と出力されました。 不等号の向きを逆にして結果が同一ということはあり得ないと思います。 データの型も含めてご確認いただけないでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問