WordPress 自定义菜单功能介绍和使用详解

一个常规的网站,一般都会有一个网站导航。这里的导航,通常包含网站的栏目、特殊的页面等等。对于一个博客来说,有的时候也需要一个这样的导航。如果仅仅是调用 文章分类 或者 页面链接 作为导航的话,会比较难控制,无法自由的添加链接等。当然,成熟的 WordPress 系统已经为我们考虑到了这一点,添加了一个 “自定义菜单” 功能。使用这个功能,可以在 后台 -》 外观 -》 菜单 中编辑,当然最好前提是你使用的主题支持这一个功能。

自定义菜单功能介绍

当我们在后台打开 “菜单” 的时候,通常会看到类似这样的界面:

没有配置之前,是无法使用的。我们需要先输入一个 菜单名称 才能继续使用。这里的菜单名称,仅仅作为一个关联数据用的标记,所以可以随便起名。完成之后,左边的区域就可以配置使用了。

如果你的主题不支持 自定义菜单 功能,那么左边的 主题位置 面板会提示你,这个自定义菜单的选项将会在 边栏 中显示。如果主题支持 自定义菜单 功能,那么这个面板则会提示有支持几个自定义菜单、自定义菜单的名称(需要定义)是什么。

上面提示,有一个自定义菜单,并且名称为 topnav 。现在,我要制作这个 自定义菜单 的内容。在左边有三个面板:分类目录、自定义链接、页面。里面包含着你当前博客里面的相关数据。

我们只需要勾选相应的内容或者直接拖动到右边的刚刚设置的菜单面板中即可。

注意的是,可以通过拖动改变显示顺序,而且还可以修改显示的名称。所以说,这个功能非常的强大而且灵活。这样,一个导航链接就做好了。

下面来详细讲解如何在主题中,添加这个功能。也很简单,只需要在两个地方,添加两小段代码即可!

在主题中添加函数调用

首先,你需要在主题的 functions.php 文件中,声明一下存在这个功能。只需要添加下面一段代码即可:

if(functionexists(‘registernav_menus’)){
register_nav_menus( array(
‘header-menu’ =>
( ‘topnav’ )
) );
}

这段代码首先判断是否支持这个功能,然后注册一个 自定义菜单,并且我指定了一个参数,即这个自定义菜单的名称为 topnav。也就是上面在 主题位置 面板中看到的自定义菜单名称。下面引用官方的资料详细的介绍一下 register_nav_menus 这个函数。

实现这个功能有两个函数 register_nav_menuregister_nav_menus 顾名思义,第一个函数用于创建一个自定义菜单,第二个函数用于创建多个自定义菜单。所以通常使用第二个就好了。下面也是根据第二个函数进行讲解。

介绍就不多说了,使用方法也很简单,只需要传递一个 数组 即可。

<?php register_nav_menus( $locations ); ?>

这个数组是必选参数,记录着 位置标记(键名) 和 位置描述(键值)。例如:

registernavmenus( array(
‘header-menu’ => ( ‘topnav’ ),
‘footer_menu’ => ‘My Custom Footer Menu’
) );

上面的语句,定义了两个自定义菜单,它们的标记(可以随便起)分别为:header-menu、footer_menu。它们后面对应的描述,将会显示在后台的 主题位置 面板上,供你选择。在 ‘header-menu’ => ( ‘topnav’ ) 这句代码中,我加了() 这个函数,它是用于跨语言翻译用的,与这个功能无关。

之后,在主题中添加自定义菜单。在主题中合适的位置,添加下面的函数:

<?php wp_nav_menu( array( ‘theme_location’ => ‘header-menu’ )); ?>

这句代码使用了 wp_nav_menu 函数。这个函数也是传递一个数组作为参数,但是这个数字里面的键名比较多。下面根据官方文档的说明选择几个重要的做了一个简单的翻译:

<?php $defaults = array(
‘theme_location’ => ‘’,
‘menu’ => ‘’,
‘container’ => ‘div’,
‘container_class’ => ‘menu-{menu slug}-container’,
‘container_id’ => ‘’,
‘menu_class’ => ‘menu’,
‘menu_id’ => ‘’,
‘echo’ => true,
‘fallback_cb’ => ‘wp_page_menu’,
‘before’ => ‘’,
‘after’ => ‘’,
‘link_before’ => ‘’,
‘link_after’ => ‘’,
‘items_wrap’ => ‘<ul id=”%1$s”>%3$s</ul>’,
‘depth’ => 0,
‘walker’ => ‘’
); ?>

<?php wp_nav_menu( $defaults ); ?>

