I’m creating a script that automates build a wordpress site from another CMS.
I’ve been able to change every setting: themes, options, subdomain, site title, etc.
But what is eluding me is being able to create custom menus.
The code below SHOULD be able to do it for me. However it is not, and I am completely stumped on what to do.
This code is not being executed in the admin panel (Its not a plugin). Its actually sitting on top of wordpress and includes wp-load and wp-admin functions pages.
$mymenu = wp_get_nav_menu_object("Main Navigation Menu");
$menuID = (int) $mymenu->term_id;
$itemData = array(
'menu-item-db-id' => 0,
'menu-item-object-id' => $pageId,
'menu-item-object' => 'page',
'menu-item-type' => 'post_type',
'menu-item-parent-id' => 0,
'menu-item-position' => $itemOrder,
'menu-item-title' => $pageData['title'],
'menu-item-url' => get_permalink($pageId),
'menu-item-description' => $pageData['post_content'],
'menu-item-attr-title' => $pageData['post_excerpt'],
'menu-item-status' => 'publish',<br />
'menu-item-target' => ''<br />
);
$thisMenuItem = wp_update_nav_menu_item($menuID, 0, $itemData);
$itemData is the result of data coming in from another CMS plus the result of saving it off a post in wordpress to produce the menu item that I want in my menu.
Any help on getting the wp_update_nav_menu_item to save would be very helpful.
Again this is creating a custom menu without the use of the admin panel.`
This was missing from the Question code.
It allows the menu items to bind to the navigation menu itself.
While Paul’s answer was really helpful and definitely put me in the right direction, his code didn’t quite work for my issue.
Basically, the function
wp_get_nav_menu_object()
returns the$menu
object which has (among others)term_id
andterm_taxonomy_id
properties.On my clients WP instance
term_id
andterm_taxonomy_id
weren’t the same.What Paul does is insert the
term_id
property in the relationship table and link it toterm_taxonomy_id
column, but in my case I had to insert theterm_taxonomy_id
property from the$menu
object (and looking at the naming – I believe this is proper).Here’s the link if you want to check up on the difference between
term_id
andterm_taxonomy_id
.So in the end, my code ended up looking like this: