【问题标题】:Wordpress 4.0 Broken MenuWordPress 4.0 损坏的菜单
【发布时间】:2014-11-10 14:06:27
【问题描述】:

前几天我更新到 WP 4.0,发现我的菜单使用了第一个可用的字母菜单。我做了一些搜索,发现很多其他人也遇到了同样的问题。到目前为止,我在这个问题上看到的唯一答案是这里:

http://wordpress.org/support/topic/wp-40-broke-main-menu?replies=25

用户“lblechl”写道“验证您发送到 wp_nav_menu 的参数数组不包含任何尾随字符、多余的逗号、不正确的参数等。”

我浏览了我的主题,并将其与骨骼开发主题的原始版本进行了比较,但我似乎看不出问题出在哪里。有其他人经历过吗?

这是我正在使用的代码:

// REGISTERING THE MENU
function bones_theme_support() {
register_nav_menus(
    array(
        'mobile-nav' => __( 'The Mobile Menu', 'bonestheme' )   // main nav in header
    )
);
}
// END REGISTERING THE MENU

// THE MENU
function bones_mobile_nav() {
wp_nav_menu(array(
    'container' => false, // remove nav container
    'container_class' => '', // class of container (should you choose to use it)
    'menu' => __( 'The Mobile Menu', 'bonestheme' ), // nav name
    'menu_class' => '', // adding custom nav class
    'theme_location' => '', // where it's located in the theme
    'before' => '', // before the menu
    'after' => '', // after the menu
    'link_before' => '', // before each link
    'link_after' => '', // after each link
    'depth' => 0, // limit the depth of the nav
    'fallback_cb' => 'bones_mobile_nav_fallback' // fallback function
));
}
/* END THE MENU */

// THE FALLBACK
function bones_mobile_nav_fallback() {
    wp_page_menu( array(
    'show_home' => true,
    'menu_class' => '', // adding custom nav class
    'include'     => '',
    'exclude'     => '',
    'echo'        => true,
    'link_before' => '', // before each link
    'link_after' => '' // after each link
) );
}
/* END THE FALLBACK */

【问题讨论】:

    标签: php wordpress menu


    【解决方案1】:

    起初我尝试将 wp_nav_menu() 中的“菜单”键设置为 $location 和 $description,如下所示:

    // Registering the menu:
    register_nav_menu( 'my_menu', 'My Menu');
    
    // Inside the view I tried with the $location:
    wp_nav_menu(array('menu' => 'my_menu'))
    
    // and with the $description:
    wp_nav_menu(array('menu' => 'My Menu'))
    

    在我尝试使用您设置的菜单名称之前都没有工作:

    yoursite.com/wp-admin/nav-menus.php
    

    假设我将菜单名称设置为“示例菜单”

    然后,在视图中将菜单值替换为您之前设置的菜单名称 (yoursite.com/wp-admin/nav-menus.php):

    wp_nav_menu(array('menu' => 'Example Menu'))
    

    这让我开始思考,我可能没有正确理解文档,因为我认为您可以在 wp_nav_menu() 中使用 revister_nav_menu() 中的 $location 和 $description。

    希望这会有所帮助。

    编辑:在您的情况下,我看到您在菜单键中使用本地化助手“__()”,我不知道它在 WP 中是否有特殊用途,但我的猜测是你不应该使用它:

    function bones_mobile_nav() {
      wp_nav_menu(array(
       //...
       // This is how you are doing it:
       'menu' => __( 'The Mobile Menu', 'bonestheme' ),
       //The value should be the string set in yoursite.com/wp-admin/nav-menus.php:
       'menu' => 'Example Menu',
       //...
      ));
    }
    

    【讨论】:

    • 您永远不想直接编辑 wp-admin 文件夹的内容,因为它们可能会在未来的代码更新中被覆盖,并且您的更改将丢失,从而导致维护噩梦,如此处所述 @987654321 @.
    • Edrpls,在创建用于多种语言的插件或主题时,您(通常)希望使用 __() 函数进行国际化。这样,“移动菜单”的翻译可以在以后以西班牙语、德语等显示,前提是 WordPress 已配置为处理多种语言。我可以验证使用菜单中的功能不应该阻止代码从 WP 4.0 中的个人结果中工作。这是一种最佳做法,但如果您不关心其他语言的翻译并且不打算与世界分享您的代码,则不需要。
    • 卢克,我的意思是从仪表板编辑 wp 配置,而不是直接编辑任何 wp-admin 文件。另外,感谢您对 __() 的澄清
    • 没问题,也非常感谢您的澄清。
    【解决方案2】:

    这是您提到的 WP 论坛中的“lblechl”。

    通过提供的代码,我注意到 register_nav_menus 调用被包装在一个函数中。代码中是否有调用bones_theme_support 函数的内容?如果没有,您将不得不在加载主题时将该函数挂钩。

    另外,请确认“移动菜单”是所创建菜单的确切名称。

    如果这两个似乎都正常并且您仍然遇到问题,请告诉我更多详细信息。

    【讨论】:

    • 是的,bones_theme_support 正在被调用。我也验证了菜单名称,似乎没问题。自 4.0 更新以来,这实际上是几个网站的问题(有些是购买的主题,有些是使用骨骼定制的)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    相关资源
    最近更新 更多