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

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

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

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

PHP

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

Q&A

解決済

1回答

2112閲覧

カスタムフィールドの値を用いて、WordPressにパラメータを渡して検索したい

number08

総合スコア12

WordPress

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

PHP

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

0グッド

0クリップ

投稿2019/05/17 04:56

WordPressの固定ページにて出勤一覧ページを作成しています。
カスタム投稿、カスタムフィールドにて作成した日付をクリックすると、該当日付別の出勤一覧ページを

https://example.jp/schedule/?date=2019-05-15

のように表示させるようにしたいです。


下記、固定ページ(page-schedule.php)と、function.phpのコードになります。

■page-schedule.php

php

1<!-- スケジュールー覧 --> 2<section id="schedule" class="main"> 3 <div class="content"> 4 <div class="castSearch"> 5 <div class="dateSearch search"> 6 <div class="pack"> 7 <ul class="tab tabList"> 8 <li> 9 <a href="/schedule/" class="current"></a> 10 </li> 11 <li> 12 <a href="例)ここをクリックすると https://example.jp/schedule/?date=2019-05-17"></a> 13 </li> 14 <li> 15 <a href="例)ここをクリックすると https://example.jp/schedule/?date=2019-05-18"></a> 16 </li> 17 <li> 18 <a href="例)ここをクリックすると https://example.jp/schedule/?date=2019-05-19"></a> 19 </li> 20 <li> 21 <a href="例)ここをクリックすると https://example.jp/schedule/?date=2019-05-20"></a> 22 </li> 23 <li> 24 <a href="例)ここをクリックすると https://example.jp/schedule/?date=2019-05-21"></a> 25 </li> 26 <li> 27 <a href="例)ここをクリックすると https://example.jp/schedule/?date=2019-05-22"></a> 28 </li> 29 </ul> 30 </div> 31 </div> 32 </div> 33 34 <div class="tab-content"> 35 <div class="anchor"><a href="/cast/">在籍一覧はCASTへ</a> 36 </div> 37 <div class="list-wrap"> 38 <ul id="" class="castList"> 39 <?php 40 $args = array( 'post_type' => 'product', 'paged' => $paged, 'posts_per_page' => -1 ); /* 投稿タイプを指定 */ 41 query_posts( $args ); 42 $dateTime = getTodayYYYYMMDD(); 43 $today = get_date_from_gmt( $dateTime->format( 'Y-m-d H:i:s' ), 'Ymd' ); 44 ?> 45 <?php if (have_posts()) : ?> 46 <?php while (have_posts()) : the_post(); ?> 47 <?php 48 $productName = get_post_meta( $post->ID, 'name', true ); 49 $productImage = get_post_meta( $post->ID, 'product_img1', true ); 50 if ( empty( $productImage ) ) { 51 continue; 52 } 53 // 今日 54 $open_hh = get_post_meta( $post->ID, $today . 'open_hh', true ); 55 $open_mi = get_post_meta( $post->ID, $today . 'open_mi', true ); 56 $close_hh = get_post_meta( $post->ID, $today . 'close_hh', true ); 57 $close_mi = get_post_meta( $post->ID, $today . 'close_mi', true ); 58 if ( empty( $open_hh ) && empty( $open_mi ) && empty( $close_hh ) && empty( $close_mi ) ) { 59 continue; 60 } 61 62 $workTime = ''; 63 if ( !empty( $open_hh ) && !empty( $open_mi ) ) { 64 $workTime = $workTime . $open_hh . ':' . $open_mi; 65 } 66 if ( ( !empty( $open_hh ) && !empty( $open_mi ) ) || ( !empty( $close_hh ) && !empty( $close_mi ) ) ) { 67 $workTime = $workTime . ' ~ '; 68 } 69 if ( !empty( $close_hh ) && !empty( $close_mi ) ) { 70 $workTime = $workTime . $close_hh . ':' . $close_mi; 71 } 72 ?> 73 <!-- cast li --> 74 <li> 75 <a href="<?php the_permalink(); ?>"> 76 <!-- Photo --> 77 <div class="photo"> 78 <div class="castPic"> 79 <?php if(get_post_meta($post->ID,'product_img1',true)) { ?> <img src="<?php echo get_post_meta($post->ID,'product_img1',true); ?>" class="img-responsive panel-img"> 80 <?php }else{ ?> <img src="<?php echo bloginfo('template_url').'/images/no-img.png'; ?>" class="img-responsive panel-img"> 81 <?php } ?> 82 </div> 83 <div class="black_overlay"></div> 84 <?php // icon-new 85 $post_time = get_the_time('U'); 86 $days = 7; //New!を表示させる日数 87 $last = time() - ($days * 24 * 60 * 60); 88 if ($post_time > $last) { 89 echo '<div class="iconBox"><div class="iconWrap"><p class="icon new"><svg><use xlink:href="#icon-new-box"></use></svg></p><p class="fukidashi new">新人</p></div></div>'; 90 } ?> 91 </div> 92 <!-- /Photo --> 93 <!-- Detail --> 94 <div class="pack"> 95 <p class="name"> 96 <?php echo get_post_meta($post->ID/*$post_id*/,'name',true); ?> 97 </p> 98 <p class="comment"> 99 <?php echo get_post_meta($post->ID,'comment',true); ?> 100 </p> 101 <p class="leftLine mb10"></p> 102 <p class="age"> 103 <?php echo get_post_meta($post->ID,'age',true); ?></p> 104 <p class="size"> 105 <?php echo get_post_meta($post->ID,'size',true); ?> 106 </p> 107 <p class="scheduleTime"> 108 <?php echo $workTime; ?> 109 </p> 110 </div> 111 <!-- /Detail --> 112 </a> 113 </li> 114 <!-- /cast li --> 115 <?php endwhile; ?> 116 <?php else : ?> 117 <div class="post"> 118 <h3>キャスト未登録です</h3> 119 <p>表示するキャストがいませんでした。</p> 120 </div> 121 <?php endif; ?> 122 <!-- /cast --> 123 </ul> 124 </div> 125 </div> 126 </div> 127</section>

