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