Tramite le funzioni API, desidero definire un nuovo menu di navigazione , selezionarlo nel tema corrente, quindi inserire alcune pagine come voci di menu. Questo deve essere fatto ad esempio con l'attivazione di un tema.
Attraverso un processo (moderatamente doloroso) di reverse engineering, il database inserisce e aggiorna dopo aver impostato manualmente il menu e gli elementi di navigazione, ho messo insieme i seguenti passaggi, in cui "footer-nav" è l'ID slug del menu di navigazione I " sto creando:
if (!term_exists('footer-nav', 'nav_menu')) {
$menu = wp_insert_term('Footer nav', 'nav_menu', array('slug' => 'footer-nav'));
// Select this menu in the current theme
update_option('theme_mods_'.get_current_theme(), array("nav_menu_locations" => array("primary" => $menu['term_id'])));
// Insert new page
$page = wp_insert_post(array('post_title' => 'Blog',
'post_content' => '',
'post_status' => 'publish',
'post_type' => 'page'));
// Insert new nav_menu_item
$nav_item = wp_insert_post(array('post_title' => 'News',
'post_content' => '',
'post_status' => 'publish',
'post_type' => 'nav_menu_item'));
add_post_meta($nav_item, '_menu_item_type', 'post_type');
add_post_meta($nav_item, '_menu_item_menu_item_parent', '0');
add_post_meta($nav_item, '_menu_item_object_id', $page);
add_post_meta($nav_item, '_menu_item_object', 'page');
add_post_meta($nav_item, '_menu_item_target', '');
add_post_meta($nav_item, '_menu_item_classes', 'a:1:{i:0;s:0:"";}');
add_post_meta($nav_item, '_menu_item_xfn', '');
add_post_meta($nav_item, '_menu_item_url', '');
wp_set_object_terms($nav_item, 'footer-nav', 'nav_menu');
}
Questo sembra funzionare, ma:
- è un modo robusto ed elegante per farlo?
- mi sto perdendo qualcosa di totalmente ovvio che farebbe tutto questo in una riga di codice?