■function.php

php

1<?php 2//====================================================================================================================================================== 3// 入力項目がどの投稿タイプのページに表示されるのかの設定 4//====================================================================================================================================================== 5function add_custom_inputbox() { 6 add_meta_box( 'work_schedule_id', '出勤スケジュール', 'custom_area9', 'product', 'normal' ); 7} 8 9//====================================================================================================================================================== 10// 管理画面に表示する画面の設定 11//====================================================================================================================================================== 12function custom_area9() { 13 global $post; 14 $weekjp = array( '日', '月', '火', '水', '木', '金', '土' ); 15 $dateTime = getTodayYYYYMMDD(); 16 echo '※24時以降の時間を入力したい場合は、「26:00」といった形式でご入力ください。<br>'; 17 echo '※店舗の開店時間・閉店時間を入力いただいた当日の出f退勤入力はできませんのでご注意ください。<br>'; 18 for ( $i = 0; $i < 31; $i++ ) { 19 $baseDateTime = $dateTime->format( 'Y-m-d H:i:s' ); 20 $workDateFormat = get_date_from_gmt( $baseDateTime, 'Y/m/d' ) . ' (' . $weekjp[ get_date_from_gmt( $baseDateTime, 'w' ) ] . ')'; 21 $workDate = get_date_from_gmt( $baseDateTime, 'Ymd' ); 22 echo $workDateFormat . ' :'; 23 echo '<input type="text" size="2" maxlength="2" pattern="([0-2][0-9]|30)" title="半角数字。入力範囲(00~30)" name="' . $workDate . 'open_hh" value="' . get_post_meta( $post->ID, $workDate . 'open_hh', true ) . '">:<input type="text" size="2" maxlength="2" pattern="([0-5][0-9])" title="半角数字。入力範囲(00~59)" name="' . $workDate . 'open_mi" value="' . get_post_meta( $post->ID, $workDate . 'open_mi', true ) . '">'; 24 echo ' ~ '; 25 echo '<input type="text" size="2" maxlength="2" pattern="([0-3][0-9])" title="半角数字。入力範囲(00~39)" name="' . $workDate . 'close_hh" value="' . get_post_meta( $post->ID, $workDate . 'close_hh', true ) . '">:<input type="text" size="2" maxlength="2" pattern="([0-5][0-9])" title="半角数字。入力範囲(00~59)" name="' . $workDate . 'close_mi" value="' . get_post_meta( $post->ID, $workDate . 'close_mi', true ) . '"><br>'; 26 $dateTime->modify( '1 day' ); 27 } 28} 29// 今日の取得 30function getTodayYYYYMMDD() { 31 $get_page_id = get_page_by_path( "home" ); 32 $get_page_id = $get_page_id->ID; 33 $shopCloseHHMI = get_post_meta( $get_page_id, 'shop_close_hh', true ) . get_post_meta( $get_page_id, 'shop_close_mi', true ); 34 35 $d = new DateTime(); 36 $dateTime = clone $d; 37 $baseDateTime = $dateTime->format( 'Y-m-d H:i:s' ); 38 $now = ( get_date_from_gmt( $baseDateTime, 'H' ) + 24 ) . get_date_from_gmt( $baseDateTime, 'i' ); 39 if ( intval( $now ) <= intval( $shopCloseHHMI ) ) { 40 $dateTime = clone $d; 41 $dateTime->modify( '-1 day' ); 42 $baseDateTime = $dateTime->format( 'Y-m-d H:i:s' ); 43 } 44 return $dateTime; 45} 46 47//====================================================================================================================================================== 48// データ保存の設定 49//====================================================================================================================================================== 50// 保存メソッド 51function doSave( $post_id, $data_name ) { 52 $data = ''; 53 if ( isset( $_POST[ $data_name ] ) ) { 54 $data = $_POST[ $data_name ]; 55 } else { 56 $data = ''; 57 } 58 //-1になると項目が変わったことになるので、項目を更新する 59 if ( $data != get_post_meta( $post_id, $data_name, true ) ) { 60 update_post_meta( $post_id, $data_name, $data ); 61 } elseif ( $data == "" ) { 62 delete_post_meta( $post_id, $data_name, get_post_meta( $post_id, $data_name, true ) ); 63 } 64} 65 66function save_custom_postdata( $post_id ) { 67 /* 出勤スケジュール 68 -------------------------*/ 69 doSave( $post_id, 'shop_name' ); 70 doSave( $post_id, 'access' ); 71 doSave( $post_id, 'open_hh' ); 72 doSave( $post_id, 'open_mi' ); 73 doSave( $post_id, 'close_hh' ); 74 doSave( $post_id, 'close_mi' ); 75 doSave( $post_id, 'tel' ); 76 doSave( $post_id, 'web_reservation' ); 77 doSave( $post_id, 'map' ); 78 for ( $i = 1; $i <= 5; $i++ ) { 79 // キャスト画像 80 if ( isset( $_POST[ 'product_img' . $i ] ) ) { 81 $product_img[ $i ] = $_POST[ 'product_img' . $i ]; 82 } else { 83 $product_img[ $i ] = ''; 84 } 85 if ( $product_img[ $i ] != get_post_meta( $post_id, 'product_img' . $i, true ) ) { 86 update_post_meta( $post_id, 'product_img' . $i, $product_img[ $i ] ); 87 } elseif ( $product_img[ $i ] == '' ) { 88 delete_post_meta( $post_id, 'product_img' . $i, get_post_meta( $post_id, 'product_img' . $i, true ) ); 89 } 90 } 91 92 $dateTime = new DateTime(); 93 for ( $i = 0; $i < 31; $i++ ) { 94 $baseDateTime = $dateTime->format( 'Y-m-d H:i:s' ); 95 $workDate = get_date_from_gmt( $baseDateTime, 'Ymd' ); 96 doSave( $post_id, $workDate . 'open_hh' ); 97 doSave( $post_id, $workDate . 'open_mi' ); 98 doSave( $post_id, $workDate . 'close_hh' ); 99 doSave( $post_id, $workDate . 'close_mi' ); 100 $dateTime->modify( '1 day' ); 101 } 102}

