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

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

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

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

PHP

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

Q&A

0回答

1470閲覧

wordpress カレンダーでカスタムフィールド日付の取得ができない

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

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

PHP

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

0グッド

0クリップ

投稿2021/06/02 02:14

編集2021/06/03 12:01

前提・実現したいこと

wordpressカスタム投稿を使い、カレンダーを作成しています。
カレンダーは表示することはできましたが、カレンダー上にカスタムフィールドの日付が反映されません。
single-event.php などのページにはカスタムフィールドの日付はYYYY年MM月DD日という形式で出力できます。

カスタム投稿「event」
Advanced Custom Fields でイベントの日付「edate」(デイトピッカー)

該当のソースコード

functions.php

//「イベント」カレンダー function my_event_calendar($year = "", $monthかか "", $eventArray) { if(empty($year) && empty($month)) { $year = date("Y"); $month = date("n"); } //月末の取得 $l_day = date("j", mktime(0, 0, 0, $month + 1, 0, $year)); $aday = array("日", "月", "火", "水", "木", "金", "土"); //初期出力 $tmp = <<<EOM <table id="wp-calendar"> <caption>{$year}年{$month}月</caption> <thead> <tr> <th class="sun">日</th> <th>月</th> <th>火</th> <th>水</th> <th>木</th> <th>金</th> <th class="sat">土</th> </tr>\n </thead> EOM; $lc = 0; //月末分繰り返す for ($i = 1; $i < $l_day + 1;$i++) { //曜日の取得 $week = date("w", mktime(0, 0, 0, $month, $i, $year)); if($i<10){ $holinum = $year.'-'.$month.'-0'.$i; }else{ $holinum = $year.'-'.$month.'-'.$i; } $holiday = agv($holidays, $holinum); //曜日が日曜日の場合 if ($week == 0) { $tmp .= "\t<tr>\n"; $lc++; } //1日の場合 if ($i == 1) { if($week != 0) { $tmp .= "\t<tr>\n"; $lc++; } $tmp .= repeat($week); } if ($i == date("j") && $year == date("Y") && $month == date("n")) { //現在の日付の場合 $tmp .= "\t\t".'<td class="today">'.$i; if($holiday){$tmp .= '<span class="holiday">'.$holiday.'</span>';} if($i<10){$day = "0".$i."日";}else{$day = $i."日";} if (isset($eventArray[$day])) { foreach ($eventArray[$day] as $eventArrayData) { $eln = explode("\t", $eventArrayData); if ($eln[0] == $day) { $tmp .= '<div class="econtent"><a href="' . $eln[2] . '">' . $eln[3] . '</a></div>'; } } } $tmp .= "</td>\n"; } else { //現在の日付ではない場合 $tmp .= "\t\t"; if($holiday){$tmp .= '<td class="holiday">'.$i; }elseif($week == '0'){$tmp .= '<td class="sun">'.$i; }elseif($week == '6'){$tmp .= '<td class="sat">'.$i; }else{$tmp .= '<td>'.$i;} if($i<10){$day = "0".$i."日";}else{$day = $i."日";} if (isset($eventArray[$day])) { foreach ($eventArray[$day] as $eventArrayData) { $eln = explode("\t", $eventArrayData); if ($eln[0] == $day) { $tmp .= '<div class="econtent"><a href="' . $eln[2] . '">' . $eln[3] . '</a></div>'; } } } $tmp .= "</td>\n"; } //月末の場合 if ($i == $l_day) { $tmp .= repeat(6 - $week); } //土曜日の場合 if($week == 6) { $tmp .= "\t</tr>\n"; } } if($lc < 6) { $tmp .= "\t<tr>\n"; $tmp .= repeat(7); $tmp .= "\t</tr>\n"; } if($lc == 4) { $tmp .= "\t<tr>\n"; $tmp .= repeat(7); $tmp .= "\t</tr>\n"; } $tmp .= "</table>\n"; return $tmp; } function repeat($n) { return str_repeat("\t\t<td> </td>\n", $n); } function agv($array, $key, $default = NULL) { return isset($array[$key]) ? $array[$key]: $default; }

カレンダー出力ページ