‘theme_location’ => 可选,值为之前在functions.php中 register_nav_menus 传递的数组参数中的键名,进行绑定。默认:无
‘container’ => 可选,决定是否要对生成的 自定义菜单(ul) 进行包裹,以及使用什么包裹。如果不需要,传递参数 false。默认:div
‘container_class’ => 可选,为上面包裹的容器添加 class 属性。下面的 container_id 功能类似。
‘before’ => 可选,在输出的列表中的 a 标签之前添加文本信息。after 功能类似。
‘link_before’ => 可选,在输出的列表中的链接文字前面加上文字(注意与上面的区别)。link_after 功能类似。
‘items_wrap’ => 可选,设置包裹自定义菜单的标签形式。默认:<ul id=”%1$s”>%3$s</ul>,通常不要修改 。
这样,刚刚我添加的那一句代码的意思很明确了,就是在这里调用名为 header-menu 的自定义菜单位置。而这个自定义菜单位置的名称为 topnav,在 WordPress 后台中,我新建了一个名为 “顶部导航” 的菜单,然后与这个 topnav 进行了关联。那么这句代码就调用了我设置的 “顶部导航” 菜单的内容。

我们不仅仅可以用它来做导航,还可以像上面那样,在多个位置添加多个自定义菜单。例如可以在底部加一个自定义菜单,这样在后台就可以设置底部的链接等等。功能非常强大,不过需要注意一点,WordPress 目前的较新版本 3.4.2 被爆出一个 BUG ,不支持 自定义菜单。当然很快就出了补丁。如果你使用 3.4.2 版本的时候,自定义菜单无法使用,可以自行搜索一下解决方法

在主题中添加 AdminBar 功能

首先,你必须的知道,什么叫做 AdminBar 。这是 WordPress 中的一个非常方便的功能,当管理员或者有管理权限的用户访问页面的时候,就会看到最上面有一个黑色的条条,上面有各种快捷链接。

adminbar

不知道为什么,竟然还有很多人写如何去掉这个功能。但是很少有人写如何增加这个功能。

这个功能需要增加?对,没错。在早期我制作主题的时候,就出现了没有 AdminBar 的情况。要想在主题中,增加这个功能,必须要用到两个函数:

<?php wp_head(); ?>、<?php wp_footer(); ?>

这两个函数,是实现WordPress中某些功能而使用的。例如本文写的 AdminBar 的功能,就是使用这两个函数。新手制作主题的时候,往往会看到或者使用到 wp_head() 这个函数,但是会忽视 wp_footer() 这个函数。所以,AdminBar 不会显示,但是会空出那么高的高度。

这两个函数的位置也需要注意。

  • wp_head() —— 通常放在</head>上面的一行
  • wp_footer() —— 通常放在最下面的</body>的上面一行
    只有准确放置了这两个函数,AdminBar 才会出现。

注意:

忽略了一个地方,在现在的版本中,用户可以自定义在浏览博客的时候,是否显示最上面这个工具条。在 “用户”-》“我的个人资料” 中可以设置。在以前的版本中,记得好像没有这个选项。感谢 “鬼娃娃” 提醒。

wordpress中bloginfo()函数详解

bloginfo()函数,顾名思义,是用来显示博客相关信息的函数。常用的有如下几种:

<?php bloginfo(‘name’); ?> 输出博客名称,例如“潜行者M”,在后台设置常规里面可以设置;
<?php bloginfo(‘stylesheet_url’); ?> 输出模板style.css文件的地址,使用如下语句来加载模板的css样式表:<link rel=”stylesheet” href=”<?php bloginfo(‘stylesheet_url’); ?>” type=”text/css” media=”screen” />;
<?php bloginfo(‘url’); ?> 输出博客的网址,在后台设置常规里面可以设置;
<?php bloginfo(‘template_url’); ?> 输出博客模板的位置;
<?php bloginfo(‘rss2_url’); ?> 输出博客RSS2.0 feed地址;
<?php bloginfo(‘charset’); ?> 输出博客所采用的编码;
<?php bloginfo( ‘description’ ); ?> 输出博客的描述,即副标题,在后台设置常规里面可以设置。

此外,与此函数相近的函数有get_bloginfo(),它的用法与此函数相同,区别在于get_bloginfo()函数用来输出到变量中。
用法:<?php $bloginfo = get_bloginfo( $show ); ?>更多的用法请参考:
http://www.wordpress.la/codex-%E6%A8%A1%E6%9D%BF%E6%A0%87%E7%AD%BE-bloginfo%28%29.html

此外,本人总结了一些 wordpress模板开发常用的函数

本人正在写wordpress模板制作教程,详情可以查看:wordpress模板开发

wordpress模板开发常用的函数

最近自己研究设计了这个你现在看到的模板。设计的过程,也是一个学习的过程,通过各方面查找资料,一步一步的组合成了这个模板。用本文梳理以下用到的wp函数,以方便日后开发其他模板。

全局整体:

<?php get_header(); ?> :得到头部代码函数。wp模板将一个页面分为header、sidebar、footer、body四个部分。并且将header、sidebar、footer这三个部分分割出去,作为独立文件方便重用。使用这个函数,表示把header.php这个文件包含进了本文件。

<?php get_sidebar(); ?>:得到边栏代码函数,用法同上。

<?php get_footer(); ?> :得到底部代码函数,用法同上。

<?php wp_title(‘&laquo;’, true, ‘right’); ?>:当访问一篇文章(或页面)的时候,网页标题将显示文章的标题。常在header.php编写如下语句:<title><?php wp_title(‘&laquo;’, true, ‘right’); ?><?php bloginfo(‘name’); ?></title>。

<?php echo mb_strimwidth(strip_tags(apply_filters(‘the_content’,$post->post_content)), 0, 400,”…”); ?>:使用本语句,截取本文章制定的前400个字符,用于首页显示文章摘要,具体请看:解决wp首页无法显示摘要而显示全文的方法

<?php previous_posts_link(); ?>:当文章为列表时,且一页存放不开时,使用此函数,会显示“上一页”。

<?php next_posts_link(); ?>:同上功能,会显示“下一页”。

<?php bloginfo(); ?> :顾名思义,这是一个显示博客信息的函数。具体请看:wordpress中bloginfo()函数详解

<?php home_url(); ?>:输出博客首页地址。

<?php _e(‘Not Found’); ?>:_e();函数是根据本地汉化包的对应内容显示相应信息的,比如:_e(‘Not Found’);如果我的wordpress是英文版的,则会显示“Not Found”,如果是中文版的,汉化包内对应的是“没有发现”,则显示“没有发现”。

文章相关:

<?php the_category(‘ , ‘) ?>:显示文章所在分类。

<?php the_title(); ?>:显示文章的标题。

<?php the_author(); ?>:显示本文的作者。

<?php the_content(); ?>:显示本文的内容。

<?php if (has_tag()) the_tags(‘’, ‘,’,’’); ?>:判断本文是否有标签,如果有就显示出来,多个标签用“,”分割。

<?php edit_post_link(‘Edit’, ‘’); ?>:如果你有编辑文章的权限,且登陆,会在添加此函数的地方发现“edit”链接,点击可以快速跳转后台,对此文章内容进行编辑。

<?php the_time(‘y年m月d日’) ?>:显示此文章的发布时间,括号内可以自定义时间格式。

<?php previous_post_link(); ?>:上一篇文章的链接,显示上一篇文章的名字以及链接,注意区别前面的“上一页”函数。

<?php next_post_link(); ?>:下一篇文章的链接,功能同上。

<?php comments_template(); ?>:调用评论模板函数,使用此函数,会显示评论模板的内容。

以上就是WP模板开发中,最常遇到的调用信息的函数。特别需要注意的一点是,调用显示日志的函数必须包含在日志主循环中,即:

<?php if(have_posts()) : ?>
<?php while(have_posts()) : the_post(); ?>
<?php endwhile; ?>
<?php else : ?>
<?php endif; ?>

这段函数使用了一个if判断语句,中间包含了while循环语句,意思是如果有文章的话,就开始循环的the_post(),这样就能使用上面的调用相应文章作者、发布日期、文章分类、文章标签等内容。

目前潜行者m在编写一套比较简单基础的wordpress模板制作教程,有兴趣的朋友可以关注这里:http://www.qianxingzhem.com/post-tag/wp%E6%A8%A1%E6%9D%BF%E5%BC%80%E5%8F%91

解决wp首页无法显示摘要而显示全文的方法

不知道什么时候(可能是某次升级),首页就乱套了,原因很简单,以前显示文章摘要的地方,现在把全文都显示出来了,即使是官方默认的模板也不行。

如图:


这样的话,页面就非常乱了。有的文章很短,有的文章很长,而且把文章全文都显示出来,而且还带有图片,使得页面非常不协调。

我查找官方的模板手册,寻找输出文章的函数,一个个尝试,也没有用。后来我不停的换模板,但是除了wpbus的D4模板之外,其他模板都不行,包括官方的。D4模板显示图:

这样就美观多了,还是wpbus的模板写的质量高啊,代码考虑到方方面面了。但是我不喜欢用他们的模板。太大太过于臃肿,而且为了防止盗取代码,还写的很复杂,很多文件,导致执行效率比较低。特别是网速慢的时候,刚刚打开的时候,页面是乱的,过会才居中正常。于是,就看看他们的代码是怎么写的,把代码引用一下就好了。

打开D4模板,顺着模板文件找,果然,老是用include包含过来包含过去的,扰乱分析。不过我还是很快分析出了用于显示这个的代码。废话不多说,贴出这句代码。

<?php echo mb_strimwidth(strip_tags(apply_filters(‘the_content’,$post->post_content)), 0, 230,”…”); ?>
可能是我php自学的太烂,没见过这几个函数,于是便在网上搜了一下这几个函数的功能。

1,apply_filter() 这个函数是一个过滤函数,用于过滤数据。一般是对前台的模板函数进行操作的。

2,strip_tags() 这个函数用于剥去 HTML、XML 以及 PHP 的标签,经过这个函数的数据,里面的标签就没了。这样呢,就把文章内容整理了,把那些特殊的格式以及图片什么的去除了。这样显示的就是纯文字。

3,mb_strimwidth() 这个函数是用来截取置顶长度的字符的。使用方法:
mb_strimwidth(string $str,int $start,int $width[,string $trimmarker[,string $encoding]])
参数说明:
$str //指定字符串
$start //指定从何处开始截取
$width //截取文字的宽度
$trimmarker //超过$width数字后显示的字符串
通常用于截取字符整理版面用的。