我正在开发一个插件,它创建了几个虚拟页面,我希望这些链接在菜单管理页面中可用,让用户在创建菜单时可以自由添加它们。
我想在菜单管理中添加一个元框,非常类似于页面/类别元框,让用户选择要在菜单中添加的页面。
我正在开发一个插件,它创建了几个虚拟页面,我希望这些链接在菜单管理页面中可用,让用户在创建菜单时可以自由添加它们。
我想在菜单管理中添加一个元框,非常类似于页面/类别元框,让用户选择要在菜单中添加的页面。
http://codex.wordpress.org/Function_Reference/add_meta_box
使用 post_type '导航菜单'
显然,唯一可能的研究是在核心本身。
在这里,/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
}
但是,我没有设法完成的困难部分是保存价值。
这是/wp-admin/nav-menus.php
必须研究的文件。
试图挂钩到动作wp_update_nav_menu
,但自定义元框输入字段没有被传递到$_POST
。
WordPress 答案可能有一些提示:https ://wordpress.stackexchange.com/search?q=wp_update_nav_menu
我知道我参加聚会迟到了,但对于其他试图这样做的人来说......
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 );})"/>
这应该将该项目添加到列表中。
这是一个非常古老的问题,但我今天试图这样做,以防万一它指向正确的方向......
我不会介绍添加元框,因为它已经在上面介绍过。我也只会介绍一个自定义链接,因为我没有考虑添加帖子、页面、术语链接等。
只是为了涵盖我如何到达那里的逻辑......看看wp-admin/js/nav-menu.js
,对于您想要使用的自定义链接window.wpNavMenu.addItemToMenu()
。这个 ajax提交给wp_ajax_add_menu_item()
. wp-admin/includes/ajax-actions.php
然后提交给wp_save_nav_menu_items()
in wp-admin/includes/nav-menu.php
。查看这些文件的结果是所有菜单项都是 post_type、taxonomy、post_type_archive 或自定义类型。
根据需要将 javascript 与 HTML 挂钩,但如果要提交自定义链接,则需要addItemToMenu()
如下调用:
var url = 'http://example.com';
var title = 'Link text';
window.wpNavMenu.addItemToMenu({
'-1': {
'menu-item-type': 'custom',
'menu-item-url': url,
'menu-item-title': title,
}
}, window.wpNavMenu.addMenuItemToBottom);
菜单项类型必须是“自定义”,否则它需要与菜单项关联的帖子、页面等信息。