最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】wordpress中给Retina主题添加多个菜单

WordPress crifan 2226浏览 0评论

【问题】
由于不小心,把之前wordpress中retina的主题更新成最新的0.2版本了,导致原先我手动在0.1的基础上修改的很多代码,使得支持多个菜单,prev和next post,帖子的已读次数等,都丢失了。
所以很是悲剧。然后现在只好一点点手动去重新改写对应的代码,以添加对应的功能。

【解决过程】
下面记录折腾的过程。

1.先是用FileZilla 3.5.3去下载下来对应的retina\lib\structure\menu.php,然后用notepad++打开,结果显示有点问题,每一行都多了一个换行的效果,所以很是悲催。
先不管了,手动删除多余空行,接着按照之前的记忆,去修改对应的代码,改好后,再上传到服务器上,替换原先的menu.php。结果重新打开www.crifan.com,网站却无法显示了,显示500错误。看来是代码添加的有问题了。

2.后来只好去retina的官方网站上面,下载最新的源码,然后找到对应的menu.php,再重新替换回来,然后网站才能正常打开。

3.后来再次重新用notepad++打开menu.php,结果显示又正常了,没了多余的换行了。
然后接着修改代码,去参考这里:
http://www.dayunet.com/WordPress-method-multiple-custom-menu.html

修改后的代码menu.php为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?php
/** This theme uses wp_nav_menu() in two locations.*/
register_nav_menus(
    array(
    'primary-menu' => 'Primary Menu',
    'second-menu' => 'Second Menu',
    )
);
 
/**
 * Primary Menu
 */
 
/** Primary Menu Callback */
function retina_primary_menu_cb() {
    wp_page_menu ();        
}
 
/** Build Primary Menu */
function retina_primary_menu() {
     
    echo '<div class="menu1">
            <div class="menu1-data">';
     
    if ( has_nav_menu( 'primary-menu' ) ):
     
        $args = array(
             
        'container' => 'div',
        'container_class' => 'primary-container',
        'theme_location' => 'primary-menu',
        'menu_class' => 'sf-menu1',
        'depth' => 0,
        'fallback_cb' => 'retina_primary_menu_cb'
                         
        );
         
        $args2 = array(
        'container' => 'div',
        'container_class' => 'primary-container',
        'theme_location' => 'second-menu',
        'menu_class' => 'sf-menu1',
        'depth' => 0,
        'fallback_cb' => 'retina_primary_menu_cb'
        );
         
        wp_nav_menu( $args );
        wp_nav_menu( $args2 );
     
    else:
     
        retina_primary_menu_cb();
     
    endif;
     
    echo '<div class="clear"></div>
            </div> <!-- end .menu1-data -->
          </div> <!-- end .menu1 -->';
     
}
 
/** Primary Menu Init */
add_action( 'retina_after_header', 'retina_primary_menu_init' );
function retina_primary_menu_init() {  
    retina_primary_menu(); 
}
?>

然后登陆网站后台管理界面,就可以看到对应的显示效果了:

添加了第二个菜单后的效果

然后就照葫芦画瓢,去添加更多的菜单项。

然后又一共添加了9个,登陆后台管理页面,刷新后,效果如下:

添加了共9个菜单,刷新一下,后台的显示效果

