从WordPress3.0开始已集成菜单管理功能,使得创建和管理(导航)菜单变得轻而易举。现在,创建并显示一个菜单需要的无非就是一行代码( wp_nav_menu ),似乎已经失去“手动”添加我们自己需要的东西空间。 例如,菜单功能默认没有“返回首页”的任何链接,虽然可以很容易地在自定义菜单功能中手动添加一个返回首页的链接,但返回首页链接基本是网站必须的功能,因此,自动添加此功能是很有必要的。有一个更简单的方法,使用WordPress filters.
利用导航菜单“ filters”功能,可以使我们能够加入特定菜单项。
举一反三,经过挖掘研究,将以下三段代码,添加到主题 functions.php 文件中,会实现自动增加一个登录/注销链接、添加一个搜索框和一个返回首页的链接到你的WordPress3.0导航菜单。
一、新增一个登录/注销链接到您的导航菜单
- add_filter('wp_nav_menu_items', 'add_login_logout_link', 10, 2);
- function add_login_logout_link($items, $args) {
- ob_start();
- wp_loginout('index.php');
- $loginoutlink = ob_get_contents();
- ob_end_clean();
- $items .= '<li>'. $loginoutlink .'</li>';
- return $items;
- }
说明:
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.
二、为导航菜单自动添加搜索框
- add_filter('wp_nav_menu_items','add_search_box', 10, 2);
- function add_search_box($items, $args) {
- ob_start();
- get_search_form();
- $searchform = ob_get_contents();
- ob_end_clean();
- $items .= '<li>' . $searchform . '</li>';
- return $items;
- }
创建自己的搜索模板
add_search_box是利用默认的searchform菜单栏。但是这可能不是理想的布局(也许它包含前文本"搜索:”与“搜索”键),那么你就应该创建一个模板文件searchform.php在你的主题模板目录,加入下面代码: 该 add_search_box 功能是利用默认的searchform模板。 但这未必是理想的布局(也许它包含前面的文本“搜索:”和一个“搜索”按钮),所以你可创建一个自己的searchform.php模板文件 ,放到在你的主题模板目录中,并添加以下代码:
- <form method="get" class="search-form" id="search-form" action="<?php bloginfo( 'home' ); ?>/">
- <div class="formfield">
- <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 ...';}" />
- </div>
- </form>
或者,您可以添加表单样式以匹配您的导航风格,例如:
- input.formInputText {
- margin-top: 7px;
- color: #666;
- padding: 3px;
- background: #ccc;
- }
- input.formInputText:hover {
- cursor: help;
- color: 555;
- background: #ccc;
- }
三、添加一个主页链接到您的导航菜单
- add_filter( 'wp_nav_menu_items', 'add_home_link', 10, 2 );
- function add_home_link($items, $args) {
- if (is_front_page())
- $class = 'class="current_page_item"';
- else
- $class = '';
- $homeMenuItem =
- '<li ' . $class . '>' .
- $args->before .
- '<a href="' . home_url( '/' ) . '" title="Home">' .
- $args->link_before . 'Home' . $args->link_after .
- '</a>' .
- $args->after .
- '</li>';
- $items = $homeMenuItem . $items;
- return $items;
- }
只在特定的位置添加上述新增项目
新增项目默认将显示在所有自定义菜单中,这可能不是你所想要的,因此需要添加一个条件代码,让上述代码只执行在一个特定的菜单位置。
- function add_login_logout_link($items, $args) {
- if($args->theme_location == 'Primary') {
- ob_start();
- wp_loginout('index.php');
- $loginoutlink = ob_get_contents();
- ob_end_clean();
- $items .= '<li>'. $loginoutlink .'</li>';
- }
- return $items;
- }
翻译水平有限,有不准确之处,请见谅,上述代码经测试全部有效。
本站文章大部分为原创,用于个人学习记录,可能对您有所帮助,仅供参考!
云南省大理州 1F
果断坐沙发,做个标记慢慢看
黑龙江省牡丹江市 2F
想问一下鸟哥,PHP文件里面中文出现乱码如何解决。
中国 B1
@ 韩国 应该是你编辑中文模板时,用的编辑器不对
修改汉化模板后,应把默认编码改成:UTF-8 无BOM
河南省许昌市 3F
嘿嘿,鸟哥开始做教程了!太伟大了
中国 B1
@ 小屁人 汗,这教程,哪是我写的,上面有原文地址
国内能看到的大部分WP教程,都是抄习国外的,伪原创
浙江省温州市 B1
@ 小屁人 呵呵,原来教程也伪原创了
中国 B2
@ 苹果 是啊,外语好的看老外写的技术文章,再拿回来
广东省深圳市 4F
你好
我用的是你找这个网站上的模板
但为什么我网站上的描述和关键词是这样的
插件我有添加了一个<!– All in One SEO Pack
请问这是什么原因呢?
麻烦你了
中国 B1
@ lady 主题已集成SEO功能
不需要那个插件
山东省 5F
鸟哥,请教下,怎么自动缩进两个字符来着,忘记哪儿修改了。
中国 B1
@ 小司 在问题汇总找
浙江省台州市临海市 6F
鸟哥,主题右上角上的灯笼不显示了,我更换成别的素材也是不显示~求解~
浙江省台州市临海市 B1
@ kael 我找原因了。我自己电脑的原因~
山东省济南市 7F
等待3.1正式版,等待新主题正式发布,再改,呵呵。
澳门 8F
不知道鸟哥有考虑过加入投稿页面功能吗?
中国 B1
@ 憨豆先生 貌似有插件投稿的
澳门 B2
@ 知更鸟 什么插件?可以说下吗?最重要还是看你有没有考虑集成
中国 B3
@ 憨豆先生 submit_posts
功能不错
http://zmingcx.com/contributors
不过感觉没这个必要,不如直接发邮件方便
澳门 B4
@ 知更鸟 其实很多人都有这个必要的…鸟哥不妨考虑下…
中国 B5
@ 憨豆先生 嗯,有时间作一个
澳门 B5
@ 知更鸟 感谢鸟哥!!忘了告诉您您也是我的偶像之一哦~
中国 B5
@ 憨豆先生 只要不是呕像就行
内蒙古 B5
@ 知更鸟 鸟哥 ,能指点下 , 怎么将wordpress中的页面和分类目录关联到一起么?能给留个Q什么的么 ?要就给我Q空间留言吧!!
黑龙江省哈尔滨市 9F
火星问题:代码应加在的什么位置
中国 B1
@ lmdtw 貌似这篇文章不是火星文,写的很清楚加到functions.php文件中
湖南省长沙市 10F
谢谢鸟哥!
安徽省合肥市 11F
使用鸟哥你的风格,像你的这个网站的导航菜单,如何添加?
中国 B1
@ 51open http://zmingcx.com/wordpress3-0-using-the-navigation-menu-graphic-tutorials.html
安徽省合肥市 B2
@ 知更鸟 谢谢 鸟哥,现在已经搞定了
上海市 12F
鸟哥,你的这个留言板中【“提示!如有主题使用问题请先查阅:HotNews pro2.4版使用问题汇总及安装使用需知!】这段话是加在哪个php页面里的??
”
中国 B1
@ 熬熬的 加到comments.php中
江苏省扬州市仪征市 13F
老鸟速度来看!!!!!!!!!!!!!!!!!!!!!
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]
中国 B1
@ Solovia 对网站安全无任何研究,如有解决办法,也请告诉我
北京市 14F
请问,我在用知更鸟导航,和现在主站点是一样的,可是怎么导航死活只能出来2个啊?多添加一个哪前一个就消失了。。。。
广东省深圳市 15F
你好,我是个菜鸟,不知道怎么修改代码,我一个网站是wp程序的用了人家的一个模板,但是那个模板不可以添加页面,就算是添加了页面也显示不出来,请问这个需要怎么弄呢?因为没有找到好的模板了所以在用它。
广东省广州市 16F
鸟哥,如何为每个分类目录页添加description和keyword呢?用那个All in One Seo Pack装不上。
浙江省杭州市 17F
我想在新建页面下直接添加文章,怎么搞啊 ???
江西省新余市 18F
我想在新建页面下直接添加文章,怎么搞啊 ???
我也想知道这个怎么弄,求救鸟哥!!!!!!!!!!!!!!!!!!
中国 B1
@ ziranniao 页面与日志文章是不同的文章类型,页面本身就是一篇文章,不知你添加什么
广东省东莞市 B2
@ 知更鸟 他说的是新建页面随意调用文章,方法如下:1:直接复制主题中的 index.php 文件
2:打开此文件,在代码最顶部增加如下代码:
Name: adsense 为模版名称 可随意,要与新建的文件名一样
3:接下来就要实现这个模板显示的是特定分类下的文章内容,通过搜索找到如下代码:(类似的即可)
在这行代码的前面加上:
cat=1为分类目录的ID,发布文章的时候选择该分类,文章就自动到这个新建页面那里了
=====我的问题=====
我从blog换成CMS主题后以前新建的页面点击后都没用,和首页一样,只是标题和网址不同,网鸟哥解决下,地址:http://www.yeweiqing.com
北京市 19F
你这个网站的架构和主题,我很喜欢,请问你是怎么做到的?能把你的主题分享给我吗?我下载安装wordpress后,什么也没有,我就想有导航目录,怎么也做不到。请你告诉我怎么做到的,谢谢!
广东省东莞市 20F
添加菜单的时候报错 出现这些代码 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 期待解决