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で出力するにはどうしたら良いでしょうか。
乱文で分かりにくいかもしれませんが、ご教授していただけると幸いです。
回答1件
あなたの回答
tips
プレビュー