情報を追記している場合はありますが、古い情報を訂正はしていませんので、公開年月日を参照してください。プラグイン・タグ、いずれもワードプレス・PHPのバージョン等によって動作しない場合もあります。
MW Form は開発終了となりましたので、Contact Form 7 が推奨となります。Contact Form 7 で送信内容を取得するコードは
$submission = WPCF7_Submission::get_instance();
if ( $submission) {
$formdata = $submission->get_posted_data();
if ($formdata['date']) {
$id = $formdata['postid'];~
MW Form とAdvanced Custom Fieldsで連携してデータを更新する関数等について、バラバラと書いてきたので、少しまとめたいと思います。今後も追記の予定。
MW Form での送信時にacf の値を更新する基本形
function my_mwform_after_send( $Data ) {
if ( $Data->get_form_key() === 'mw-wp-form-xx' ) {
$id = $Data->get( 'id' );
$seat = get_field('seats', $id);
$select = (int) $_POST['select'];
$addition = $seat + $select;
update_field('seats', $addition, $id);
$available = get_field('available', $id);
$minus = $available - $count;
update_field('available', $minus, $id);
}
}
add_action( 'mwform_after_send_mw-wp-form-xx', 'my_mwform_after_send' );
更新する投稿のIDを取得 $id = $Data->get( ‘id’ ); 、投稿からフォームページに遷移する場合は $id = $_GET[‘post_id’];
フィールドのアップデート update_field(‘フィールド名’, ‘値’, $id); *上の例は予約数をプラス・残数をマイナス
サブフィールドのアップデート update_sub_field( array(‘リピーターのキー’, 1, ‘サブフィールドのキー’), ‘値’, $post_id); *リピーター1行目のサブフィールドを更新
入れ子になったサブフィールドのアップデート update_sub_field( array(‘外側のリピーターのキー’, 3, ‘内側のリピーターのキー’, 5, ‘更新したいサブフィールドのキー’), ‘値’, $post_id); *外側のリピーター3行目・内側のリピーター5行目のサブフィールドを更新
イベントカレンダー対策で予約数・残数のアップデート時にタイトルもアップデートしたい場合の例
$id = $Data->get( 'id' );
$seat = get_field('seats', $id);
$select = (int) $_POST['select'];
$addition = $seat + $select;
update_field('seats', $addition, $id);
$available = get_field('available', $id);
$minus = $available - $select;
update_field('available', $minus, $id);
$etitle = get_field('eventtitle', $id);
$available2 = get_field('available', $id);
$post = get_post($id);
$post = array(
'post_title' => $etitle.' (残席:'.$available2.')',
);
wp_update_post( $post );
サブフィールドのアップデートについての追記
表示側でget_row_index()で行数を取得・メールにつけて送信する。
*カスタムフィールドの値はMW Form で直接取得できるが、それ以外はパラメータで送って、以下のようにしてフィールドに入れる。
外側のリピーターのループで $rows = get_rows_index(); 内側のリピーターのループで $subrows = get_row_index();
function my_mwform_value( $value, $name ) {
if ( $name === 'date' ) { return $_GET['date']; }
if ( $name === 'rows' ) { return $_GET['rows']; }
if ( $name === 'subrows' ) { return $_GET['subrows']; }
return $value;
}
add_filter( 'mwform_value_mw-wp-form-xxx', 'my_mwform_value', 10, 2 );
*実際は$_GET[‘date’]; に if をつけるべき
その他のAdvanced Custom Fields に関する記事一覧
- ACF Blocks VS ショートコード
- CF7 デートピッカーに休業日を設定
- スラッグ設定の関数
- ACF エディターの自動整形を止める
- カレンダー表示の日時予約サンプル
- ACF リピーターをカレンダーに出力するコードの解説の続き
- acf サブフィールドの合計を親フィールドに入れる
- ACF リピーターをカレンダーに出力するコードの解説など
- ブロックエディターでブロックを制限する
- ACF リピーターをカレンダーに出力するコード
- ACF 指定した年月のデータを一気にサブフィールドに入れる
- ワードプレスの最強ツール
- トップページのよくある要望
- ランダムな複数開催日のイベントをカレンダーに
- qtranslate の投稿を言語ごとに分ける
- ブロックエディターを一部オフに
- wpcf7_add_form_tag フィールドの出し分け
- お知らせのリンク先
- ACF リピーターとモーダルウィンドウ
- カレンダーの祝日データ