4

私が取り組んでいるサイトには、複雑な「メガ メニュー」タイプのナビゲーションがあります。コンテンツ編集者がマークアップの列ごとにメニュー項目をグループ化できるようにしたいと考えています。通常、6 つの列が必要な場合は、6 つのメニューを登録して列 1 ~ 6 の名前を付けますが、これらは動的なサブメニューであり、別のメニュー内の別のナビゲーション項目の子にする必要があります。

私が本当にやりたいのは、新しいタイプのナビゲーション メニュー アイテム (現在、ページ、リンク、カテゴリ、および他のカスタム投稿タイプとカスタム分類法) を作成することです。そのアイテムは列専用です。(列に使用しているという事実は、ここでは重要ではありません。これは、簡単に仕切りやその他のものにすることができます。必要なのは、特別なマークアップを作成できる新しいナビゲーション メニュー項目タイプだけです。メニューを作成します。)

この目的のみに使用されるカスタム投稿タイプまたはカスタム分類法を作成することなく、新しいナビゲーション メニュー アイテム タイプを作成する方法はありますか?

4

1 に答える 1

3

このために私が最終的に行ったことは、ナビゲーションメニューを除くサイトのどこにでも隠されている新しい投稿タイプを追加することでした. 次に、その投稿タイプのエントリを 1 つだけ追加し、いくつかのフィールドを非表示にしました。

<?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');

?>

これにより、ユーザーはこれを通常のメニュー項目として追加できます。これは、メニュー マークアップを作成する関数ではうまく機能しませんが、メニュー項目をトラバースしてマークアップを作成する場合は、カスタム マークアップでこの投稿タイプをターゲットにすることができます。

于 2013-11-30T00:05:36.733 に答える