WordPress3.0菜单功能进阶

2011年02月13日15:57:48 42 已收录 13,291

从WordPress3.0开始已集成菜单管理功能,使得创建和管理(导航)菜单变得轻而易举。现在,创建并显示一个菜单需要的无非就是一行代码( wp_nav_menu ),似乎已经失去“手动”添加我们自己需要的东西空间。 例如,菜单功能默认没有“返回首页”的任何链接,虽然可以很容易地在自定义菜单功能中手动添加一个返回首页的链接,但返回首页链接基本是网站必须的功能,因此,自动添加此功能是很有必要的。有一个更简单的方法,使用WordPress filters.

利用导航菜单“ filters”功能,可以使我们能够加入特定菜单项。

举一反三,经过挖掘研究,将以下三段代码,添加到主题 functions.php 文件中,会实现自动增加一个登录/注销链接、添加一个搜索框和一个返回首页的链接到你的WordPress3.0导航菜单。

一、新增一个登录/注销链接到您的导航菜单

  1. add_filter('wp_nav_menu_items', 'add_login_logout_link', 10, 2);
  2. function add_login_logout_link($items, $args) {
  3. ob_start();
  4. wp_loginout('index.php');
  5. $loginoutlink = ob_get_contents();
  6. ob_end_clean();
  7. $items .= '<li>'. $loginoutlink .'</li>';
  8. return $items;
  9. }

说明:

First we add a function add_login_logout_link to the wp_nav_menu_items filter. Then, the ob_start, ob_get_contents and ob_end_clean (lines 4, 6 and 7) functions are “output Buffering” PHP functions that will “intercept” the information that would otherwise be sent to the browser. wp_loginout('index.php'); will add the logic and html code to login (if not logged in yet), or logout (if logged in). Since we don’t want to send that code to the browser yet, we “capture” the output (using ob_get_contents) in a variable ($searchform), and finally include that variable as a list item in the menu.
二、为导航菜单自动添加搜索框

  1. add_filter('wp_nav_menu_items','add_search_box', 10, 2);
  2. function add_search_box($items, $args) {
  3. ob_start();
  4. get_search_form();
  5. $searchform = ob_get_contents();
  6. ob_end_clean();
  7. $items .= '<li>' . $searchform . '</li>';
  8. return $items;
  9. }

