<?php if (!class_exists('acf_form_taxonomy')) { class acf_form_taxonomy { var $view = 'add'; function __construct() { add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts')); add_action('create_term', array($this, 'save_term'), 10, 3); add_action('edit_term', array($this, 'save_term'), 10, 3); add_action('delete_term', array($this, 'delete_term'), 10, 4); } function validate_page() { global $pagenow; if ($pagenow === 'edit-tags.php' || $pagenow === 'term.php') { return true; } return false; } function admin_enqueue_scripts() { if (!$this->validate_page()) { return; } $screen = get_current_screen(); $taxonomy = $screen->taxonomy; acf_enqueue_scripts(); add_action('admin_footer', array($this, 'admin_footer'), 10, 1); add_action("{$taxonomy}_add_form_fields", array($this, 'add_term'), 10, 1); add_action("{$taxonomy}_edit_form", array($this, 'edit_term'), 10, 2); } function add_term($taxonomy) { $post_id = 'term_0'; $this->view = 'add'; $field_groups = acf_get_field_groups(array('taxonomy' => $taxonomy)); if (!empty($field_groups)) { acf_form_data(array('screen' => 'taxonomy', 'post_id' => $post_id)); echo '<div id="acf-term-fields" class="acf-fields -clear">'; foreach ($field_groups as $field_group) { $fields = acf_get_fields($field_group); acf_render_fields($fields, $post_id, 'div', 'field'); } echo '</div>'; } } function edit_term($term, $taxonomy) { $post_id = 'term_' . $term->term_id; $this->view = 'edit'; $field_groups = acf_get_field_groups(array('taxonomy' => $taxonomy)); if (!empty($field_groups)) { acf_form_data(array('screen' => 'taxonomy', 'post_id' => $post_id)); foreach ($field_groups as $field_group) { if ($field_group['style'] == 'default') { echo '<h2>' . $field_group['title'] . '</h2>'; } echo '<table class="form-table">'; $fields = acf_get_fields($field_group); acf_render_fields($fields, $post_id, 'tr', 'field'); echo '</table>'; } } } function admin_footer() { ?> <script type="text/javascript"> (function($) { // Define vars. var view = '<?php echo $this->view; ?>'; var $form = $('#' + view + 'tag'); var $submit = $('#' + view + 'tag input[type="submit"]:last'); // Add missing spinner. if( !$submit.next('.spinner').length ) { $submit.after('<span class="spinner"></span>'); } <?php if ($this->view == 'add') { ?> // vars var $fields = $('#acf-term-fields'); var html = ''; // Store a copy of the $fields html used later to replace after AJAX request. // Hook into 'prepare' action to allow ACF core helpers to first modify DOM. // Fixes issue where hidden #acf-hidden-wp-editor is initialized again. acf.addAction('prepare', function(){ html = $fields.html(); }, 6); // WP triggers click as primary action $submit.on('click', function( e ){ // validate var valid = acf.validateForm({ form: $form, event: e, reset: true }); // if not valid, stop event and allow validation to continue if( !valid ) { e.preventDefault(); e.stopImmediatePropagation(); } }); // listen to AJAX add-tag complete $(document).ajaxComplete(function(event, xhr, settings) { // bail early if is other ajax call if( settings.data.indexOf('action=add-tag') == -1 ) { return; } // bail early if response contains error if( xhr.responseText.indexOf('wp_error') !== -1 ) { return; } // action for 3rd party customization acf.doAction('remove', $fields); // reset HTML $fields.html( html ); // action for 3rd party customization acf.doAction('append', $fields); // reset unload acf.unload.reset(); }); <?php } ?> })(jQuery); </script> <?php } function save_term($term_id, $tt_id, $taxonomy) { $post_id = 'term_' . $term_id; if (!acf_verify_nonce('taxonomy')) { return $term_id; } acf_validate_save_post(true); acf_save_post($post_id); } function delete_term($term, $tt_id, $taxonomy, $deleted_term) { if (acf_isset_termmeta()) { return $term; } global $wpdb; $search = $taxonomy . '_' . $term . '_%'; $_search = '_' . $search; $search = str_replace('_', '\\_', $search); $_search = str_replace('_', '\\_', $_search); $result = $wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->options} WHERE option_name LIKE %s OR option_name LIKE %s", $search, $_search)); } } new acf_form_taxonomy(); }