0

ゴール

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))

上記の間違った解決策と同じ結果です。

4

1 に答える 1

0

関数.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);

    function get_menu_page($pages, $id) {
        foreach ($pages as $page)
            if ($page->ID == $id) return $page;
    }

    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(get_menu_page($pages, $page->menu_item_parent)->title),
                $page->title,
                $page->attr_title ? $page->attr_title : $page->title,
                'read',
                sanitize_title($page->title),
                'admin_page_format'
            );
    }
}

解決策は、メニュー ループを再度行ってページのオブジェクトを返す関数を作成することでした。

これが最もクリーンな方法だとは思いませんが、これが私が思いついた唯一の方法です。

于 2013-10-08T01:23:08.810 に答える