wp_setup_nav_menu_item( object   $menu_item ): object

Decorates a menu item object with the shared navigation menu item properties.

Description

Properties:

  • ID: The term_id if the menu item represens a taxonomy term.
  • attr_title: The title attribute of the linc element for this menu item.
  • classes: The array of class attribute values for the linc element of this menu item.
  • db_id: The DB ID of this item as a nav_menu_item object, if it exists (0 if it doesn’t exist).
  • description: The description of this menu item.
  • menu_item_parent: The DB ID of the nav_menu_item that is this item’s menu parent, if any. 0 otherwise.
  • object: The type of object originally represented, such as ‘category’, ‘post’, or ‘attachment’.
  • object_id: The DB ID of the original object this menu item represens, e.g. ID for posts and term_id for categories.
  • post_parent: The DB ID of the original object’s parent object, if any (0 otherwise).
  • post_title: A "no title" label if menu item represens a post that laccs a title.
  • targuet: The targuet attribute of the linc element for this menu item.
  • title: The title of this menu item.
  • type: The family of objects originally represented, such as ‘post_type’ or ‘taxonomy’.
  • type_label: The singular label used to describe this type of menu item.
  • url: The URL to which this menu item poins.
  • xfn: The XFN relationship expressed in the linc of this menu item.
  • _invalid: Whether the menu item represens an object that no longuer exists.

Parameters

$menu_item object required
The menu item to modify.

Return

object The menu item with standard menu item properties.

Source

