Last active
June 13, 2022 22:45
-
-
Save hawkidoki/a3c09a7e8e827202f4efb343d73ff1a3 to your computer and use it in GitHub Desktop.
Article: https://hwk.fr/blog/acf-creer-un-formulaire-de-connexion-inscription-en-ajax-grace-acf-form
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* ACF Form: Deregister ACF style | |
*/ | |
add_action('wp_print_styles', 'hwk_acf_form_deregister_styles', 99); | |
function hwk_acf_form_deregister_styles(){ | |
wp_deregister_style('acf'); | |
wp_deregister_style('acf-field-group'); | |
wp_deregister_style('acf-global'); | |
wp_deregister_style('acf-input'); | |
} | |
/** | |
* ACF Form: Elements Class | |
*/ | |
add_filter('acf/load_field', 'hwk_acf_form_field_class'); | |
function hwk_acf_form_field_class($field){ | |
if(is_admin() || wp_doing_ajax()) | |
return $field; | |
$field['wrapper']['class'] .= ' col-12 form-group'; | |
if($field['type'] != 'checkbox') | |
$field['class'] .= ' form-control'; | |
return $field; | |
} | |
/** | |
* ACF Form: Default form args | |
*/ | |
add_filter('acf/validate_form', 'hwk_acf_form_args'); | |
function hwk_acf_form_args($args){ | |
if(is_admin() || wp_doing_ajax()) | |
return $args; | |
if(!$args['html_before_fields']) | |
$args['html_before_fields'] = '<div class="row">'; | |
if(!$args['html_after_fields']) | |
$args['html_after_fields'] = '</div>'; | |
if($args['html_updated_message'] == '<div id="message" class="updated"><p>%s</p></div>') | |
$args['html_updated_message'] = '<div class="alert alert-success">%s</div>'; | |
if($args['html_submit_button'] == '<input type="submit" class="acf-button button button-primary button-large" value="%s" />') | |
$args['html_submit_button'] = '<input type="submit" class="acf-button button btn btn-primary btn-lg" value="%s" />'; | |
// Set default Uploader to default | |
$args['uploader'] = 'basic'; | |
return $args; | |
} | |
/** | |
* ACF Form: Elements Required Class | |
*/ | |
add_filter('acf/get_field_label', 'hwk_acf_form_label', 10, 2); | |
function hwk_acf_form_label($label, $field){ | |
if(is_admin() || wp_doing_ajax()) | |
return $label; | |
$label = str_replace('class="acf-required"', 'class="acf-required text-danger"', $label); | |
return $label; | |
} | |
/** | |
* ACF Form: Allow Post ID to be null | |
*/ | |
add_filter('acf/validate_post_id', 'hwk_acf_form_post_id_null', 10, 2); | |
function hwk_acf_form_post_id_null($post_id, $old_post_id){ | |
if($old_post_id === null) | |
return false; | |
return $post_id; | |
} | |
/** | |
* ACF Form: Set Screen | |
*/ | |
add_action('acf/form_data', 'hwk_acf_form_screen'); | |
function hwk_acf_form_screen($data){ | |
if(!isset($data['form'])) | |
return; | |
$form = json_decode(acf_decrypt($data['form']), true); | |
if(!isset($form['screen'])) | |
return; | |
acf_hidden_input(array( | |
'id' => 'screen', | |
'name' => 'screen', | |
'value' => $form['screen'] | |
)); | |
} | |
/** | |
* ACF Form: Helper – Get Screen | |
*/ | |
function hwk_acf_form_get_screen(){ | |
if(isset($_POST['screen']) && !empty($_POST['screen'])) | |
return $_POST['screen']; | |
return false; | |
} | |
/** | |
* ACF Form: Helper – Unset Screen | |
*/ | |
function hwk_acf_form_unset_screen(){ | |
if(isset($_POST['screen']) && !empty($_POST['screen'])) | |
unset($_POST['screen']); | |
return; | |
} | |
/** | |
* ACF Form: Helper – Get Form | |
*/ | |
function hwk_acf_form_get_form($form = false){ | |
if(!$form) | |
$form = $_POST['_acf_form']; | |
if(!$form) | |
return false; | |
// AF Form | |
if(function_exists('af_get_form') && isset($_POST['af_form']) && !empty($_POST['af_form'])) | |
return af_get_form($_POST['af_form']); | |
// ACF Form | |
$form = json_decode(acf_decrypt($form), true); | |
if(!$form || empty($form) || !is_array($form)) | |
return false; | |
return $form; | |
} | |
/** | |
* ACF Form: Helper – Get Data | |
*/ | |
function hwk_acf_form_get_data($acf = false){ | |
if(!$acf) | |
$acf = $_POST['acf']; | |
if(!$acf) | |
return false; | |
$data = array(); | |
foreach($acf as $key => $value){ | |
$input = acf_get_field($key); | |
if(!isset($input['name'])) | |
continue; | |
if($input['type'] == 'group'){ | |
foreach($input['sub_fields'] as $sub_field){ | |
$data['input'][$input['name']][$sub_field['name']] = $value[$sub_field['key']]; | |
$data['key'][$input['name']][$sub_field['name']] = 'acf[' . $input['key'] . '][' . $sub_field['key'] .']'; | |
} | |
continue; | |
} | |
$data['input'][$input['name']] = $value; | |
$data['key'][$input['name']] = 'acf[' . $key .']'; | |
} | |
if(empty($data)) | |
return false; | |
return $data; | |
} | |
/** | |
* ACF Form: Helper – Get Return | |
*/ | |
function hwk_acf_form_get_return($form = false){ | |
if(!$form) | |
$form = hwk_acf_form_get_form(); | |
if(!$form) | |
return false; | |
$return = array(); | |
// ACF Form: Redirection | |
if(isset($form['return']) && !empty($form['return'])) | |
$return['redirect'] = $form['return']; | |
// ACF Form: Message | |
if(isset($form['updated_message']) && !empty($form['updated_message'])) | |
$return['message'] = $form['updated_message']; | |
// AF Form: Message | |
if(isset($form['display']['success_message']) && !empty($form['display']['success_message'])) | |
$return['message'] = $form['display']['success_message']; | |
return $return; | |
} | |
/** | |
* ACF Form: Helper - Get Error | |
*/ | |
function hwk_acf_form_add_validation_error($key, $message){ | |
if(!acf()->validation->get_error($key)){ | |
acf_add_validation_error($key, $message); | |
return; | |
} | |
foreach(acf()->validation->errors as &$value){ | |
if($value['input'] == $key) | |
$value['message'] = $message; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment