Skip to content

Instantly share code, notes, and snippets.

@hawkidoki
Last active June 13, 2022 22:45
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hawkidoki/a3c09a7e8e827202f4efb343d73ff1a3 to your computer and use it in GitHub Desktop.
Save hawkidoki/a3c09a7e8e827202f4efb343d73ff1a3 to your computer and use it in GitHub Desktop.
<?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