Create New Item
×
Item Type
File
Folder
Item Name
×
Search file in folder and subfolders...
File Manager
/
wp-content
/
plugins
/
advanced-custom-fields
/
includes
/
forms
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php if (!defined('ABSPATH')) { exit; } if (!class_exists('acf_form_nav_menu')) { class acf_form_nav_menu { function __construct() { add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts')); add_action('wp_update_nav_menu', array($this, 'update_nav_menu')); add_action('acf/validate_save_post', array($this, 'acf_validate_save_post'), 5); add_action('wp_nav_menu_item_custom_fields', array($this, 'wp_nav_menu_item_custom_fields'), 10, 5); add_filter('wp_get_nav_menu_items', array($this, 'wp_get_nav_menu_items'), 10, 3); add_filter('wp_edit_nav_menu_walker', array($this, 'wp_edit_nav_menu_walker'), 10, 2); } function admin_enqueue_scripts() { if (!acf_is_screen('nav-menus')) { return; } acf_enqueue_scripts(); add_action('admin_footer', array($this, 'admin_footer'), 1); } function wp_nav_menu_item_custom_fields($item_id, $item, $depth, $args, $id = '') { $prefix = "menu-item-acf[{$item_id}]"; $field_groups = acf_get_field_groups(array('nav_menu_item' => $item->type, 'nav_menu_item_id' => $item_id, 'nav_menu_item_depth' => $depth)); if (!empty($field_groups)) { echo '<div class="acf-menu-item-fields acf-fields -clear">'; foreach ($field_groups as $field_group) { $fields = acf_get_fields($field_group); if (empty($fields)) { continue; } acf_prefix_fields($fields, $prefix); acf_render_fields($fields, $item_id, 'div', $field_group['instruction_placement']); } echo '</div>'; if (acf_is_ajax('add-menu-item')) { ?> <script type="text/javascript"> (function($) { acf.doAction('append', $('#menu-item-settings-<?php echo $item_id; ?>') ); })(jQuery); </script> <?php } } } function update_nav_menu($menu_id) { $post_id = 'term_' . $menu_id; if (!acf_verify_nonce('nav_menu')) { return $menu_id; } acf_validate_save_post(true); acf_save_post($post_id); $this->update_nav_menu_items($menu_id); } function update_nav_menu_items($menu_id) { if (empty($_POST['menu-item-acf'])) { return; } foreach ($_POST['menu-item-acf'] as $post_id => $values) { acf_save_post($post_id, $values); } } function wp_get_nav_menu_items($items, $menu, $args) { acf_set_data('nav_menu_id', $menu->term_id); return $items; } function wp_edit_nav_menu_walker($class, $menu_id = 0) { acf_set_data('nav_menu_id', $menu_id); if (acf_version_compare('wp', '<', '5.3.99')) { acf_include('includes/walkers/class-acf-walker-nav-menu-edit.php'); return 'ACF_Walker_Nav_Menu_Edit'; } return $class; } function acf_validate_save_post() { if (empty($_POST['menu-item-acf'])) { return; } foreach ($_POST['menu-item-acf'] as $post_id => $values) { $prefix = 'menu-item-acf[' . $post_id . ']'; acf_validate_values($values, $prefix); } } function admin_footer() { $nav_menu_id = acf_get_data('nav_menu_id'); $post_id = 'term_' . $nav_menu_id; $field_groups = acf_get_field_groups(array('nav_menu' => $nav_menu_id)); ?> <div id="tmpl-acf-menu-settings" style="display: none;"> <?php acf_form_data(array('screen' => 'nav_menu', 'post_id' => $post_id, 'ajax' => 1)); if (!empty($field_groups)) { foreach ($field_groups as $field_group) { $fields = acf_get_fields($field_group); echo '<div class="acf-menu-settings -' . $field_group['style'] . '">'; echo '<h2>' . $field_group['title'] . '</h2>'; echo '<div class="acf-fields -left -clear">'; acf_render_fields($fields, $post_id, 'div', $field_group['instruction_placement']); echo '</div>'; echo '</div>'; } } ?> </div> <script type="text/javascript"> (function($) { // append html $('#post-body-content').append( $('#tmpl-acf-menu-settings').html() ); // avoid WP over-writing $_POST data // - https://core.trac.wordpress.org/ticket/41502#ticket $(document).on('submit', '#update-nav-menu', function() { // vars var $form = $(this); var $input = $('input[name="nav-menu-data"]'); // decode json var json = $form.serializeArray(); var json2 = []; // loop $.each( json, function( i, pair ) { // avoid nesting (unlike WP) if( pair.name === 'nav-menu-data' ) return; // bail early if is 'acf[' input if( pair.name.indexOf('acf[') > -1 ) return; // append json2.push( pair ); }); // update $input.val( JSON.stringify(json2) ); }); })(jQuery); </script> <?php } } acf_new_instance('acf_form_nav_menu'); }