Über API-Funktionen möchte ich ein neues Navigationsmenü definieren , es im aktuellen Thema auswählen und dann einige Seiten als Menüelemente einfügen. Dies soll zum Beispiel bei einer Themenaktivierung geschehen.
Durch einen (mäßig schmerzhaften) Prozess des Reverse Engineerings, bei dem die Datenbank nach dem manuellen Einrichten des Navigationsmenüs und der Elemente eingefügt und aktualisiert wird, habe ich die folgenden Schritte zusammengesetzt, wobei 'footer-nav' die Slug-ID des Navigationsmenüs I 'ist. Ich erstelle:
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');
}
Dies scheint zu funktionieren, aber:
- ist es eine robuste und elegante Art, es zu tun?
- Fehlt mir etwas völlig offensichtliches, das all dies in einer Codezeile tun würde?