我正在工作的网站具有复杂的“大型菜单”类型导航。我希望内容编辑器能够按标记中的列对菜单项进行分组。通常,如果我想要6列,我将注册6个菜单并将它们命名为1-6列,但是这些是动态子菜单,需要成为另一个菜单中另一个导航项的子菜单。

我真正想做的是创建一种新的导航菜单项(当前为页面,链接,类别以及我的其他自定义帖子类型和自定义分类法),其中该项仅用于列。 (我在列中使用它的事实在这里并不重要。这可以很容易地用作分隔符或其他东西。我只需要一个新的nav-menu项类型,当我使用它时就可以创建特殊标记构建菜单。)

有没有一种方法可以创建新的导航菜单项类型,而不必创建仅用于此目的的自定义帖子类型或自定义分类法?

最佳答案

最后,我要做的是添加一个新的帖子类型,该网站类型除了导航菜单之外,其他地方都隐藏了。然后,我仅添加了该帖子类型类型的单个条目,并隐藏了某些字段。

<?php

function navMenuColumns_init() {
    register_post_type('menu_column',
        array(
            'labels' => array(
                'name'              => __('Menu Columns'),
                'singular_name'     => __('Menu Column')
            ),
            'supports' => array('title'),

            // Doesn't need to be listed most places as it's not a valid content item on it's own
            'public'                => false, // Base setting. More specific settings below
            'exclude_from_search'   => false,
            'publicly_queryable'    => false,
            'show_ui'               => false,
            'show_in_menu'          => false,
            'show_in_nav_menus'     => true,  // The only thing this is used for
            'show_in_admin_bar'     => false,
            'has_archive'           => false,
        )
    );

    $_version = (float)get_option('navMenuColumns_version', 0.0);

    if ($_version < 1.0) {
        navMenuColumns_install10();
    }

    add_action('admin_footer', 'navMenuColumns_adminFooter');
}

function navMenuColumns_install10() {
    $navMenuPost = wp_insert_post(array(
        'post_type'     => 'menu_column',
        'post_title'    => 'Column',
        'post_status'   => 'publish'
    ), true);

    if (!is_wp_error($navMenuPost)) {
        update_option('navMenuColumns_version', 1.0);
    }
}

function navMenuColumns_adminFooter() {
    ?><script>
        jQuery(document).ready(function($) {
            // Hides most of the fields when editing a Menu Column item.
            $('#menu-to-edit').on('click', 'a.item-edit', function() {
                var $li = $(this).parents('li.menu-item');

                if ($li.find('.item-type').text() == 'Menu Column') {
                    $li.find('p.description').hide();
                    $li.find('p.link-to-original').hide();
                    $li.find('p.field-move').show();
                }
            });
        });
    </script><?php
}

add_action('init', 'navMenuColumns_init');

?>


这允许用户将其添加为普通菜单项。这无法与为您构建菜单标记的功能配合使用,但是如果您遍历菜单项并为您构建标记,则可以使用自定义标记来定位此帖子类型。

关于menu - 创建新类型的导航菜单项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19963210/

10-11 22:16
查看更多