/** * Attempt to create a new menu item from import data * * Fails for draft, orphaned menu items and those without an associated nav_menu * or an invalid nav_menu term. If the post type or term object which the menu item * represents doesn't exist then the menu item will not be imported (waits until the * end of the import to retry again before discarding). * * @param array $item Menu item details from WXR file */ function process_menu_item($item) { // skip draft, orphaned menu items if ('draft' == $item['status']) { return; } $menu_slug = false; if (isset($item['terms'])) { // loop through terms, assume first nav_menu term is correct menu foreach ($item['terms'] as $term) { if ('nav_menu' == $term['domain']) { $menu_slug = $term['slug']; break; } } } // no nav_menu term associated with this menu item if (!$menu_slug) { _e('Menu item skipped due to missing menu slug', 'wordpress-importer'); echo '<br />'; return; } $menu_id = term_exists($menu_slug, 'nav_menu'); if (!$menu_id) { printf(__('Menu item skipped due to invalid menu slug: %s', 'wordpress-importer'), esc_html($menu_slug)); echo '<br />'; return; } else { $menu_id = is_array($menu_id) ? $menu_id['term_id'] : $menu_id; } foreach ($item['postmeta'] as $meta) { ${$meta}['key'] = $meta['value']; } if ('taxonomy' == $_menu_item_type && isset($this->processed_terms[intval($_menu_item_object_id)])) { $_menu_item_object_id = $this->processed_terms[intval($_menu_item_object_id)]; } else { if ('post_type' == $_menu_item_type && isset($this->processed_posts[intval($_menu_item_object_id)])) { $_menu_item_object_id = $this->processed_posts[intval($_menu_item_object_id)]; } else { if ('custom' != $_menu_item_type) { // associated object is missing or not imported yet, we'll retry later $this->missing_menu_items[] = $item; return; } } } if (isset($this->processed_menu_items[intval($_menu_item_menu_item_parent)])) { $_menu_item_menu_item_parent = $this->processed_menu_items[intval($_menu_item_menu_item_parent)]; } else { if ($_menu_item_menu_item_parent) { $this->menu_item_orphans[intval($item['post_id'])] = (int) $_menu_item_menu_item_parent; $_menu_item_menu_item_parent = 0; } } // wp_update_nav_menu_item expects CSS classes as a space separated string $_menu_item_classes = maybe_unserialize($_menu_item_classes); if (is_array($_menu_item_classes)) { $_menu_item_classes = implode(' ', $_menu_item_classes); } $args = array('menu-item-object-id' => $_menu_item_object_id, 'menu-item-object' => $_menu_item_object, 'menu-item-parent-id' => $_menu_item_menu_item_parent, 'menu-item-position' => intval($item['menu_order']), 'menu-item-type' => $_menu_item_type, 'menu-item-title' => $item['post_title'], 'menu-item-url' => $_menu_item_url, 'menu-item-description' => $item['post_content'], 'menu-item-attr-title' => $item['post_excerpt'], 'menu-item-target' => $_menu_item_target, 'menu-item-classes' => $_menu_item_classes, 'menu-item-xfn' => $_menu_item_xfn, 'menu-item-status' => $item['status']); $id = wp_update_nav_menu_item($menu_id, 0, $args); if ($id && !is_wp_error($id)) { $this->processed_menu_items[intval($item['post_id'])] = (int) $id; if (!empty($tf_megamenu_options)) { update_post_meta($id, 'tf_megamenu_options', tfuse_mb_unserialize($tf_megamenu_options)); } } }
function tfuse_unpk($data) { return tfuse_mb_unserialize(urldecode($data)); }