質問: 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'); } これはうまくいくようですが: 堅牢でエレガントな方法ですか。 これらすべてを1行のコードで実行できる、まったく明白なことが足りないのですか。
回答: プログラムでメニュー項目を追加するwp_nav_menu_itemsフィルタにフックすることができます。メインメニューにlogin/logoutメニュー項目を追加するためにあなたのtheme functions.phpのコードの下に置いてください。 'primary'は登録されているメニューの名前/ idです。/** * add login logout menu item in the main menu. * =========================================== */ add_filter( 'wp_nav_menu_items', 'lunchbox_add_loginout_link', 10, 2 ); function lunchbox_add_loginout_link( $items, $args ) { /** * if menu primary menu is set & user is logged in. */ if ( is_user_logged_in() && $args->theme_location == 'primary' ) { $items .= '<li><a href="'. wp_logout_url() .'">log out</a></li>'; } /** * else display login menu item. */ elseif ( !is_user_logged_in() && $args->theme_location == 'primary' ) { $items .= '<li><a href="'. site_url('wp-login.php') .'">log in</a></li>'; } return $items; }