acf とMW Form 連携のまとめ(予約関連)

情報を追記している場合はありますが、古い情報を訂正はしていませんので、公開年月日を参照してください。プラグイン・タグ、いずれもワードプレス・PHPのバージョン等によって動作しない場合もあります。

2023年末追記
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'];~

のようになります。Advanced Custom Fields とContact Form 7連携

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 に関する記事一覧

Advanced Custom Fields に関する記事一覧ページへ