创建自己的搜索模板
add_search_box是利用默认的searchform菜单栏。但是这可能不是理想的布局(也许它包含前文本"搜索:”与“搜索”键),那么你就应该创建一个模板文件searchform.php在你的主题模板目录,加入下面代码: 该 add_search_box 功能是利用默认的searchform模板。 但这未必是理想的布局(也许它包含前面的文本“搜索:”和一个“搜索”按钮),所以你可创建一个自己的searchform.php模板文件 ,放到在你的主题模板目录中,并添加以下代码:

  1. <form method="get" class="search-form" id="search-form" action="<?php bloginfo( 'home' ); ?>/">
  2. <div class="formfield">
  3. <input class="formInputText" type="text" name="s" id="search-text" value="Search ..." size="12" maxlength="16" tabindex="1" onfocus="if (this.value == 'Search ...') {this.value = '';}" onblur="if (this.value == '') {this.value = 'Search ...';}" />
  4. </div>
  5. </form>

或者,您可以添加表单样式以匹配您的导航风格,例如:

  1. input.formInputText {
  2. margin-top: 7px;
  3. color: #666;
  4. padding: 3px;
  5. background: #ccc;
  6. }
  7. input.formInputText:hover {
  8. cursor: help;
  9. color: 555;
  10. background: #ccc;
  11. }

三、添加一个主页链接到您的导航菜单

  1. add_filter( 'wp_nav_menu_items', 'add_home_link', 10, 2 );
  2. function add_home_link($items, $args) {
  3. if (is_front_page())
  4. $class = 'class="current_page_item"';
  5. else
  6. $class = '';
  7. $homeMenuItem =
  8. '<li ' . $class . '>' .
  9. $args->before .
  10. '<a href="' . home_url( '/' ) . '" title="Home">' .
  11. $args->link_before . 'Home' . $args->link_after .
  12. '</a>' .
  13. $args->after .
  14. '</li>';
  15. $items = $homeMenuItem . $items;
  16. return $items;
  17. }

只在特定的位置添加上述新增项目

新增项目默认将显示在所有自定义菜单中,这可能不是你所想要的,因此需要添加一个条件代码,让上述代码只执行在一个特定的菜单位置。

  1. function add_login_logout_link($items, $args) {
  2. if($args->theme_location == 'Primary') {
  3. ob_start();
  4. wp_loginout('index.php');
  5. $loginoutlink = ob_get_contents();
  6. ob_end_clean();
  7. $items .= '<li>'. $loginoutlink .'</li>';
  8. }
  9. return $items;
  10. }

翻译水平有限,有不准确之处,请见谅,上述代码经测试全部有效。

weinxin
我的微信
分享交流WordPress经验与技巧,关注前端设计与网站制作。仅用于功能演示。
Begin主题购买
Begin主题购买

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:42   其中:访客  28   博主  14

    • 陨落de芳菲 5

      果断坐沙发,做个标记慢慢看

      • 韩国 5

        想问一下鸟哥,PHP文件里面中文出现乱码如何解决。

          • 知更鸟 Admin

            @韩国 应该是你编辑中文模板时,用的编辑器不对
            修改汉化模板后,应把默认编码改成:UTF-8 无BOM

          • 小屁人 6

            嘿嘿,鸟哥开始做教程了!太伟大了

              • 知更鸟 Admin

                @小屁人 汗,这教程,哪是我写的,上面有原文地址
                国内能看到的大部分WP教程,都是抄习国外的,伪原创

                • 苹果 5

                  @小屁人 呵呵,原来教程也伪原创了

                    • 知更鸟 Admin

                      @苹果 是啊,外语好的看老外写的技术文章,再拿回来

                  • lady 0

                    你好
                    我用的是你找这个网站上的模板
                    但为什么我网站上的描述和关键词是这样的

                    插件我有添加了一个<!– All in One SEO Pack

                    请问这是什么原因呢?
                    麻烦你了

                      • 知更鸟 Admin

                        @lady 主题已集成SEO功能
                        不需要那个插件

                      • 小司 3

                        鸟哥,请教下,怎么自动缩进两个字符来着,忘记哪儿修改了。

                        • kael 7

                          鸟哥,主题右上角上的灯笼不显示了,我更换成别的素材也是不显示~求解~

                            • kael 7

                              @kael 我找原因了。我自己电脑的原因~

                            • →☆[暗]☆← 5

                              等待3.1正式版,等待新主题正式发布,再改,呵呵。

                              • 憨豆先生 6

                                不知道鸟哥有考虑过加入投稿页面功能吗?

                                  • 知更鸟 Admin

                                    @憨豆先生 貌似有插件投稿的

                                      • 憨豆先生 6

                                        @知更鸟 什么插件?可以说下吗?最重要还是看你有没有考虑集成

                                          • 知更鸟 Admin

                                            @憨豆先生 submit_posts
                                            功能不错
                                            http://zmingcx.com/contributors
                                            不过感觉没这个必要,不如直接发邮件方便

                                              • 憨豆先生 6

                                                @知更鸟 其实很多人都有这个必要的…鸟哥不妨考虑下…

                                                  • 知更鸟 Admin

                                                    @憨豆先生 嗯,有时间作一个

                                                      • 憨豆先生 6

                                                        @知更鸟 感谢鸟哥!!忘了告诉您您也是我的偶像之一哦~

                                                          • 知更鸟 Admin

                                                            @憨豆先生 只要不是呕像就行

                                                            • 有事扣字 0

                                                              @知更鸟 鸟哥 ,能指点下 , 怎么将wordpress中的页面和分类目录关联到一起么?能给留个Q什么的么 ?要就给我Q空间留言吧!!

                                                • lmdtw 0

                                                  火星问题:代码应加在的什么位置

                                                    • 知更鸟 Admin

                                                      @lmdtw 貌似这篇文章不是火星文,写的很清楚加到functions.php文件中

                                                    • 晨光博客 5

                                                      谢谢鸟哥!

                                                      • 51open 1

                                                        使用鸟哥你的风格,像你的这个网站的导航菜单,如何添加?

                                                          • 知更鸟 Admin

                                                            @51open http://zmingcx.com/wordpress3-0-using-the-navigation-menu-graphic-tutorials.html

                                                          • 熬熬的 0

                                                            鸟哥,你的这个留言板中【“提示!如有主题使用问题请先查阅:HotNews pro2.4版使用问题汇总及安装使用需知!】这段话是加在哪个php页面里的??

                                                            • Solovia 2

                                                              老鸟速度来看!!!!!!!!!!!!!!!!!!!!!
                                                              Hotnews pro2.4存在网站安装目录泄露的BUG…….
                                                              今天在开始空间的GZIP加速时候无意发现了本主题存在网站目录的泄露问题。
                                                              通过对首页源代码的查看可以看到主题安装目录以及CSS调用目录及调用文件(连目录猜解和遍历都不需要……)这个是否可以改进一下呢?
                                                              虽然对站长来说没什么关系,但我想无论是为了代码的完美还是安全上的洁癖来说还是改了比较好点。你说呢?鸟哥!
                                                              再说一句:鸟哥的主题代码,我折腾了3天了,写的是相当相当的漂亮啊,代码简洁、注释详细,就是这个出问题的index.php却是写的别扭,看了半天,第一句楞是没看懂,判断的开关在这个主题的源代码里没找到相关的…..我杯具!
                                                              鸟哥,别拿砖头砸我哈…上个鸟哥网站的目录截图吧,为了安全,只截取部分。
                                                              访问如下网址的时候:domain/wp-content/themes/HotNewspro24 默认读取index.php的时候出现安装目录泄露。
                                                              [img]http://www.shelinbian.com/files/201102/2011-02-26-11390159.jpg[/img]

                                                                • 知更鸟 Admin

                                                                  @Solovia 对网站安全无任何研究,如有解决办法,也请告诉我

                                                                • funbean 1

                                                                  请问,我在用知更鸟导航,和现在主站点是一样的,可是怎么导航死活只能出来2个啊?多添加一个哪前一个就消失了。。。。

                                                                  • 东方 0

                                                                    你好,我是个菜鸟,不知道怎么修改代码,我一个网站是wp程序的用了人家的一个模板,但是那个模板不可以添加页面,就算是添加了页面也显示不出来,请问这个需要怎么弄呢?因为没有找到好的模板了所以在用它。

                                                                    • 温湿度计 1

                                                                      鸟哥,如何为每个分类目录页添加description和keyword呢?用那个All in One Seo Pack装不上。

                                                                      • lp 0

                                                                        我想在新建页面下直接添加文章,怎么搞啊 ???

                                                                        • ziranniao 3

                                                                          我想在新建页面下直接添加文章,怎么搞啊 ???
                                                                          我也想知道这个怎么弄,求救鸟哥!!!!!!!!!!!!!!!!!!

                                                                            • 知更鸟 Admin

                                                                              @ziranniao 页面与日志文章是不同的文章类型,页面本身就是一篇文章,不知你添加什么

                                                                                • 开店省钱网 3

                                                                                  @知更鸟 他说的是新建页面随意调用文章,方法如下:1:直接复制主题中的 index.php 文件
                                                                                  2:打开此文件,在代码最顶部增加如下代码:

                                                                                  Name: adsense 为模版名称 可随意,要与新建的文件名一样

                                                                                  3:接下来就要实现这个模板显示的是特定分类下的文章内容,通过搜索找到如下代码:(类似的即可)

                                                                                  在这行代码的前面加上:

                                                                                  cat=1为分类目录的ID,发布文章的时候选择该分类,文章就自动到这个新建页面那里了
                                                                                  =====我的问题=====
                                                                                  我从blog换成CMS主题后以前新建的页面点击后都没用,和首页一样,只是标题和网址不同,网鸟哥解决下,地址:http://www.yeweiqing.com

                                                                              • long_jp 0

                                                                                你这个网站的架构和主题,我很喜欢,请问你是怎么做到的?能把你的主题分享给我吗?我下载安装wordpress后,什么也没有,我就想有导航目录,怎么也做不到。请你告诉我怎么做到的,谢谢!

                                                                                • 李先生 1

                                                                                  添加菜单的时候报错 出现这些代码 Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 500001 bytes) in /data/multiserv/users/907431/projects/2103397/www/wp-includes/class-snoopy.php on line 900 期待解决