За допомогою функцій API я хочу визначити нове меню навігації , вибрати його в поточній темі, а потім вставити кілька сторінок як пункти меню. Це потрібно зробити, наприклад, для активації теми.
Через (помірно болісний) процес зворотної інженерії база даних вставляє та оновлює після встановлення меню та елементів навігації вручну, я склав наступні кроки, де "footer-nav" - ідентифікатор слугу меню навігації I " м створюю:
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');
}
Це, здається, працює, але:
- це надійний і елегантний спосіб зробити це?
- я пропускаю щось абсолютно очевидне, що могло б зробити все це в одному рядку коду?