最后共添加了所需要的12个,相关代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
register_nav_menus(
    array(
    'primary-menu' => 'Primary Menu',
    'second-menu' => 'Second Menu',
    'third-menu' => 'Third Menu',
    'fourth-menu' => 'Fourth Menu',
    'fifth-menu' => 'Fifth Menu',
    'sixth-menu' => 'Sixth Menu',
    'seventh-menu' => 'Seventh Menu',
    'eighth-menu' => 'Eighth Menu',
    'nighth-menu' => 'Nighth Menu',
    'tenth-menu' => 'Tenth Menu',
    'eleventh-menu' => 'Eleventh Menu',
    'twelveth-menu' => 'Twelveth Menu',
    )
);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
if ( has_nav_menu( 'primary-menu' ) ):
 
    $args = array(
         
    'container' => 'div',
    'container_class' => 'primary-container',
    'theme_location' => 'primary-menu',
    'menu_class' => 'sf-menu1',
    'depth' => 0,
    'fallback_cb' => 'retina_primary_menu_cb'
                     
    );
     
    $args2 = array(
    'container' => 'div',
    'container_class' => 'primary-container',
    'theme_location' => 'second-menu',
    'menu_class' => 'sf-menu1',
    'depth' => 0,
    'fallback_cb' => 'retina_primary_menu_cb'
    );
 
    $args3 = array(
    'container' => 'div',
    'container_class' => 'primary-container',
    'theme_location' => 'third-menu',
    'menu_class' => 'sf-menu1',
    'depth' => 0,
    'fallback_cb' => 'retina_primary_menu_cb'
    );
 
    $args4 = array(
    'container' => 'div',
    'container_class' => 'primary-container',
    'theme_location' => 'fourth-menu',
    'menu_class' => 'sf-menu1',
    'depth' => 0,
    'fallback_cb' => 'retina_primary_menu_cb'
    );
 
    $args5 = array(
    'container' => 'div',
    'container_class' => 'primary-container',
    'theme_location' => 'fifth-menu',
    'menu_class' => 'sf-menu1',
    'depth' => 0,
    'fallback_cb' => 'retina_primary_menu_cb'
    );
 
    $args6 = array(
    'container' => 'div',
    'container_class' => 'primary-container',
    'theme_location' => 'sixth-menu',
    'menu_class' => 'sf-menu1',
    'depth' => 0,
    'fallback_cb' => 'retina_primary_menu_cb'
    );
 
    $args7 = array(
    'container' => 'div',
    'container_class' => 'primary-container',
    'theme_location' => 'seventh-menu',
    'menu_class' => 'sf-menu1',
    'depth' => 0,
    'fallback_cb' => 'retina_primary_menu_cb'
    );
 
    $args8 = array(
    'container' => 'div',
    'container_class' => 'primary-container',
    'theme_location' => 'eighth-menu',
    'menu_class' => 'sf-menu1',
    'depth' => 0,
    'fallback_cb' => 'retina_primary_menu_cb'
    );
 
    $args9 = array(
    'container' => 'div',
    'container_class' => 'primary-container',
    'theme_location' => 'nighth-menu',
    'menu_class' => 'sf-menu1',
    'depth' => 0,
    'fallback_cb' => 'retina_primary_menu_cb'
    );
 
    $args10 = array(
    'container' => 'div',
    'container_class' => 'primary-container',
    'theme_location' => 'tenth-menu',
    'menu_class' => 'sf-menu1',
    'depth' => 0,
    'fallback_cb' => 'retina_primary_menu_cb'
    );
 
    $args11 = array(
    'container' => 'div',
    'container_class' => 'primary-container',
    'theme_location' => 'eleventh-menu',
    'menu_class' => 'sf-menu1',
    'depth' => 0,
    'fallback_cb' => 'retina_primary_menu_cb'
    );
 
    $args12 = array(
    'container' => 'div',
    'container_class' => 'primary-container',
    'theme_location' => 'twelveth-menu',
    'menu_class' => 'sf-menu1',
    'depth' => 0,
    'fallback_cb' => 'retina_primary_menu_cb'
    );
 
    wp_nav_menu( $args );
    wp_nav_menu( $args2 );
    wp_nav_menu( $args3 );
    wp_nav_menu( $args4 );
    wp_nav_menu( $args5 );
    wp_nav_menu( $args6 );
    wp_nav_menu( $args7 );
    wp_nav_menu( $args8 );
    wp_nav_menu( $args9 );
    wp_nav_menu( $args10 );
    wp_nav_menu( $args11 );
    wp_nav_menu( $args12 );

这12个全部建立好后,把之前就已经存在的菜单(这个是之前就自己建立好的,和主题是脱离的,所以没被覆盖掉),设置好对应关系,

再打开主页,就可以看到主页中的菜单显示效果就是所想要的12个了:

主页中的12个菜单的效果

  对应的之前就创建好的子菜单项目也是存在的

转载请注明:在路上 » 【已解决】wordpress中给Retina主题添加多个菜单

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
83 queries in 0.208 seconds, using 22.16MB memory