File "form-nav-menu.php"

Full path: /home/kosmetik/public_html/wp-content/plugins/advanced-custom-fields/includes/forms/form-nav-menu.php
File size: 5.48 B
MIME-type: text/x-php
Charset: utf-8

Download   Open   Edit   Advanced Editor   Back

<?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');
}