<?php if( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly if( ! class_exists('ACF_Walker_Nav_Menu_Edit') ) : class ACF_Walker_Nav_Menu_Edit extends Walker_Nav_Menu_Edit { /** * Starts the element output. * * Calls the Walker_Nav_Menu_Edit start_el function and then injects the custom field HTML * * @since 5.0.0 * @since 5.7.2 Added preg_replace based on https://github.com/ineagu/wp-menu-item-custom-fields * * @param string $output Used to append additional content (passed by reference). * @param WP_Post $item Menu item data object. * @param int $depth Depth of menu item. Used for padding. * @param stdClass $args An object of wp_nav_menu() arguments. * @param int $id Current item ID. */ function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) { // vars $item_output = ''; // call parent function parent::start_el( $item_output, $item, $depth, $args, $id ); // inject custom field HTML $output .= preg_replace( // NOTE: Check this regex from time to time! '/(?=<(fieldset|p)[^>]+class="[^"]*field-move)/', $this->get_fields( $item, $depth, $args, $id ), $item_output ); } /** * Get custom fields HTML * * @since 5.0.0 * @since 5.7.2 Added action based on https://github.com/ineagu/wp-menu-item-custom-fields * * @param object $item Menu item data object. * @param int $depth Depth of menu item. Used for padding. * @param array $args Menu item args. * @param int $id Nav menu ID. * @return string */ function get_fields( $item, $depth, $args = array(), $id = 0 ) { ob_start(); /** * Get menu item custom fields from plugins/themes * * @since 5.7.2 * * @param int $item_id post ID of menu * @param object $item Menu item data object. * @param int $depth Depth of menu item. Used for padding. * @param array $args Menu item args. * @param int $id Nav menu ID. */ do_action( 'wp_nav_menu_item_custom_fields', $item->ID, $item, $depth, $args, $id ); return ob_get_clean(); } } endif; ?>