WP_Customize_Nav_Menus::filter_wp_nav_menu_args( array $args ): array

Keeps track of the arguments that are being passed to wp_nav_menu() .

Description

See also

Parameters

$argsarrayrequired
An array containing wp_nav_menu() arguments.
More Arguments from wp_nav_menu( … $args )Array of nav menu arguments.
  • menu int|string|WP_Term
    Desired menu. Accepts a menu ID, slug, name, or object.
  • menu_class string
    CSS class to use for the ul element which forms the menu.
    Default 'menu'.
  • menu_id string
    The ID that is applied to the ul element which forms the menu.
    Default is the menu slug, incremented.
  • container string
    Whether to wrap the ul, and what to wrap it with.
    Default 'div'.
  • container_class string
    Class that is applied to the container.
    Default ‘menu-{menu slug}-container’.
  • container_id string
    The ID that is applied to the container.
  • container_aria_label string
    The aria-label attribute that is applied to the container when it’s a nav element.
  • fallback_cb callable|false
    If the menu doesn’t exist, a callback function will fire.
    Default is 'wp_page_menu'. Set to false for no fallback.
  • before string
    Text before the link markup.
  • after string
    Text after the link markup.
  • link_before string
    Text before the link text.
  • link_after string
    Text after the link text.
  • echo bool
    Whether to echo the menu or return it. Default true.
  • depth int
    How many levels of the hierarchy are to be included.
    0 means all. Default 0.
    Default 0.
  • walker object
    Instance of a custom walker class.
  • theme_location string
    Theme location to be used. Must be registered with register_nav_menu() in order to be selectable by the user.
  • items_wrap string
    How the list items should be wrapped. Uses printf() format with numbered placeholders. Default is a ul with an id and class.
  • item_spacing string
    Whether to preserve whitespace within the menu’s HTML.
    Accepts 'preserve' or 'discard'. Default 'preserve'.

Return

array Arguments.

Source

public function filter_wp_nav_menu_args( $args ) {
	/*
	 * The following conditions determine whether or not this instance of
	 * wp_nav_menu() can use selective refreshed. A wp_nav_menu() can be
	 * selective refreshed if...
	 */
	$can_partial_refresh = (
		// ...if wp_nav_menu() is directly echoing out the menu (and thus isn't manipulating the string after generated),
		! empty( $args['echo'] )
		&&
		// ...and if the fallback_cb can be serialized to JSON, since it will be included in the placement context data,
		( empty( $args['fallback_cb'] ) || is_string( $args['fallback_cb'] ) )
		&&
		// ...and if the walker can also be serialized to JSON, since it will be included in the placement context data as well,
		( empty( $args['walker'] ) || is_string( $args['walker'] ) )
		// ...and if it has a theme location assigned or an assigned menu to display,
		&& (
			! empty( $args['theme_location'] )
			||
			( ! empty( $args['menu'] ) && ( is_numeric( $args['menu'] ) || is_object( $args['menu'] ) ) )
		)
		&&
		// ...and if the nav menu would be rendered with a wrapper container element (upon which to attach data-* attributes).
		(
			! empty( $args['container'] )
			||
			( isset( $args['items_wrap'] ) && str_starts_with( $args['items_wrap'], '<' ) )
		)
	);
	$args['can_partial_refresh'] = $can_partial_refresh;

	$exported_args = $args;

	// Empty out args which may not be JSON-serializable.
	if ( ! $can_partial_refresh ) {
		$exported_args['fallback_cb'] = '';
		$exported_args['walker']      = '';
	}

	/*
	 * Replace object menu arg with a term_id menu arg, as this exports better
	 * to JS and is easier to compare hashes.
	 */
	if ( ! empty( $exported_args['menu'] ) && is_object( $exported_args['menu'] ) ) {
		$exported_args['menu'] = $exported_args['menu']->term_id;
	}

	ksort( $exported_args );
	$exported_args['args_hmac'] = $this->hash_nav_menu_args( $exported_args );

	$args['customize_preview_nav_menus_args']                            = $exported_args;
	$this->preview_nav_menu_instance_args[ $exported_args['args_hmac'] ] = $exported_args;
	return $args;
}

Changelog

VersionDescription
4.3.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.