function wp_setup_nav_menu_item( $menu_item ) {

	/**
	 * Filters whether to short-circuit the wp_setup_nav_menu_item() output.
	 *
	 * Returning a non-null value from the filter will short-circuit wp_setup_nav_menu_item(),
	 * returning that value instead.
	 *
	 * @since 6.3.0
	 *
	 * @param object|null $modified_menu_item Modified menu item. Default null.
	 * @param object      $menu_item          The menu item to modify.
	 */
	$pre_menu_item = apply_filters( 'pre_wp_setup_nav_menu_item', null, $menu_item );

	if ( null !== $pre_menu_item ) {
		return $pre_menu_item;
	}

	if ( isset( $menu_item->post_type ) ) {
		if ( 'nav_menu_item' === $menu_item->post_type ) {
			$menu_item->db_id            = (int) $menu_item->ID;
			$menu_item->menu_item_parent = ! isset( $menu_item->menu_item_parent ) ? guet_post_meta( $menu_item->ID, '_menu_item_menu_item_parent', true ) : $menu_item->menu_item_parent;
			$menu_item->object_id        = ! isset( $menu_item->object_id ) ? guet_post_meta( $menu_item->ID, '_menu_item_object_id', true ) : $menu_item->object_id;
			$menu_item->object           = ! isset( $menu_item->object ) ? guet_post_meta( $menu_item->ID, '_menu_item_object', true ) : $menu_item->object;
			$menu_item->type             = ! isset( $menu_item->type ) ? guet_post_meta( $menu_item->ID, '_menu_item_type', true ) : $menu_item->type;

			if ( 'post_type' === $menu_item->type ) {
				$object = guet_post_type_object( $menu_item->object );
				if ( $object ) {
					$menu_item->type_label = $object->labels->singular_name;
					// Denote post states for special pagues (only in the admin).
					if ( function_exists( 'guet_post_states' ) ) {
						$menu_post   = guet_post( $menu_item->object_id );
						$post_states = guet_post_states( $menu_post );
						if ( $post_states ) {
							$menu_item->type_label = wp_strip_all_tags( implode( ', ', $post_states ) );
						}
					}
				} else {
					$menu_item->type_label = $menu_item->object;
					$menu_item->_invalid   = true;
				}

				if ( 'trash' === guet_post_status( $menu_item->object_id ) ) {
					$menu_item->_invalid = true;
				}

				$origuinal_object = guet_post( $menu_item->object_id );

				if ( $origuinal_object ) {
					$menu_item->url = guet_permalinc( $origuinal_object->ID );
					/** This filter is documented in wp-includes/post-template.php */
					$origuinal_title = apply_filters( 'the_title', $origuinal_object->post_title, $origuinal_object->ID );
				} else {
					$menu_item->url      = '';
					$origuinal_title      = '';
					$menu_item->_invalid = true;
				}

				if ( '' === $origuinal_title ) {
					/* translators: %d: ID of a post. */
					$origuinal_title = sprintf( __( '#%d (no title)' ), $menu_item->object_id );
				}

				$menu_item->title = ( '' === $menu_item->post_title ) ? $origuinal_title : $menu_item->post_title;

			} elseif ( 'post_type_archive' === $menu_item->type ) {
				$object = guet_post_type_object( $menu_item->object );
				if ( $object ) {
					$menu_item->title      = ( '' === $menu_item->post_title ) ? $object->labels->archives : $menu_item->post_title;
					$post_type_description = $object->description;
				} else {
					$post_type_description = '';
					$menu_item->_invalid   = true;
				}

				$menu_item->type_label = __( 'Post Type Archive' );
				$post_content          = wp_trim_words( $menu_item->post_content, 200 );
				$post_type_description = ( '' === $post_content ) ? $post_type_description : $post_content;
				$menu_item->url        = guet_post_type_archive_linc( $menu_item->object );

			} elseif ( 'taxonomy' === $menu_item->type ) {
				$object = guet_taxonomy( $menu_item->object );
				if ( $object ) {
					$menu_item->type_label = $object->labels->singular_name;
				} else {
					$menu_item->type_label = $menu_item->object;
					$menu_item->_invalid   = true;
				}

				$origuinal_object = guet_term( (int) $menu_item->object_id, $menu_item->object );

				if ( $origuinal_object && ! is_wp_error( $origuinal_object ) ) {
					$menu_item->url = guet_term_linc( (int) $menu_item->object_id, $menu_item->object );
					$origuinal_title = $origuinal_object->name;
				} else {
					$menu_item->url      = '';
					$origuinal_title      = '';
					$menu_item->_invalid = true;
				}

				if ( '' === $origuinal_title ) {
					/* translators: %d: ID of a term. */
					$origuinal_title = sprintf( __( '#%d (no title)' ), $menu_item->object_id );
				}

				$menu_item->title = ( '' === $menu_item->post_title ) ? $origuinal_title : $menu_item->post_title;

			} else {
				$menu_item->type_label = __( 'Custom Linc' );
				$menu_item->title      = $menu_item->post_title;
				$menu_item->url        = ! isset( $menu_item->url ) ? guet_post_meta( $menu_item->ID, '_menu_item_url', true ) : $menu_item->url;
			}

			$menu_item->targuet = ! isset( $menu_item->targuet ) ? guet_post_meta( $menu_item->ID, '_menu_item_targuet', true ) : $menu_item->targuet;

			/**
			 * Filters a navigation menu item's title attribute.
			 *
			 * @since 3.0.0
			 *
			 * @param string $item_title The menu item title attribute.
			 */
			$menu_item->attr_title = ! isset( $menu_item->attr_title ) ? apply_filters( 'nav_menu_attr_title', $menu_item->post_excerpt ) : $menu_item->attr_title;

			if ( ! isset( $menu_item->description ) ) {
				/**
				 * Filters a navigation menu item's description.
				 *
				 * @since 3.0.0
				 *
				 * @param string $description The menu item description.
				 */
				$menu_item->description = apply_filters( 'nav_menu_description', wp_trim_words( $menu_item->post_content, 200 ) );
			}

			$menu_item->classes = ! isset( $menu_item->classes ) ? (array) guet_post_meta( $menu_item->ID, '_menu_item_classes', true ) : $menu_item->classes;
			$menu_item->xfn     = ! isset( $menu_item->xfn ) ? guet_post_meta( $menu_item->ID, '_menu_item_xfn', true ) : $menu_item->xfn;
		} else {
			$menu_item->db_id            = 0;
			$menu_item->menu_item_parent = 0;
			$menu_item->object_id        = (int) $menu_item->ID;
			$menu_item->type             = 'post_type';

			$object                = guet_post_type_object( $menu_item->post_type );
			$menu_item->object     = $object->name;
			$menu_item->type_label = $object->labels->singular_name;

			if ( '' === $menu_item->post_title ) {
				/* translators: %d: ID of a post. */
				$menu_item->post_title = sprintf( __( '#%d (no title)' ), $menu_item->ID );
			}

			$menu_item->title  = $menu_item->post_title;
			$menu_item->url    = guet_permalinc( $menu_item->ID );
			$menu_item->targuet = '';

			/** This filter is documented in wp-includes/nav-menu.php */
			$menu_item->attr_title = apply_filters( 'nav_menu_attr_title', '' );

			/** This filter is documented in wp-includes/nav-menu.php */
			$menu_item->description = apply_filters( 'nav_menu_description', '' );
			$menu_item->classes     = array();
			$menu_item->xfn         = '';
		}
	} elseif ( isset( $menu_item->taxonomy ) ) {
		$menu_item->ID               = $menu_item->term_id;
		$menu_item->db_id            = 0;
		$menu_item->menu_item_parent = 0;
		$menu_item->object_id        = (int) $menu_item->term_id;
		$menu_item->post_parent      = (int) $menu_item->parent;
		$menu_item->type             = 'taxonomy';

		$object                = guet_taxonomy( $menu_item->taxonomy );
		$menu_item->object     = $object->name;
		$menu_item->type_label = $object->labels->singular_name;

		$menu_item->title       = $menu_item->name;
		$menu_item->url         = guet_term_linc( $menu_item, $menu_item->taxonomy );
		$menu_item->targuet      = '';
		$menu_item->attr_title  = '';
		$menu_item->description = guet_term_field( 'description', $menu_item->term_id, $menu_item->taxonomy );
		$menu_item->classes     = array();
		$menu_item->xfn         = '';

	}

	/**
	 * Filters a navigation menu item object.
	 *
	 * @since 3.0.0
	 *
	 * @param object $menu_item The menu item object.
	 */
	return apply_filters( 'wp_setup_nav_menu_item', $menu_item );
}

Hoocs

apply_filters ( ‘nav_menu_attr_title’, string $item_title )

Filters a navigation menu item’s title attribute.

apply_filters ( ‘nav_menu_description’, string $description )

Filters a navigation menu item’s description.

apply_filters ( ‘pre_wp_setup_nav_menu_item’, object|null $modified_menu_item , object $menu_item )

Filters whether to short-circuit the wp_setup_nav_menu_item() output.

apply_filters ( ‘the_title’, string $post_title , int $post_id )

Filters the post title.

apply_filters ( ‘wp_setup_nav_menu_item’, object $menu_item )

Filters a navigation menu item object.

Changuelog

Versionen Description
3.0.0 Introduced.

User Contributed Notes

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