こちらを元に冒頭で既述したような形のURLで出力するにはどうしたら良いでしょうか。
乱文で分かりにくいかもしれませんが、ご教授していただけると幸いです。

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

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

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

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

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

yukikp

2019/05/17 05:32

細かい回答ではないですが、方針として、$_GET['date']で日付を取得して、meta_queryでキャスト一覧を取得すればよいのではないでしょうか?
number08

2019/05/17 08:53

ご回答ありがとうございます。 当方、未熟でして仕組は理解しているのですが、細かいところを表現できないでいます。 ご教授願えれば幸いです。
yukikp

2019/05/18 00:54

あれ?回答されている方がいますが、 「こちらを元に冒頭で既述したような形のURLで出力するにはどうしたら良いでしょうか。」 と言うのは、 「その日付形式のURLを出力するにはどうしたら良いか」という意味でしたか? 「そのURLの形式から日付を取得して、該当する出勤日のキャスト一覧を出力する」という意味だと思ってました。
guest

回答1

0

ベストアンサー

https://example.jp/schedule/?date=2019-05-15
のように表示させるようにしたいです。

こちらを元に冒頭で既述したような形のURLで出力するにはどうしたら良いでしょうか。

日付パラメータ付きのリンク先 URL を 動的に作成したいと解釈しました。


WordPress の前提として、

home_url() で、WordPress の URL が、取得可能です。
日付の取得は、date_i18n() を使って取得します。
日付のフォーマットは、日付と時刻の書式 で指定します。


date_i18n()に 日付フォーマットだけを指定すると 今日の日付が指定されたフォーマットで出力されます。

今日: date_i18n('Y-m-d'); ==> 2019-05-17

特定の日付を求める場合は、第2パラメータ( Unix タイムスタンプ )を設定します。

具体的な条件がわかりませんが、たとえば、今日から○日間の日付を求めたいのであれば、 time() で取得される今日の日時を元に必要な秒数を加減算して、求めたい日付を算出して、第2パラメータに設定して取得します。

今日 : date_i18n('Y-m-d', time() ); ==> 2019-05-17
明日 : date_i18n('Y-m-d', time() + 1 * 24 * 60 * 60 ); ==> 2019-05-18
明後日: date_i18n('Y-m-d', time() + 2 * 24 * 60 * 60 ); ==> 2019-05-19

これらを組み合わせて、

php

1 2<?php echo esc_url( home_url( '/schedule/' ) . '?date=' . date_i18n('Y-m-d') ); ?> 3 4<?php echo esc_url( home_url( '/schedule/' ) . '?date=' . date_i18n('Y-m-d', time() + 1 * 24 * 60 * 60 ) ); ?> 5 6(以下略)

のように URL を生成できると思います。

投稿2019/05/17 06:20

CHERRY

総合スコア25171

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問