<?php //'event'というカスタム投稿タイプ呼び出し $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $getY = agv($_GET, 'ey'); $getM = agv($_GET, 'em'); if($getY && $getM){ $min = $_GET['ey'].$_GET['em']."01"; $max = $_GET['ey'].$_GET['em']."31"; }else{ $min = date('Ym01'); $max = date('Ym31'); } $wp_query = new WP_Query( array( 'post_type' => 'event', 'posts_per_page' => -1, 'paged' => $paged, 'post_status' => 'publish', 'order'=>'ASC' ) ); $eventArray = array(); ?> <?php if (have_posts()) : while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?> <?php //イベントスケジュールを配列に格納 $eventID = get_permalink(); $eventTitle = get_the_title(); $eventDate = get_post_meta($post->ID,'edate',TRUE); //イベントの日付 $eventCategory = get_post_meta($post->ID,'event_category',TRUE);//カテゴリー preg_match('/\d{2}$/' , $eventDate , $matchDate); $eventData = $matchDate[0]."\t".$eventTitle."\t".$eventID."\t".$eventCat."\t"; array_unshift($eventArray, $eventData); ?> <?php endwhile; ?> <?php endif; ?> <?php $getY = agv($_GET, 'ey'); $getM = agv($_GET, 'em'); if($getY && $getM){ $nowYear = $_GET['ey']; $nowMon = $_GET['em']; }else{ $nowYear = date('Y'); $nowMon = date('m'); } $next = strtotime(date("Ymd",strtotime($nowYear.$nowMon."01"))."+1 month"); $next = date("Ymd",$next); $prev = strtotime(date("Ymd",strtotime($nowYear.$nowMon."01"))."-1 month"); $prev = date("Ymd",$prev); echo '<p class="nextback">'; echo '<a href="?ey='.substr($prev,0,4).'&amp;em='.substr($prev,-4,2).'">&lt;&lt; '.substr($prev,0,4).'年'.substr($prev,-4,2).'月</a>'; echo '|'; echo '<a href="?ey='.substr($next,0,4).'&amp;em='.substr($next,-4,2).'">'.substr($next,0,4).'年'.substr($next,-4,2).'月 &gt;&gt;</a>'; echo '</p>'; echo my_event_calendar($nowYear,$nowMon,$eventArray); ?>

試したこと

カスタムフィールドの日付の設定
日付の表示フォーマット「Y年m月d日」
返り値のフォーマット「Y年m月d日」や「Ymd」など

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

wordpress 5.7.2
Advanced Custom Fields 5.9.5

どうかお力を貸していただけると嬉しいです。
よろしくお願いいたします。

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

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

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

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

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

dameo

2021/06/03 04:09

よく分かりませんが、単純にAdvanced Custom Fieldsでカスタムフィールドの値を取り出す事は出来ますか? https://www.advancedcustomfields.com/resources/date-picker/ いろいろ話を混ぜずに、ACF単品の話だけにした方がいいと思います。デフォルトのテーマにACFだけインストールし、1つだけカスタムフィールドを追加し、それをどう表示するかに絞った質問にすれば回答が付きそうな気がします。
退会済みユーザー

退会済みユーザー

2021/06/03 09:55

ご指摘ありがとうございます。 カスタムフィールドの日付がカレンダーに取得できない点のみに絞った内容に変更しましたので、よろしくお願いいたします。
dameo

2021/06/03 10:37

言ってることが伝わってるようにも表示出来てるようにも見えませんね。 例えば以下のようにするとデイトピッカーで編集できるカスタムフィールドが追加され、投稿に表示できます。 (1)5.7.2をクリーンインストール (2)Advanced Custom Fieldsインストール (3)カスタムフィールドのフィールドグループ「テストグループ」追加 (4)テストグループにフィールド「日付」追加 ラベル: イベント日付 フィールド名: event_date フィールドタイプ: デイトピッカー 表示フォーマット: Custom: Y/m/d 返り値のフォーマット: Ymd (5)フィールドグループを公開 (6)新規投稿 タイトル: ほげ 文章: ほげほげ イベント日付: 2021/06/03 (7)公開 (8)外観>テーマエディタからテーマ「TwentyTwentyOne」のファイルtemplate-parts/content/content-single.phpを修正(選択したテーマごとに方法は違う) 【編集前】 the_content(); 【編集後】 echo '<p>'.get_field('event_date').'</p>'; the_content(); →記事本文の直前にYYYYMMDD形式でカスタムフィールドの日付が入る これをあなたのテーマやその他のカスタマイズを含む環境でどう適用するかはあなたの問題ですが、上記で分からないことがあるなら、質問できますよ、という話です。
dameo

2021/06/03 12:26

カスタマイズがなければできるのかどうかが分からないということ カスタマイズの詳細の説明がなければ、可能不可能の判断が出来ず、こういう場で質問するならば、出来ない点を絞った上で、最低限のカスタマイズを加えた環境で現象を再現し、その解決方法を問うのでなければ無意味であること を理解してほしかったですね。 説明は大雑把でもいいのですが、全く同じにできる環境は必要です。 またプラグインを作成する方からすれば用意したAPIも使わずに、不明瞭で拙いカスタマイズをしたコードでの実現手段を聞かれても困ると思いますよ。 すみませんが、話が通じないと感じたので、私は失礼させてもらいます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問