雖然 elementor 有很豐富的表單發送後的處理動作,針對特別情況,例如我們希望把表單資料轉存至自家的 CRM 保存,但你家的 CRM 又有奇怪的規格,又或者需要驗證token,這時就要自訂義表單發送後的處理動作了,以下官方文件中自訂義表單發送後的動作
範例:
post json format
/**
* elementor 自定義表單發送
* elementor action after form submit . webhook example
* @see https://v123.tw/elementor-action-after-form-submit
* @see https://developers.elementor.com/forms-api/
*/
add_action( 'elementor_pro/forms/new_record', function( $record, $ajax_handler ) {
// 這段程式要給哪個表單使用
$form_name = $record->get_form_settings( 'form_name' );
if ( 'contact_us' !== $form_name ) {
return;
}
// 取得所有欄位,看你要幹嘛
$raw_fields = $record->get( 'fields' );
$fields = [];
foreach ( $raw_fields as $id => $field ) {
$fields[ $id ] = $field['value'];
}
// 設置一欄為webhook_url,便可在elementor上修改
$webhook_url = $fields['webhook_url'];
// Post Form (json format)
// https://wordpress.stackexchange.com/a/313036/116304
$response_data = wp_remote_post( $webhook_url, [
'headers' => ['Content-Type' => 'application/json; charset=utf-8'],
'body' => json_encode($fields)
]);
// 測試用,要在 debug console 看
// 目前還沒找到自訂錯誤訊息方法
// $ajax_handler->add_error( 'Form Custom Error:', 'Invalid Ticket ID, it must be in the format XXX-XXXX' );
// print_r($response_data);
// exit;
},10,2);
官方文檔:
https://developers.elementor.com/forms-api/#Form_New_Record_Action