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

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

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

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

PHP

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

Q&A

1回答

1100閲覧

contact form7で独自コード作成

AMK

総合スコア765

WordPress

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

PHP

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

0グッド

0クリップ

投稿2021/11/28 14:02

編集2021/12/04 12:55

##やりたい事
コンタクトフォーム7で
[list_date not_week=0,2 start_day=2 end_day=60]
上記のようなショートコードを作成して日付のリストボックスを作成したい
##作成途中のコード

php

1// 日付をセレクトボックスに変換してショートコード化 2 3wpcf7_add_form_tag( 'list_date', 'list_date' ,true ); 4wpcf7_add_form_tag( 'list_date*', 'list_date' ,true ); 5function list_date($tag){ 6 //オプション項目読み込み 7 $t = new WPCF7_Shortcode( $tag ); 8 $start_day = $t->get_option('start_day', 'int', true ); 9 $end_day = $t->get_option( 'end_day', 'int', true ); 10 $not_week = explode(",", $t->get_option( ', 'string', true )); 11 //$not_week = $t->get_option( 'not_week', 'string', true ); 12 13 //デフォルト値判定 14 if($start_day===false)$start_day=5; 15 if($end_day===false)$end_day=30; 16 if($not_week===false)$not_week=array(0,); 17 18//曜日を日本語にする準備変数 19 $week = [ 20 '', //0 21 '', //1 22 '', //2 23 '', //3 24 '', //4 25 '', //5 26 '', //6 27 ]; 28//日付設定 29 date_default_timezone_set('Asia/Tokyo'); 30 $year = date('Y'); 31 $month = date('n'); 32 $day = date('j'); 33//日付ループ 34 for ($i=$start_day; $i<$end_day; $i++){ 35 #曜日抽出 36 $date = date('w', mktime(0, 0, 0, $month, $day + $i, $year)); 37 if(in_array($date, $not_week)) { 38 //何もしない 39 } 40 else{ 41 $tags2[]=date("Y年 m月 d日"."(".$week[$date].")", mktime(0, 0, 0, $month, $day + $i, $year)); 42 } 43 } 44 $html = '<style>select option[value*="土"] {background: aqua;}</style>'; 45 $html .='<span class="wpcf7-form-control-wrap '.esc_attr($tag['name']).'">'; 46 $html .= '<select class="list_date" name="list_date"><option value="">ご予約希望日を選択</option>'; 47 foreach( $tags2 as $tag2 ) { 48 $html .= '<option value="'.$tag2.'">'.$tag2.'</option>'; 49 } 50 $html .= '</select></span>'; 51 return $html; 52 } 53 // バリデート 54add_filter( 'list_date*', 'list_date_validation', 10, 2 ); 55function list_date_validation( $result, $tag ) { 56 $type = $tag['type']; 57 $name = $tag['name']; 58 if($type=='from_birth_year' || $type=='from_birth_year*'){ 59 $year =isset($_POST[$name])?trim($_POST[$name]):''; 60 if (!$year) { 61 if (method_exists($result, 'invalidate')) { 62 $result->invalidate($tag,'入力必須の項目が入力されていません。');//エラーメッセージ 63 }else{ 64 $result['valid'] = false; 65 $result['reason'] = array($name=>'入力必須の項目が入力されていません。');//エラーメッセージ 66 } 67 } 68 } 69 return $result; 70}

##知りたい事
参考サイト
上記参考サイトを参考に試行錯誤してここまで作成したがどうしても解らないので質問させて頂きました。

<問題点>
1.オプションの値を読み込ませたいが読み込まない
2.バリデーションチェック機能も入れたが動作せず、エラーが出ずそのまま進んでしまう
##進捗状況
[list_date not_week=0,2 start_day=2 end_day=60]
から
[list_date list_date start_day:2 end_day:60]
に変更して、start_dayとend_dayの値は読み込めたが

下記にすると
[list_date not_week:0,2 start_day:2 end_day:60]
start_dayとend_dayが読み込まなくなる
not_weekの入れるの指定の仕方にもんだいがあるのかも?

>>12/3日追記
文字列から配列で受け取るというアドバイスを頂いたので
検索してexplode関数を見つけたので
$not_week = explode(",", $t->get_option( ', 'string', true ));
としてみたが、動作せずでした
##完全に行き詰ったので、有料での回答をお待ちしております。
https://www.lancers.jp/work/detail/3868797

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

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

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

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

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

guest

回答1

0

not_weekは0と2の配列ということであればショートコード内では文字列として受け取って、
配列に変換する必要があると思います。

投稿2021/11/28 23:54

tabuu

総合スコア2480

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

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

AMK

2021/12/03 07:56

返信遅くなり申し訳ないです 検索してexplode関数を見つけたので $not_week = explode(",", $t->get_option( ', 'string', true )); としてみたが、動作せずでした
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問