Wordpress:在“管理员菜单”页面中添加元框

时间:2012-12-14 08:37:18

标签: wordpress

我正在开发一个插件,它创建了几个虚拟页面,我希望这些链接可以在菜单管理页面中使用,让用户可以在创建菜单时自由添加它们。

我想在菜单管理中添加一个Meta框,与页面/类别元框非常相似,让用户选择要在其菜单中添加的页面。

4 个答案:

答案 0 :(得分:1)

http://codex.wordpress.org/Function_Reference/add_meta_box

使用post_type'导航菜单'

答案 1 :(得分:1)

显然,唯一可行的研究是核心本身。

在这里, /wp-includes/nav-menu.php ,我们可以了解如何插入元框:

add_action('admin_init', 'so_13875144_nav_menu_meta_box');

function so_13875144_nav_menu_meta_box() {
    add_meta_box( 
        'my-custom-nav-box', 
        __('Custom Box'), 
        'so_13875144_display_menu_custom_box', 
        'nav-menus', 
        'side', 
        'default' 
    );
}

function so_13875144_display_menu_custom_box() {
    /* Not sure about this global var */
    //global $_nav_menu_placeholder;
    //$_nav_menu_placeholder = ( 0 > $_nav_menu_placeholder ) ? intval($_nav_menu_placeholder) - 1 : -1;
    ?>
        <p id="menu-item-custom-box">
            <label class="howto" for="custom-menu-item-custom-box">
                <span><?php _e('URL'); ?></span>
                <input id="custom-menu-item-custom-box" name="menu-item[<?php echo $_nav_menu_placeholder; ?>][menu-item-custom-box]" type="text" class="code menu-item-textbox" value="my text" />
            </label>
        </p>
    <?php
}
  

nav menu meta box

,我无法成功完成工作的难点是保存价值。
这是必须要研究的文件 /wp-admin/nav-menus.php

尝试挂钩 wp_update_nav_menu ,但自定义元框输入字段未传递到$_POST

WordPress答案可能有一些提示:https://wordpress.stackexchange.com/search?q=wp_update_nav_menu

答案 2 :(得分:0)

我知道我迟到了,但只是为了其他任何试图这样做的人......

b__是正确的,这是让它在页面上显示的方式,除了它比任何其他字段更容易使用复选框,因为有一个内置的javascript函数可以查找复选框。

您需要做的就是从现有复选框中复制html -

<li><label class="menu-item-title"><input type="checkbox" class="menu-item-checkbox" name="menu-item[-1][menu-item-object-id]" value="2"> Sample Page</label><input type="hidden" class="menu-item-db-id" name="menu-item[-1][menu-item-db-id]" value="0"><input type="hidden" class="menu-item-object" name="menu-item[-1][menu-item-object]" value="page"><input type="hidden" class="menu-item-parent-id" name="menu-item[-1][menu-item-parent-id]" value="0"><input type="hidden" class="menu-item-type" name="menu-item[-1][menu-item-type]" value="post_type"><input type="hidden" class="menu-item-title" name="menu-item[-1][menu-item-title]" value="Sample Page"><input type="hidden" class="menu-item-url" name="menu-item[-1][menu-item-url]" value=""><input type="hidden" class="menu-item-target" name="menu-item[-1][menu-item-target]" value=""><input type="hidden" class="menu-item-attr_title" name="menu-item[-1][menu-item-attr_title]" value=""><input type="hidden" class="menu-item-classes" name="menu-item[-1][menu-item-classes]" value=""><input type="hidden" class="menu-item-xfn" name="menu-item[-1][menu-item-xfn]" value=""></li>

但为每个人提供一个唯一的ID,并将您的详细信息放入URL,标题等。

然后,在末尾添加一个提交按钮以添加到菜单 -

<input type="submit" class="button-secondary submit-add-to-menu right" value="<?php esc_attr_e('Add to Menu'); ?>" name="YOUR NAME" id="YOUR ID" onclick="(function(){$('#THE DIV YOU HAVE PUT YOUR LIST IN').addSelectedToMenu( api.addMenuItemToBottom );})"/>

这应该将项目添加到列表中。

答案 3 :(得分:0)

这是一个非常的老问题,但我今天试图这样做,以防万一它指向正确的方向......

我不会介绍添加元框,因为上面已经介绍过了。我也只会介绍自定义链接,因为我还没有考虑添加帖子、页面、术语链接等。

只是为了介绍我如何到达那里的逻辑...查看 var query = from uc in ctx.user_user_connection from uc2 in ctx.user_user_connection .Where(uc2 => uc2.userid_from == 3464 && uc.userid_to == uc2.userid_from) .DefaultIfEmpty() where uc.userid_from = 3464 && uc2 == null select uc; ,对于自定义链接,您需要使用 wp-admin/js/nav-menu.js。此ajax 提交给window.wpNavMenu.addItemToMenu() 中的函数wp_ajax_add_menu_item()。然后将其提交给 wp-admin/includes/ajax-actions.php 中的 wp_save_nav_menu_items()。查看这些文件的结果是,所有菜单项都是 post_type、taxonomy、post_type_archive 或自定义类型。

根据需要将 javascript 连接到 HTML,但如果您想提交自定义链接,则需要按如下方式调用 wp-admin/includes/nav-menu.php

addItemToMenu()

菜单项类型必须是“自定义”,否则它需要与菜单项相关联的帖子、页面等的信息。