ゴール
Wordpress では、 「外観 -> メニュー」からメニューにある場合、管理者メニューを自動的に作成しようとしています。これで、開発できました。
私が苦労している部分は、その特異性によるものです。トップレベルのメニューを第 2レベルのメニューに直接接続し、トップレベルのメニューに元の名前を維持させようとしています。
コード
「外観→メニュー」で設定
Callsigns
-> Alpha
-> Bravo
-> Charlie
最上位メニュー「Callsigns」のオプションが変更されました。ナビゲーション ラベルは「アルファ」で、タイトル属性は「コールサイン」です。
関数.php
add_action('init', 'register_my_menus' );
function register_my_menus() {
register_nav_menus( array('admin-menus' => 'Admin Menus'));
}
add_action('admin_menu', 'my_admin_menus');
function my_admin_menus() {
$locations = get_nav_menu_locations();
$menu = wp_get_nav_menu_object($locations['admin-menus']);
$pages = wp_get_nav_menu_items($menu->term_id);
foreach ($pages as $page) {
if ($page->menu_item_parent == 0)
add_menu_page(
$page->title,
$page->attr_title ? $page->attr_title : $page->title,
'read',
sanitize_title($page->title),
'admin_page_format'
);
else
add_submenu_page(
sanitize_title($page->menu_item_parent->title), // ISSUE
$page->title,
$page->attr_title ? $page->attr_title : $page->title,
'read',
sanitize_title($page->title),
'admin_page_format'
);
}
}
私は、問題であるとかなり確信している行をマークしました。もともと、私は「->」を使用しようとはしませんでしたが、今のところ、上記のように「->」を 2 回続けて使用することはできないと確信しています。
間違った解決策
sanitize_title($page->menu_item_parent->title)
トップレベルのメニューが機能します。正しい名前が付けられ、正しい第 2 レベルのメニューに移動します。ただし、第 2 レベルのメニューは管理メニューとしてまったく表示されません。
sanitize_title(get_the_title($page->menu_item_parent))
上記の間違った解決策と同じ結果です。