[上次更新]
使用get\\u nav\\u menu\\u locations(),我可以找到主题和分配的相对菜单提供的所有菜单位置。
我已经能够查看特定菜单是否包含与页面相关的项目。
现在的问题是从WP\\u Post的距离中提取一个有效的菜单项。
试过这个
$item = array(
"menu-item-title" => $page->post_title,
"menu-item-object" => "page",
"menu-item-type" => "post_type",
"menu-item-object_id" => $page->ID,
"menu-item-parent_id" => "0",
"menu-item-db_id" => "0",
"menu-item-url" => get_permalink( $page->ID )
);
wp_update_nav_menu_item($idmenu, 0, $item);
但新项目会导致一些错误,并且没有对页面的引用:
===================
我正在尝试将页面添加到主菜单(前端)。
以下是我尝试的内容:
public function paginaAMenu($page){
$menu_check = menu_page_url($page->slug, 0);
if($menu_check == ""){
$menu = add_menu_page($page->title, $page->title, \'read\', $page->slug);
}
}
但什么都没发生。也许我错过了add\\u menu\\u页面的用途,我想知道如何实现我的目标。
更清楚地说,这是我在第节中通过仪表板所要做的Appearence > Menu 要将标准页面链接添加到“主菜单”:
我想做完全相同的事情,但在一个插件中以编程方式创建一些短代码,创建一些包含这些短代码的页面,并应将这些页面链接到网站的主菜单中。我只是错过了最后一件事。
===================
在这种情况下,主题提供的菜单位置是主菜单,分配的菜单是主菜单
我想以友好的方式来做,就像我在仪表板中做的那样,在仪表板中,我不需要手动选择主题位置或指定的菜单。
查看Chrome developer tools中的网络选项卡,我可以看到将项添加到菜单的ajax调用:
POST: http://wpsped.svi/wp-admin/admin-ajax.php
action: add-menu-item
menu: 3
menu-settings-column-nonce: 9f6fe75dca
menu-item[-1][menu-item-object-id]: 79
menu-item[-1][menu-item-db-id]: 0
menu-item[-1][menu-item-object]: page
menu-item[-1][menu-item-parent-id]: 0
menu-item[-1][menu-item-type]: post_type
menu-item[-1][menu-item-title]: Accedi
menu-item[-1][menu-item-url]: http://wpsped.svi/accedi/
menu-item[-1][menu-item-target]:
menu-item[-1][menu-item-classes]:
menu-item[-1][menu-item-xfn]:
我希望有一种不太老练的方式来完成它,它不涉及ajax请求。
最合适的回答,由SO网友:assistbss 整理而成
为了了解主题为菜单提供的位置:
$locations = get_nav_menu_locations();
此命令将返回一个关联数组,该数组具有指定给该位置的键位置和菜单ID值。
要了解与菜单关联的页面,请执行以下操作:
$idmenu = $locations[\'main-menu\'];
$menu = wp_get_nav_menu_object( $idmenu );
$pagesItem = wp_get_nav_menu_items( $menu, ["object"=>"page"] );
为了生成指向菜单中页面的链接
$pageItem = array(
"menu-item-object-id" => $page->ID,
"menu-item-object" => "page",
"menu-item-type" => "post_type",
"menu-item-title" => $page->post_title,
"menu-item-url" => get_permalink( $page->ID ),
"menu-item-status" => "publish",
);
wp_update_nav_menu_item($idmenu, 0, $pageItem);