将页面添加到主菜单(前端)

时间:2018-04-04 作者:assistbss

[上次更新]

使用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);
但新项目会导致一些错误,并且没有对页面的引用:

enter image description here

===================

我正在尝试将页面添加到主菜单(前端)。

以下是我尝试的内容:

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 要将标准页面链接添加到“主菜单”:

dashboard interaction

我想做完全相同的事情,但在一个插件中以编程方式创建一些短代码,创建一些包含这些短代码的页面,并应将这些页面链接到网站的主菜单中。我只是错过了最后一件事。

===================

在这种情况下,主题提供的菜单位置是主菜单,分配的菜单是主菜单

menu positions

我想以友好的方式来做,就像我在仪表板中做的那样,在仪表板中,我不需要手动选择主题位置或指定的菜单。

查看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请求。

2 个回复
最合适的回答,由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);

SO网友:Pabamato

我知道您想在给定页面的主菜单中添加一个新项目:

add_filter( \'wp_nav_menu_items\', \'your_custom_menu_item\', 10, 2 );
function your_custom_menu_item ( $items, $args ) {
    // is_page() params: Page ID, title, slug, or array of such.
    if (is_page( \'page-slug\' ) && $args->theme_location == \'primary\') {
        $items .= \'<li>Show whatever</li>\';
    }
    return $items;
}
资料来源:http://www.wpbeginner.com/wp-themes/how-to-add-custom-items-to-specific-wordpress-menus/

结束