wp_setup_nav_menu_item

The timeline below displays how wordpress function wp_setup_nav_menu_item has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.3

/**
 * Decorates a menu item object with the shared navigation menu item properties.
 *
 * Properties:
 * - ID:               The term_id if the menu item represents a taxonomy term.
 * - attr_title:       The title attribute of the link element for this menu item.
 * - classes:          The array of class attribute values for the link 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 represents, 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 represents a post that lacks a title.
 * - target:           The target attribute of the link 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 points.
 * - xfn:              The XFN relationship expressed in the link of this menu item.
 * - _invalid:         Whether the menu item represents an object that no longer exists.
 *
 * @since 3.0.0
 *
 * @param object $menu_item The menu item to modify.
 * @return object The menu item with standard menu item properties.
 */
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)) ? get_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)) ? get_post_meta($menu_item->ID, '_menu_item_object_id', true) : $menu_item->object_id;
            $menu_item->object = (!isset($menu_item->object)) ? get_post_meta($menu_item->ID, '_menu_item_object', true) : $menu_item->object;
            $menu_item->type = (!isset($menu_item->type)) ? get_post_meta($menu_item->ID, '_menu_item_type', true) : $menu_item->type;
            if ('post_type' === $menu_item->type) {
                $object = get_post_type_object($menu_item->object);
                if ($object) {
                    $menu_item->type_label = $object->labels->singular_name;
                    // Denote post states for special pages (only in the admin).
                    if (function_exists('get_post_states')) {
                        $menu_post = get_post($menu_item->object_id);
                        $post_states = get_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' === get_post_status($menu_item->object_id)) {
                    $menu_item->_invalid = true;
                }
                $original_object = get_post($menu_item->object_id);
                if ($original_object) {
                    $menu_item->url = get_permalink($original_object->ID);
                    /** This filter is documented in wp-includes/post-template.php */
                    $original_title = apply_filters('the_title', $original_object->post_title, $original_object->ID);
                } else {
                    $menu_item->url = '';
                    $original_title = '';
                    $menu_item->_invalid = true;
                }
                if ('' === $original_title) {
                    /* translators: %d: ID of a post. */
                    $original_title = sprintf(__('#%d (no title)'), $menu_item->object_id);
                }
                $menu_item->title = ('' === $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } elseif ('post_type_archive' === $menu_item->type) {
                $object = get_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 = get_post_type_archive_link($menu_item->object);
            } elseif ('taxonomy' === $menu_item->type) {
                $object = get_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;
                }
                $original_object = get_term((int) $menu_item->object_id, $menu_item->object);
                if ($original_object && !is_wp_error($original_object)) {
                    $menu_item->url = get_term_link((int) $menu_item->object_id, $menu_item->object);
                    $original_title = $original_object->name;
                } else {
                    $menu_item->url = '';
                    $original_title = '';
                    $menu_item->_invalid = true;
                }
                if ('' === $original_title) {
                    /* translators: %d: ID of a term. */
                    $original_title = sprintf(__('#%d (no title)'), $menu_item->object_id);
                }
                $menu_item->title = ('' === $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } else {
                $menu_item->type_label = __('Custom Link');
                $menu_item->title = $menu_item->post_title;
                $menu_item->url = (!isset($menu_item->url)) ? get_post_meta($menu_item->ID, '_menu_item_url', true) : $menu_item->url;
            }
            $menu_item->target = (!isset($menu_item->target)) ? get_post_meta($menu_item->ID, '_menu_item_target', true) : $menu_item->target;
            /**
             * 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) get_post_meta($menu_item->ID, '_menu_item_classes', true) : $menu_item->classes;
            $menu_item->xfn = (!isset($menu_item->xfn)) ? get_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 = get_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 = get_permalink($menu_item->ID);
            $menu_item->target = '';
            /** 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 = get_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 = get_term_link($menu_item, $menu_item->taxonomy);
        $menu_item->target = '';
        $menu_item->attr_title = '';
        $menu_item->description = get_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);
}

WordPress Version: 5.5

/**
 * Decorates a menu item object with the shared navigation menu item properties.
 *
 * Properties:
 * - ID:               The term_id if the menu item represents a taxonomy term.
 * - attr_title:       The title attribute of the link element for this menu item.
 * - classes:          The array of class attribute values for the link 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 represents, 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 represents a post that lacks a title.
 * - target:           The target attribute of the link 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 points.
 * - xfn:              The XFN relationship expressed in the link of this menu item.
 * - _invalid:         Whether the menu item represents an object that no longer exists.
 *
 * @since 3.0.0
 *
 * @param object $menu_item The menu item to modify.
 * @return object The menu item with standard menu item properties.
 */
function wp_setup_nav_menu_item($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)) ? get_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)) ? get_post_meta($menu_item->ID, '_menu_item_object_id', true) : $menu_item->object_id;
            $menu_item->object = (!isset($menu_item->object)) ? get_post_meta($menu_item->ID, '_menu_item_object', true) : $menu_item->object;
            $menu_item->type = (!isset($menu_item->type)) ? get_post_meta($menu_item->ID, '_menu_item_type', true) : $menu_item->type;
            if ('post_type' === $menu_item->type) {
                $object = get_post_type_object($menu_item->object);
                if ($object) {
                    $menu_item->type_label = $object->labels->singular_name;
                    // Denote post states for special pages (only in the admin).
                    if (function_exists('get_post_states')) {
                        $menu_post = get_post($menu_item->object_id);
                        $post_states = get_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' === get_post_status($menu_item->object_id)) {
                    $menu_item->_invalid = true;
                }
                $original_object = get_post($menu_item->object_id);
                if ($original_object) {
                    $menu_item->url = get_permalink($original_object->ID);
                    /** This filter is documented in wp-includes/post-template.php */
                    $original_title = apply_filters('the_title', $original_object->post_title, $original_object->ID);
                } else {
                    $menu_item->url = '';
                    $original_title = '';
                    $menu_item->_invalid = true;
                }
                if ('' === $original_title) {
                    /* translators: %d: ID of a post. */
                    $original_title = sprintf(__('#%d (no title)'), $menu_item->object_id);
                }
                $menu_item->title = ('' === $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } elseif ('post_type_archive' === $menu_item->type) {
                $object = get_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 = get_post_type_archive_link($menu_item->object);
            } elseif ('taxonomy' === $menu_item->type) {
                $object = get_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;
                }
                $original_object = get_term((int) $menu_item->object_id, $menu_item->object);
                if ($original_object && !is_wp_error($original_object)) {
                    $menu_item->url = get_term_link((int) $menu_item->object_id, $menu_item->object);
                    $original_title = $original_object->name;
                } else {
                    $menu_item->url = '';
                    $original_title = '';
                    $menu_item->_invalid = true;
                }
                if ('' === $original_title) {
                    /* translators: %d: ID of a term. */
                    $original_title = sprintf(__('#%d (no title)'), $menu_item->object_id);
                }
                $menu_item->title = ('' === $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } else {
                $menu_item->type_label = __('Custom Link');
                $menu_item->title = $menu_item->post_title;
                $menu_item->url = (!isset($menu_item->url)) ? get_post_meta($menu_item->ID, '_menu_item_url', true) : $menu_item->url;
            }
            $menu_item->target = (!isset($menu_item->target)) ? get_post_meta($menu_item->ID, '_menu_item_target', true) : $menu_item->target;
            /**
             * 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) get_post_meta($menu_item->ID, '_menu_item_classes', true) : $menu_item->classes;
            $menu_item->xfn = (!isset($menu_item->xfn)) ? get_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 = get_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 = get_permalink($menu_item->ID);
            $menu_item->target = '';
            /** 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 = get_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 = get_term_link($menu_item, $menu_item->taxonomy);
        $menu_item->target = '';
        $menu_item->attr_title = '';
        $menu_item->description = get_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);
}

WordPress Version: 5.4

/**
 * Decorates a menu item object with the shared navigation menu item properties.
 *
 * Properties:
 * - ID:               The term_id if the menu item represents a taxonomy term.
 * - attr_title:       The title attribute of the link element for this menu item.
 * - classes:          The array of class attribute values for the link 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 represents, 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 represents a post that lacks a title.
 * - target:           The target attribute of the link 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 points.
 * - xfn:              The XFN relationship expressed in the link of this menu item.
 * - _invalid:         Whether the menu item represents an object that no longer exists.
 *
 * @since 3.0.0
 *
 * @param object $menu_item The menu item to modify.
 * @return object $menu_item The menu item with standard menu item properties.
 */
function wp_setup_nav_menu_item($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)) ? get_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)) ? get_post_meta($menu_item->ID, '_menu_item_object_id', true) : $menu_item->object_id;
            $menu_item->object = (!isset($menu_item->object)) ? get_post_meta($menu_item->ID, '_menu_item_object', true) : $menu_item->object;
            $menu_item->type = (!isset($menu_item->type)) ? get_post_meta($menu_item->ID, '_menu_item_type', true) : $menu_item->type;
            if ('post_type' == $menu_item->type) {
                $object = get_post_type_object($menu_item->object);
                if ($object) {
                    $menu_item->type_label = $object->labels->singular_name;
                    // Use post states for special pages (only in the admin).
                    if (function_exists('get_post_states')) {
                        $menu_post = get_post($menu_item->object_id);
                        $post_states = get_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' === get_post_status($menu_item->object_id)) {
                    $menu_item->_invalid = true;
                }
                $original_object = get_post($menu_item->object_id);
                if ($original_object) {
                    $menu_item->url = get_permalink($original_object->ID);
                    /** This filter is documented in wp-includes/post-template.php */
                    $original_title = apply_filters('the_title', $original_object->post_title, $original_object->ID);
                } else {
                    $menu_item->url = '';
                    $original_title = '';
                    $menu_item->_invalid = true;
                }
                if ('' === $original_title) {
                    /* translators: %d: ID of a post. */
                    $original_title = sprintf(__('#%d (no title)'), $menu_item->object_id);
                }
                $menu_item->title = ('' === $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } elseif ('post_type_archive' == $menu_item->type) {
                $object = get_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 = get_post_type_archive_link($menu_item->object);
            } elseif ('taxonomy' == $menu_item->type) {
                $object = get_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;
                }
                $original_object = get_term((int) $menu_item->object_id, $menu_item->object);
                if ($original_object && !is_wp_error($original_object)) {
                    $menu_item->url = get_term_link((int) $menu_item->object_id, $menu_item->object);
                    $original_title = $original_object->name;
                } else {
                    $menu_item->url = '';
                    $original_title = '';
                    $menu_item->_invalid = true;
                }
                if ('' === $original_title) {
                    /* translators: %d: ID of a term. */
                    $original_title = sprintf(__('#%d (no title)'), $menu_item->object_id);
                }
                $menu_item->title = ('' === $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } else {
                $menu_item->type_label = __('Custom Link');
                $menu_item->title = $menu_item->post_title;
                $menu_item->url = (!isset($menu_item->url)) ? get_post_meta($menu_item->ID, '_menu_item_url', true) : $menu_item->url;
            }
            $menu_item->target = (!isset($menu_item->target)) ? get_post_meta($menu_item->ID, '_menu_item_target', true) : $menu_item->target;
            /**
             * 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) get_post_meta($menu_item->ID, '_menu_item_classes', true) : $menu_item->classes;
            $menu_item->xfn = (!isset($menu_item->xfn)) ? get_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 = get_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 = get_permalink($menu_item->ID);
            $menu_item->target = '';
            /** 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 = get_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 = get_term_link($menu_item, $menu_item->taxonomy);
        $menu_item->target = '';
        $menu_item->attr_title = '';
        $menu_item->description = get_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);
}

WordPress Version: 5.3

/**
 * Decorates a menu item object with the shared navigation menu item properties.
 *
 * Properties:
 * - ID:               The term_id if the menu item represents a taxonomy term.
 * - attr_title:       The title attribute of the link element for this menu item.
 * - classes:          The array of class attribute values for the link 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 represents, 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 represents a post that lacks a title.
 * - target:           The target attribute of the link 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 points.
 * - xfn:              The XFN relationship expressed in the link of this menu item.
 * - _invalid:         Whether the menu item represents an object that no longer exists.
 *
 * @since 3.0.0
 *
 * @param object $menu_item The menu item to modify.
 * @return object $menu_item The menu item with standard menu item properties.
 */
function wp_setup_nav_menu_item($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)) ? get_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)) ? get_post_meta($menu_item->ID, '_menu_item_object_id', true) : $menu_item->object_id;
            $menu_item->object = (!isset($menu_item->object)) ? get_post_meta($menu_item->ID, '_menu_item_object', true) : $menu_item->object;
            $menu_item->type = (!isset($menu_item->type)) ? get_post_meta($menu_item->ID, '_menu_item_type', true) : $menu_item->type;
            if ('post_type' == $menu_item->type) {
                $object = get_post_type_object($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;
                }
                if ('trash' === get_post_status($menu_item->object_id)) {
                    $menu_item->_invalid = true;
                }
                $original_object = get_post($menu_item->object_id);
                if ($original_object) {
                    $menu_item->url = get_permalink($original_object->ID);
                    /** This filter is documented in wp-includes/post-template.php */
                    $original_title = apply_filters('the_title', $original_object->post_title, $original_object->ID);
                } else {
                    $menu_item->url = '';
                    $original_title = '';
                    $menu_item->_invalid = true;
                }
                if ('' === $original_title) {
                    /* translators: %d: ID of a post. */
                    $original_title = sprintf(__('#%d (no title)'), $menu_item->object_id);
                }
                $menu_item->title = ('' === $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } elseif ('post_type_archive' == $menu_item->type) {
                $object = get_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 = get_post_type_archive_link($menu_item->object);
            } elseif ('taxonomy' == $menu_item->type) {
                $object = get_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;
                }
                $original_object = get_term((int) $menu_item->object_id, $menu_item->object);
                if ($original_object && !is_wp_error($original_object)) {
                    $menu_item->url = get_term_link((int) $menu_item->object_id, $menu_item->object);
                    $original_title = $original_object->name;
                } else {
                    $menu_item->url = '';
                    $original_title = '';
                    $menu_item->_invalid = true;
                }
                if ('' === $original_title) {
                    /* translators: %d: ID of a term. */
                    $original_title = sprintf(__('#%d (no title)'), $menu_item->object_id);
                }
                $menu_item->title = ('' === $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } else {
                $menu_item->type_label = __('Custom Link');
                $menu_item->title = $menu_item->post_title;
                $menu_item->url = (!isset($menu_item->url)) ? get_post_meta($menu_item->ID, '_menu_item_url', true) : $menu_item->url;
            }
            $menu_item->target = (!isset($menu_item->target)) ? get_post_meta($menu_item->ID, '_menu_item_target', true) : $menu_item->target;
            /**
             * 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) get_post_meta($menu_item->ID, '_menu_item_classes', true) : $menu_item->classes;
            $menu_item->xfn = (!isset($menu_item->xfn)) ? get_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 = get_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 = get_permalink($menu_item->ID);
            $menu_item->target = '';
            /** 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 = get_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 = get_term_link($menu_item, $menu_item->taxonomy);
        $menu_item->target = '';
        $menu_item->attr_title = '';
        $menu_item->description = get_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);
}

WordPress Version: 4.7

/**
 * Decorates a menu item object with the shared navigation menu item properties.
 *
 * Properties:
 * - ID:               The term_id if the menu item represents a taxonomy term.
 * - attr_title:       The title attribute of the link element for this menu item.
 * - classes:          The array of class attribute values for the link 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 represents, 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 represents a post that lacks a title.
 * - target:           The target attribute of the link 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 points.
 * - xfn:              The XFN relationship expressed in the link of this menu item.
 * - _invalid:         Whether the menu item represents an object that no longer exists.
 *
 * @since 3.0.0
 *
 * @param object $menu_item The menu item to modify.
 * @return object $menu_item The menu item with standard menu item properties.
 */
function wp_setup_nav_menu_item($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)) ? get_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)) ? get_post_meta($menu_item->ID, '_menu_item_object_id', true) : $menu_item->object_id;
            $menu_item->object = (!isset($menu_item->object)) ? get_post_meta($menu_item->ID, '_menu_item_object', true) : $menu_item->object;
            $menu_item->type = (!isset($menu_item->type)) ? get_post_meta($menu_item->ID, '_menu_item_type', true) : $menu_item->type;
            if ('post_type' == $menu_item->type) {
                $object = get_post_type_object($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;
                }
                if ('trash' === get_post_status($menu_item->object_id)) {
                    $menu_item->_invalid = true;
                }
                $menu_item->url = get_permalink($menu_item->object_id);
                $original_object = get_post($menu_item->object_id);
                /** This filter is documented in wp-includes/post-template.php */
                $original_title = apply_filters('the_title', $original_object->post_title, $original_object->ID);
                if ('' === $original_title) {
                    /* translators: %d: ID of a post */
                    $original_title = sprintf(__('#%d (no title)'), $original_object->ID);
                }
                $menu_item->title = ('' == $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } elseif ('post_type_archive' == $menu_item->type) {
                $object = get_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 {
                    $menu_item->_invalid = true;
                    $post_type_description = '';
                }
                $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 = get_post_type_archive_link($menu_item->object);
            } elseif ('taxonomy' == $menu_item->type) {
                $object = get_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;
                }
                $term_url = get_term_link((int) $menu_item->object_id, $menu_item->object);
                $menu_item->url = (!is_wp_error($term_url)) ? $term_url : '';
                $original_title = get_term_field('name', $menu_item->object_id, $menu_item->object, 'raw');
                if (is_wp_error($original_title)) {
                    $original_title = false;
                }
                $menu_item->title = ('' == $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } else {
                $menu_item->type_label = __('Custom Link');
                $menu_item->title = $menu_item->post_title;
                $menu_item->url = (!isset($menu_item->url)) ? get_post_meta($menu_item->ID, '_menu_item_url', true) : $menu_item->url;
            }
            $menu_item->target = (!isset($menu_item->target)) ? get_post_meta($menu_item->ID, '_menu_item_target', true) : $menu_item->target;
            /**
             * 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) get_post_meta($menu_item->ID, '_menu_item_classes', true) : $menu_item->classes;
            $menu_item->xfn = (!isset($menu_item->xfn)) ? get_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 = get_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 = get_permalink($menu_item->ID);
            $menu_item->target = '';
            /** 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 = get_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 = get_term_link($menu_item, $menu_item->taxonomy);
        $menu_item->target = '';
        $menu_item->attr_title = '';
        $menu_item->description = get_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);
}

WordPress Version: 4.6

/**
 * Decorates a menu item object with the shared navigation menu item properties.
 *
 * Properties:
 * - ID:               The term_id if the menu item represents a taxonomy term.
 * - attr_title:       The title attribute of the link element for this menu item.
 * - classes:          The array of class attribute values for the link 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 represents, 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 represents a post that lacks a title.
 * - target:           The target attribute of the link 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 points.
 * - xfn:              The XFN relationship expressed in the link of this menu item.
 * - _invalid:         Whether the menu item represents an object that no longer exists.
 *
 * @since 3.0.0
 *
 * @param object $menu_item The menu item to modify.
 * @return object $menu_item The menu item with standard menu item properties.
 */
function wp_setup_nav_menu_item($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)) ? get_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)) ? get_post_meta($menu_item->ID, '_menu_item_object_id', true) : $menu_item->object_id;
            $menu_item->object = (!isset($menu_item->object)) ? get_post_meta($menu_item->ID, '_menu_item_object', true) : $menu_item->object;
            $menu_item->type = (!isset($menu_item->type)) ? get_post_meta($menu_item->ID, '_menu_item_type', true) : $menu_item->type;
            if ('post_type' == $menu_item->type) {
                $object = get_post_type_object($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;
                }
                $menu_item->url = get_permalink($menu_item->object_id);
                $original_object = get_post($menu_item->object_id);
                /** This filter is documented in wp-includes/post-template.php */
                $original_title = apply_filters('the_title', $original_object->post_title, $original_object->ID);
                if ('' === $original_title) {
                    /* translators: %d: ID of a post */
                    $original_title = sprintf(__('#%d (no title)'), $original_object->ID);
                }
                $menu_item->title = ('' == $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } elseif ('post_type_archive' == $menu_item->type) {
                $object = get_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 {
                    $menu_item->_invalid = true;
                    $post_type_description = '';
                }
                $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 = get_post_type_archive_link($menu_item->object);
            } elseif ('taxonomy' == $menu_item->type) {
                $object = get_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;
                }
                $term_url = get_term_link((int) $menu_item->object_id, $menu_item->object);
                $menu_item->url = (!is_wp_error($term_url)) ? $term_url : '';
                $original_title = get_term_field('name', $menu_item->object_id, $menu_item->object, 'raw');
                if (is_wp_error($original_title)) {
                    $original_title = false;
                }
                $menu_item->title = ('' == $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } else {
                $menu_item->type_label = __('Custom Link');
                $menu_item->title = $menu_item->post_title;
                $menu_item->url = (!isset($menu_item->url)) ? get_post_meta($menu_item->ID, '_menu_item_url', true) : $menu_item->url;
            }
            $menu_item->target = (!isset($menu_item->target)) ? get_post_meta($menu_item->ID, '_menu_item_target', true) : $menu_item->target;
            /**
             * 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) get_post_meta($menu_item->ID, '_menu_item_classes', true) : $menu_item->classes;
            $menu_item->xfn = (!isset($menu_item->xfn)) ? get_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 = get_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 = get_permalink($menu_item->ID);
            $menu_item->target = '';
            /** 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 = get_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 = get_term_link($menu_item, $menu_item->taxonomy);
        $menu_item->target = '';
        $menu_item->attr_title = '';
        $menu_item->description = get_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);
}

WordPress Version: 4.5

/**
 * Decorates a menu item object with the shared navigation menu item properties.
 *
 * Properties:
 * - ID:               The term_id if the menu item represents a taxonomy term.
 * - attr_title:       The title attribute of the link element for this menu item.
 * - classes:          The array of class attribute values for the link 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 represents, 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 represents a post that lacks a title.
 * - target:           The target attribute of the link 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 points.
 * - xfn:              The XFN relationship expressed in the link of this menu item.
 * - _invalid:         Whether the menu item represents an object that no longer exists.
 *
 * @since 3.0.0
 *
 * @param object $menu_item The menu item to modify.
 * @return object $menu_item The menu item with standard menu item properties.
 */
function wp_setup_nav_menu_item($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)) ? get_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)) ? get_post_meta($menu_item->ID, '_menu_item_object_id', true) : $menu_item->object_id;
            $menu_item->object = (!isset($menu_item->object)) ? get_post_meta($menu_item->ID, '_menu_item_object', true) : $menu_item->object;
            $menu_item->type = (!isset($menu_item->type)) ? get_post_meta($menu_item->ID, '_menu_item_type', true) : $menu_item->type;
            if ('post_type' == $menu_item->type) {
                $object = get_post_type_object($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;
                }
                $menu_item->url = get_permalink($menu_item->object_id);
                $original_object = get_post($menu_item->object_id);
                /** This filter is documented in wp-includes/post-template.php */
                $original_title = apply_filters('the_title', $original_object->post_title, $original_object->ID);
                if ('' === $original_title) {
                    /* translators: %d: ID of a post */
                    $original_title = sprintf(__('#%d (no title)'), $original_object->ID);
                }
                $menu_item->title = ('' == $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } elseif ('post_type_archive' == $menu_item->type) {
                $object = get_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 {
                    $menu_item->_invalid = true;
                    $post_type_description = '';
                }
                $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 = get_post_type_archive_link($menu_item->object);
            } elseif ('taxonomy' == $menu_item->type) {
                $object = get_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;
                }
                $term_url = get_term_link((int) $menu_item->object_id, $menu_item->object);
                $menu_item->url = (!is_wp_error($term_url)) ? $term_url : '';
                $original_title = get_term_field('name', $menu_item->object_id, $menu_item->object, 'raw');
                if (is_wp_error($original_title)) {
                    $original_title = false;
                }
                $menu_item->title = ('' == $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } else {
                $menu_item->type_label = __('Custom Link');
                $menu_item->title = $menu_item->post_title;
                $menu_item->url = (!isset($menu_item->url)) ? get_post_meta($menu_item->ID, '_menu_item_url', true) : $menu_item->url;
            }
            $menu_item->target = (!isset($menu_item->target)) ? get_post_meta($menu_item->ID, '_menu_item_target', true) : $menu_item->target;
            /**
             * Filter 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)) {
                /**
                 * Filter 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) get_post_meta($menu_item->ID, '_menu_item_classes', true) : $menu_item->classes;
            $menu_item->xfn = (!isset($menu_item->xfn)) ? get_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 = get_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 = get_permalink($menu_item->ID);
            $menu_item->target = '';
            /** 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 = get_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 = get_term_link($menu_item, $menu_item->taxonomy);
        $menu_item->target = '';
        $menu_item->attr_title = '';
        $menu_item->description = get_term_field('description', $menu_item->term_id, $menu_item->taxonomy);
        $menu_item->classes = array();
        $menu_item->xfn = '';
    }
    /**
     * Filter 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);
}

WordPress Version: 4.4

/**
 * Decorates a menu item object with the shared navigation menu item properties.
 *
 * Properties:
 * - ID:               The term_id if the menu item represents a taxonomy term.
 * - attr_title:       The title attribute of the link element for this menu item.
 * - classes:          The array of class attribute values for the link 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 represents, 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 represents a post that lacks a title.
 * - target:           The target attribute of the link 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 points.
 * - xfn:              The XFN relationship expressed in the link of this menu item.
 * - _invalid:         Whether the menu item represents an object that no longer exists.
 *
 * @since 3.0.0
 *
 * @param object $menu_item The menu item to modify.
 * @return object $menu_item The menu item with standard menu item properties.
 */
function wp_setup_nav_menu_item($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)) ? get_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)) ? get_post_meta($menu_item->ID, '_menu_item_object_id', true) : $menu_item->object_id;
            $menu_item->object = (!isset($menu_item->object)) ? get_post_meta($menu_item->ID, '_menu_item_object', true) : $menu_item->object;
            $menu_item->type = (!isset($menu_item->type)) ? get_post_meta($menu_item->ID, '_menu_item_type', true) : $menu_item->type;
            if ('post_type' == $menu_item->type) {
                $object = get_post_type_object($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;
                }
                $menu_item->url = get_permalink($menu_item->object_id);
                $original_object = get_post($menu_item->object_id);
                $original_title = $original_object->post_title;
                if ('' === $original_title) {
                    /* translators: %d: ID of a post */
                    $original_title = sprintf(__('#%d (no title)'), $original_object->ID);
                }
                $menu_item->title = ('' == $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } elseif ('post_type_archive' == $menu_item->type) {
                $object = get_post_type_object($menu_item->object);
                if ($object) {
                    $menu_item->title = ('' == $menu_item->post_title) ? $object->labels->archives : $menu_item->post_title;
                } else {
                    $menu_item->_invalid = true;
                }
                $menu_item->type_label = __('Post Type Archive');
                $menu_item->description = '';
                $menu_item->url = get_post_type_archive_link($menu_item->object);
            } elseif ('taxonomy' == $menu_item->type) {
                $object = get_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;
                }
                $term_url = get_term_link((int) $menu_item->object_id, $menu_item->object);
                $menu_item->url = (!is_wp_error($term_url)) ? $term_url : '';
                $original_title = get_term_field('name', $menu_item->object_id, $menu_item->object, 'raw');
                if (is_wp_error($original_title)) {
                    $original_title = false;
                }
                $menu_item->title = ('' == $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } else {
                $menu_item->type_label = __('Custom Link');
                $menu_item->title = $menu_item->post_title;
                $menu_item->url = (!isset($menu_item->url)) ? get_post_meta($menu_item->ID, '_menu_item_url', true) : $menu_item->url;
            }
            $menu_item->target = (!isset($menu_item->target)) ? get_post_meta($menu_item->ID, '_menu_item_target', true) : $menu_item->target;
            /**
             * Filter 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)) {
                /**
                 * Filter 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) get_post_meta($menu_item->ID, '_menu_item_classes', true) : $menu_item->classes;
            $menu_item->xfn = (!isset($menu_item->xfn)) ? get_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 = get_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 = get_permalink($menu_item->ID);
            $menu_item->target = '';
            /** 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 = get_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 = get_term_link($menu_item, $menu_item->taxonomy);
        $menu_item->target = '';
        $menu_item->attr_title = '';
        $menu_item->description = get_term_field('description', $menu_item->term_id, $menu_item->taxonomy);
        $menu_item->classes = array();
        $menu_item->xfn = '';
    }
    /**
     * Filter 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);
}

WordPress Version: 4.3

/**
 * Decorates a menu item object with the shared navigation menu item properties.
 *
 * Properties:
 * - ID:               The term_id if the menu item represents a taxonomy term.
 * - attr_title:       The title attribute of the link element for this menu item.
 * - classes:          The array of class attribute values for the link 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 represents, 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 represents a post that lacks a title.
 * - target:           The target attribute of the link 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 points.
 * - xfn:              The XFN relationship expressed in the link of this menu item.
 * - _invalid:         Whether the menu item represents an object that no longer exists.
 *
 * @since 3.0.0
 *
 * @param object $menu_item The menu item to modify.
 * @return object $menu_item The menu item with standard menu item properties.
 */
function wp_setup_nav_menu_item($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)) ? get_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)) ? get_post_meta($menu_item->ID, '_menu_item_object_id', true) : $menu_item->object_id;
            $menu_item->object = (!isset($menu_item->object)) ? get_post_meta($menu_item->ID, '_menu_item_object', true) : $menu_item->object;
            $menu_item->type = (!isset($menu_item->type)) ? get_post_meta($menu_item->ID, '_menu_item_type', true) : $menu_item->type;
            if ('post_type' == $menu_item->type) {
                $object = get_post_type_object($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;
                }
                $menu_item->url = get_permalink($menu_item->object_id);
                $original_object = get_post($menu_item->object_id);
                $original_title = $original_object->post_title;
                if ('' === $original_title) {
                    /* translators: %d: ID of a post */
                    $original_title = sprintf(__('#%d (no title)'), $original_object->ID);
                }
                $menu_item->title = ('' == $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } elseif ('taxonomy' == $menu_item->type) {
                $object = get_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;
                }
                $term_url = get_term_link((int) $menu_item->object_id, $menu_item->object);
                $menu_item->url = (!is_wp_error($term_url)) ? $term_url : '';
                $original_title = get_term_field('name', $menu_item->object_id, $menu_item->object, 'raw');
                if (is_wp_error($original_title)) {
                    $original_title = false;
                }
                $menu_item->title = ('' == $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } else {
                $menu_item->type_label = __('Custom Link');
                $menu_item->title = $menu_item->post_title;
                $menu_item->url = (!isset($menu_item->url)) ? get_post_meta($menu_item->ID, '_menu_item_url', true) : $menu_item->url;
            }
            $menu_item->target = (!isset($menu_item->target)) ? get_post_meta($menu_item->ID, '_menu_item_target', true) : $menu_item->target;
            /**
             * Filter 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)) {
                /**
                 * Filter 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) get_post_meta($menu_item->ID, '_menu_item_classes', true) : $menu_item->classes;
            $menu_item->xfn = (!isset($menu_item->xfn)) ? get_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 = get_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 = get_permalink($menu_item->ID);
            $menu_item->target = '';
            /** 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 = get_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 = get_term_link($menu_item, $menu_item->taxonomy);
        $menu_item->target = '';
        $menu_item->attr_title = '';
        $menu_item->description = get_term_field('description', $menu_item->term_id, $menu_item->taxonomy);
        $menu_item->classes = array();
        $menu_item->xfn = '';
    }
    /**
     * Filter 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);
}

WordPress Version: 4.2

/**
 * Decorates a menu item object with the shared navigation menu item properties.
 *
 * Properties:
 * - db_id: 		The DB ID of this item as a nav_menu_item object, if it exists (0 if it doesn't exist).
 * - object_id:		The DB ID of the original object this menu item represents, e.g. ID for posts and term_id for categories.
 * - type:		The family of objects originally represented, such as "post_type" or "taxonomy."
 * - object:		The type of object originally represented, such as "category," "post", or "attachment."
 * - type_label:	The singular label used to describe this type of menu item.
 * - post_parent:	The DB ID of the original object's parent object, if any (0 otherwise).
 * - menu_item_parent: 	The DB ID of the nav_menu_item that is this item's menu parent, if any. 0 otherwise.
 * - url:		The URL to which this menu item points.
 * - title:		The title of this menu item.
 * - target: 		The target attribute of the link element for this menu item.
 * - attr_title:	The title attribute of the link element for this menu item.
 * - classes:		The array of class attribute values for the link element of this menu item.
 * - xfn:		The XFN relationship expressed in the link of this menu item.
 * - description:	The description of this menu item.
 *
 * @since 3.0.0
 *
 * @param object $menu_item The menu item to modify.
 * @return object $menu_item The menu item with standard menu item properties.
 */
function wp_setup_nav_menu_item($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 = empty($menu_item->menu_item_parent) ? get_post_meta($menu_item->ID, '_menu_item_menu_item_parent', true) : $menu_item->menu_item_parent;
            $menu_item->object_id = empty($menu_item->object_id) ? get_post_meta($menu_item->ID, '_menu_item_object_id', true) : $menu_item->object_id;
            $menu_item->object = empty($menu_item->object) ? get_post_meta($menu_item->ID, '_menu_item_object', true) : $menu_item->object;
            $menu_item->type = empty($menu_item->type) ? get_post_meta($menu_item->ID, '_menu_item_type', true) : $menu_item->type;
            if ('post_type' == $menu_item->type) {
                $object = get_post_type_object($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;
                }
                $menu_item->url = get_permalink($menu_item->object_id);
                $original_object = get_post($menu_item->object_id);
                $original_title = $original_object->post_title;
                if ('' === $original_title) {
                    $original_title = sprintf(__('#%d (no title)'), $original_object->ID);
                }
                $menu_item->title = ('' == $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } elseif ('taxonomy' == $menu_item->type) {
                $object = get_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;
                }
                $term_url = get_term_link((int) $menu_item->object_id, $menu_item->object);
                $menu_item->url = (!is_wp_error($term_url)) ? $term_url : '';
                $original_title = get_term_field('name', $menu_item->object_id, $menu_item->object, 'raw');
                if (is_wp_error($original_title)) {
                    $original_title = false;
                }
                $menu_item->title = ('' == $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } else {
                $menu_item->type_label = __('Custom Link');
                $menu_item->title = $menu_item->post_title;
                $menu_item->url = empty($menu_item->url) ? get_post_meta($menu_item->ID, '_menu_item_url', true) : $menu_item->url;
            }
            $menu_item->target = empty($menu_item->target) ? get_post_meta($menu_item->ID, '_menu_item_target', true) : $menu_item->target;
            /**
             * Filter a navigation menu item's title attribute.
             *
             * @since 3.0.0
             *
             * @param string $item_title The menu item title attribute.
             */
            $menu_item->attr_title = empty($menu_item->attr_title) ? apply_filters('nav_menu_attr_title', $menu_item->post_excerpt) : $menu_item->attr_title;
            if (empty($menu_item->description)) {
                /**
                 * Filter 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 = empty($menu_item->classes) ? (array) get_post_meta($menu_item->ID, '_menu_item_classes', true) : $menu_item->classes;
            $menu_item->xfn = empty($menu_item->xfn) ? get_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 = get_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) {
                $menu_item->post_title = sprintf(__('#%d (no title)'), $menu_item->ID);
            }
            $menu_item->title = $menu_item->post_title;
            $menu_item->url = get_permalink($menu_item->ID);
            $menu_item->target = '';
            /** 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 = get_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 = get_term_link($menu_item, $menu_item->taxonomy);
        $menu_item->target = '';
        $menu_item->attr_title = '';
        $menu_item->description = get_term_field('description', $menu_item->term_id, $menu_item->taxonomy);
        $menu_item->classes = array();
        $menu_item->xfn = '';
    }
    /**
     * Filter 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);
}

WordPress Version: 4.1

/**
 * Decorates a menu item object with the shared navigation menu item properties.
 *
 * Properties:
 * - db_id: 		The DB ID of this item as a nav_menu_item object, if it exists (0 if it doesn't exist).
 * - object_id:		The DB ID of the original object this menu item represents, e.g. ID for posts and term_id for categories.
 * - type:		The family of objects originally represented, such as "post_type" or "taxonomy."
 * - object:		The type of object originally represented, such as "category," "post", or "attachment."
 * - type_label:	The singular label used to describe this type of menu item.
 * - post_parent:	The DB ID of the original object's parent object, if any (0 otherwise).
 * - menu_item_parent: 	The DB ID of the nav_menu_item that is this item's menu parent, if any. 0 otherwise.
 * - url:		The URL to which this menu item points.
 * - title:		The title of this menu item.
 * - target: 		The target attribute of the link element for this menu item.
 * - attr_title:	The title attribute of the link element for this menu item.
 * - classes:		The array of class attribute values for the link element of this menu item.
 * - xfn:		The XFN relationship expressed in the link of this menu item.
 * - description:	The description of this menu item.
 *
 * @since 3.0.0
 *
 * @param object $menu_item The menu item to modify.
 * @return object $menu_item The menu item with standard menu item properties.
 */
function wp_setup_nav_menu_item($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 = empty($menu_item->menu_item_parent) ? get_post_meta($menu_item->ID, '_menu_item_menu_item_parent', true) : $menu_item->menu_item_parent;
            $menu_item->object_id = empty($menu_item->object_id) ? get_post_meta($menu_item->ID, '_menu_item_object_id', true) : $menu_item->object_id;
            $menu_item->object = empty($menu_item->object) ? get_post_meta($menu_item->ID, '_menu_item_object', true) : $menu_item->object;
            $menu_item->type = empty($menu_item->type) ? get_post_meta($menu_item->ID, '_menu_item_type', true) : $menu_item->type;
            if ('post_type' == $menu_item->type) {
                $object = get_post_type_object($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;
                }
                $menu_item->url = get_permalink($menu_item->object_id);
                $original_object = get_post($menu_item->object_id);
                $original_title = $original_object->post_title;
                if ('' === $original_title) {
                    $original_title = sprintf(__('#%d (no title)'), $original_object->ID);
                }
                $menu_item->title = ('' == $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } elseif ('taxonomy' == $menu_item->type) {
                $object = get_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;
                }
                $term_url = get_term_link((int) $menu_item->object_id, $menu_item->object);
                $menu_item->url = (!is_wp_error($term_url)) ? $term_url : '';
                $original_title = get_term_field('name', $menu_item->object_id, $menu_item->object, 'raw');
                if (is_wp_error($original_title)) {
                    $original_title = false;
                }
                $menu_item->title = ('' == $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } else {
                $menu_item->type_label = __('Custom');
                $menu_item->title = $menu_item->post_title;
                $menu_item->url = empty($menu_item->url) ? get_post_meta($menu_item->ID, '_menu_item_url', true) : $menu_item->url;
            }
            $menu_item->target = empty($menu_item->target) ? get_post_meta($menu_item->ID, '_menu_item_target', true) : $menu_item->target;
            /**
             * Filter a navigation menu item's title attribute.
             *
             * @since 3.0.0
             *
             * @param string $item_title The menu item title attribute.
             */
            $menu_item->attr_title = empty($menu_item->attr_title) ? apply_filters('nav_menu_attr_title', $menu_item->post_excerpt) : $menu_item->attr_title;
            if (empty($menu_item->description)) {
                /**
                 * Filter 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 = empty($menu_item->classes) ? (array) get_post_meta($menu_item->ID, '_menu_item_classes', true) : $menu_item->classes;
            $menu_item->xfn = empty($menu_item->xfn) ? get_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 = get_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) {
                $menu_item->post_title = sprintf(__('#%d (no title)'), $menu_item->ID);
            }
            $menu_item->title = $menu_item->post_title;
            $menu_item->url = get_permalink($menu_item->ID);
            $menu_item->target = '';
            /** 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 = get_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 = get_term_link($menu_item, $menu_item->taxonomy);
        $menu_item->target = '';
        $menu_item->attr_title = '';
        $menu_item->description = get_term_field('description', $menu_item->term_id, $menu_item->taxonomy);
        $menu_item->classes = array();
        $menu_item->xfn = '';
    }
    /**
     * Filter 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);
}

WordPress Version: 3.9

/**
 * Decorates a menu item object with the shared navigation menu item properties.
 *
 * Properties:
 * - db_id: 		The DB ID of this item as a nav_menu_item object, if it exists (0 if it doesn't exist).
 * - object_id:		The DB ID of the original object this menu item represents, e.g. ID for posts and term_id for categories.
 * - type:		The family of objects originally represented, such as "post_type" or "taxonomy."
 * - object:		The type of object originally represented, such as "category," "post", or "attachment."
 * - type_label:	The singular label used to describe this type of menu item.
 * - post_parent:	The DB ID of the original object's parent object, if any (0 otherwise).
 * - menu_item_parent: 	The DB ID of the nav_menu_item that is this item's menu parent, if any. 0 otherwise.
 * - url:		The URL to which this menu item points.
 * - title:		The title of this menu item.
 * - target: 		The target attribute of the link element for this menu item.
 * - attr_title:	The title attribute of the link element for this menu item.
 * - classes:		The array of class attribute values for the link element of this menu item.
 * - xfn:		The XFN relationship expressed in the link of this menu item.
 * - description:	The description of this menu item.
 *
 * @since 3.0.0
 *
 * @param object $menu_item The menu item to modify.
 * @return object $menu_item The menu item with standard menu item properties.
 */
function wp_setup_nav_menu_item($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 = empty($menu_item->menu_item_parent) ? get_post_meta($menu_item->ID, '_menu_item_menu_item_parent', true) : $menu_item->menu_item_parent;
            $menu_item->object_id = empty($menu_item->object_id) ? get_post_meta($menu_item->ID, '_menu_item_object_id', true) : $menu_item->object_id;
            $menu_item->object = empty($menu_item->object) ? get_post_meta($menu_item->ID, '_menu_item_object', true) : $menu_item->object;
            $menu_item->type = empty($menu_item->type) ? get_post_meta($menu_item->ID, '_menu_item_type', true) : $menu_item->type;
            if ('post_type' == $menu_item->type) {
                $object = get_post_type_object($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;
                }
                $menu_item->url = get_permalink($menu_item->object_id);
                $original_object = get_post($menu_item->object_id);
                $original_title = $original_object->post_title;
                $menu_item->title = ('' == $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } elseif ('taxonomy' == $menu_item->type) {
                $object = get_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;
                }
                $term_url = get_term_link((int) $menu_item->object_id, $menu_item->object);
                $menu_item->url = (!is_wp_error($term_url)) ? $term_url : '';
                $original_title = get_term_field('name', $menu_item->object_id, $menu_item->object, 'raw');
                if (is_wp_error($original_title)) {
                    $original_title = false;
                }
                $menu_item->title = ('' == $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } else {
                $menu_item->type_label = __('Custom');
                $menu_item->title = $menu_item->post_title;
                $menu_item->url = empty($menu_item->url) ? get_post_meta($menu_item->ID, '_menu_item_url', true) : $menu_item->url;
            }
            $menu_item->target = empty($menu_item->target) ? get_post_meta($menu_item->ID, '_menu_item_target', true) : $menu_item->target;
            /**
             * Filter a navigation menu item's title attribute.
             *
             * @since 3.0.0
             *
             * @param string $item_title The menu item title attribute.
             */
            $menu_item->attr_title = empty($menu_item->attr_title) ? apply_filters('nav_menu_attr_title', $menu_item->post_excerpt) : $menu_item->attr_title;
            if (empty($menu_item->description)) {
                /**
                 * Filter 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 = empty($menu_item->classes) ? (array) get_post_meta($menu_item->ID, '_menu_item_classes', true) : $menu_item->classes;
            $menu_item->xfn = empty($menu_item->xfn) ? get_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 = get_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) {
                $menu_item->post_title = sprintf(__('#%d (no title)'), $menu_item->ID);
            }
            $menu_item->title = $menu_item->post_title;
            $menu_item->url = get_permalink($menu_item->ID);
            $menu_item->target = '';
            /** 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 = get_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 = get_term_link($menu_item, $menu_item->taxonomy);
        $menu_item->target = '';
        $menu_item->attr_title = '';
        $menu_item->description = get_term_field('description', $menu_item->term_id, $menu_item->taxonomy);
        $menu_item->classes = array();
        $menu_item->xfn = '';
    }
    /**
     * Filter 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);
}

WordPress Version: 3.7

/**
 * Decorates a menu item object with the shared navigation menu item properties.
 *
 * Properties:
 * - db_id: 		The DB ID of this item as a nav_menu_item object, if it exists (0 if it doesn't exist).
 * - object_id:		The DB ID of the original object this menu item represents, e.g. ID for posts and term_id for categories.
 * - type:		The family of objects originally represented, such as "post_type" or "taxonomy."
 * - object:		The type of object originally represented, such as "category," "post", or "attachment."
 * - type_label:	The singular label used to describe this type of menu item.
 * - post_parent:	The DB ID of the original object's parent object, if any (0 otherwise).
 * - menu_item_parent: 	The DB ID of the nav_menu_item that is this item's menu parent, if any. 0 otherwise.
 * - url:		The URL to which this menu item points.
 * - title:		The title of this menu item.
 * - target: 		The target attribute of the link element for this menu item.
 * - attr_title:	The title attribute of the link element for this menu item.
 * - classes:		The array of class attribute values for the link element of this menu item.
 * - xfn:		The XFN relationship expressed in the link of this menu item.
 * - description:	The description of this menu item.
 *
 * @since 3.0.0
 *
 * @param object $menu_item The menu item to modify.
 * @return object $menu_item The menu item with standard menu item properties.
 */
function wp_setup_nav_menu_item($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 = empty($menu_item->menu_item_parent) ? get_post_meta($menu_item->ID, '_menu_item_menu_item_parent', true) : $menu_item->menu_item_parent;
            $menu_item->object_id = empty($menu_item->object_id) ? get_post_meta($menu_item->ID, '_menu_item_object_id', true) : $menu_item->object_id;
            $menu_item->object = empty($menu_item->object) ? get_post_meta($menu_item->ID, '_menu_item_object', true) : $menu_item->object;
            $menu_item->type = empty($menu_item->type) ? get_post_meta($menu_item->ID, '_menu_item_type', true) : $menu_item->type;
            if ('post_type' == $menu_item->type) {
                $object = get_post_type_object($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;
                }
                $menu_item->url = get_permalink($menu_item->object_id);
                $original_object = get_post($menu_item->object_id);
                $original_title = $original_object->post_title;
                $menu_item->title = ('' == $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } elseif ('taxonomy' == $menu_item->type) {
                $object = get_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;
                }
                $term_url = get_term_link((int) $menu_item->object_id, $menu_item->object);
                $menu_item->url = (!is_wp_error($term_url)) ? $term_url : '';
                $original_title = get_term_field('name', $menu_item->object_id, $menu_item->object, 'raw');
                if (is_wp_error($original_title)) {
                    $original_title = false;
                }
                $menu_item->title = ('' == $menu_item->post_title) ? $original_title : $menu_item->post_title;
            } else {
                $menu_item->type_label = __('Custom');
                $menu_item->title = $menu_item->post_title;
                $menu_item->url = empty($menu_item->url) ? get_post_meta($menu_item->ID, '_menu_item_url', true) : $menu_item->url;
            }
            $menu_item->target = empty($menu_item->target) ? get_post_meta($menu_item->ID, '_menu_item_target', true) : $menu_item->target;
            $menu_item->attr_title = empty($menu_item->attr_title) ? apply_filters('nav_menu_attr_title', $menu_item->post_excerpt) : $menu_item->attr_title;
            if (empty($menu_item->description)) {
                $menu_item->description = apply_filters('nav_menu_description', wp_trim_words($menu_item->post_content, 200));
            }
            $menu_item->classes = empty($menu_item->classes) ? (array) get_post_meta($menu_item->ID, '_menu_item_classes', true) : $menu_item->classes;
            $menu_item->xfn = empty($menu_item->xfn) ? get_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 = get_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) {
                $menu_item->post_title = sprintf(__('#%d (no title)'), $menu_item->ID);
            }
            $menu_item->title = $menu_item->post_title;
            $menu_item->url = get_permalink($menu_item->ID);
            $menu_item->target = '';
            $menu_item->attr_title = apply_filters('nav_menu_attr_title', '');
            $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 = get_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 = get_term_link($menu_item, $menu_item->taxonomy);
        $menu_item->target = '';
        $menu_item->attr_title = '';
        $menu_item->description = get_term_field('description', $menu_item->term_id, $menu_item->taxonomy);
        $menu_item->classes = array();
        $menu_item->xfn = '';
    }
    return apply_filters('wp_setup_nav_menu_item', $menu_item);
}