模板标签之如何传递模板标签参数

0条评论

模板标签之如何传递模板标签参数

简介

模板标签是一种可以在WordPress页面模板中进行嵌套以显示动态文本效果的PHP函数。和PHP函数一样,很多模板标签都能够传递变量或参数。模板标签参数是变量,我们可以利用这些变量改变标签的输出结果或用某种方法修改标签。可以把参数看做用户的自由选项,用参数来设置模板标签的运行方式。

如果以参数为标准,WordPress模板标签可分为三类:

1. 没有参数的标签

2. 参数为PHP函数类型的标签

3. 参数为查询字符串类型的标签

没有参数的标签

有些模板标签没有任何选项,我们无法将参数传递给这些模板标签。

the_author_firstname() (已停止使用)是一个不接收参数的模板标签。该标签可显示日志作者的名称。若标签没有参数,标签中函数的开始括号和结束括号中应没有任何内容:

<?php the_author_firstname(); ?>  

参数为PHP函数类型的标签

一些模板标签能够接收默认PHP类型的参数。在这种模板标签的函数括号中放入一个或多个值,参数就能被传递到另一个标签函数中。

bloginfo()标签仅接收一个参数(参数show),该参数告诉bloginfo()标签应显示何种博客信息:

<?php bloginfo('name'); ?>

wp_title()标签可接收两个参数:sep参数(或分隔符参数)和echo参数(或显示参数):

<?php wp_title(' - ', TRUE); ?> 

第一个参数由单引号包围,第二个参数没有使用单引号,这是因为第一个参数是字符串而第二个参数是布尔值参数。(下文会介绍到参数的类型和用法。)

对于PHP函数类型的参数,需要记住以下几点:

  • 有些函数可以接收多个参数
  • 多个参数用逗号隔开
  • 参数的写入顺序非常重要

将参数传递到模板标签的函数中时,一定要确保已经指定了每个需要修改的参数值,否则标签可能会运行出错。例如,模板标签get_archives()有六个参数:

<?php get_archives('type', 'limit', 'format', 'before', 'after', show_post_count); ?> 

为了能以我们自己希望的方式显示存档文件列表,首先假设我们只需要修改第三个参数format和第五个参数after,但同时要确保第一个、第二个以及第四个参数都为默认值:

<?php get_archives('', '', 'custom', '', '<br />'); ?>

单引号表示参数值为空。这里用单引号强制指定参数使用默认值。要注意的是,传递空参数以及传递指定文本字符串的参数都可能改写默认值;无法传递空布尔值。因此使用前注意查看参数的默认值类型。上述代码中第六个参数被省略,这是因为WordPress自动为剩余的未指定参数使用默认值。

按照模板标签的说明文档进行编码,输入参数时也请按照模板函数规定的顺序。最后,我们可以利用未指定参数值的标签来让模板标签中的所有参数都使用默认值:

<?php get_archives(); ?>

参数为查询字符串类型的标签

这是模板标签的最后一种类型,利用所谓的查询字符串类型将参数传递给标签。参数为查询字符串类型的标签向参数为PHP函数类型的标签提供了便利的“包装器”,且参数为查询字符串类型的标签拥有的参数数量也相对较多。例如,模板标签wp_list_cats() (已停止使用)有18个参数,是模板标签 list_cats()的包装器。

如果希望单独设置list_cats()标签中exclude参数的值(此时还剩17个参数)而其它参数为默认值,可以使用以下代码:

<?php list_cats(TRUE, 'All', 'ID', 'asc', '', TRUE, FALSE, FALSE,   
TRUE, TRUE, FALSE, '', '', FALSE, '', '', '10,11,12'); ?>   

也可以用 wp_list_cats()标签来达到效果:

<?php wp_list_cats('exclude=10,11,12'); ?>   

参数为查询字符串类型的标签的好处在于,用户可以根据自己的需要只改变部分参数的值而无需提供所有参数值。 尽管如此,不是所有PHP函数类型的模板标签都具有与之相匹配的查询字符串类型模板标签。(注意:接收查询字符串类型参数的标签一般以“wp_”为标签名前缀,如wp_list_cats(),但仍然要注意查看模板标签的说明文档,了解其接收参数的方式。)

模板标签wp_list_authors()有六个参数,假设我们要设置其中三个参数:

<?php wp_list_authors('show_fullname=1&feed=rss&optioncount=1'); ?>  

首先,所有参数都需要放入单引号或双引号中。然后按parameter=value格式写入这些参数,并用&号将各个参数隔开。上述代码表示:

  • 参数show_fullname (布尔型参数)值为1(true)
  • 参数feed (字符串型参数)值为rss
  • 参数optioncount (布尔型参数)值为1(true)

(下文会介绍到参数的类型和用法。)

写入查询字符串类型的参数时,不必拘泥于参数顺序。此时唯一要注意的是参数名称拼写要正确。如果担心读者无法区分各个参数,可以用空格将各个参数隔开:

<?php wp_list_authors('show_fullname=1 & feed=rss & optioncount=1'); ?>  

也可以用查询字符串来将代码分成多行(注意,此时每个参数都被放在单引号中,每重新开始一行代码,新的一行代码都以一个小点作为开始部分):

<?php wp_list_authors(
                      'show_fullname=1'
                      .'&feed=rss'
                      .'&optioncount=1'
                      ); ?>

使用查询字符串类型的模板标签时会有一些限制,其中一点是不能传递某些特定字符串,如&、单引号'、双引号''等。这种情况下可以使用关联数组:

<?php $params = array( 'type'   => 'postbypost',
                       'limit'  => 5,
                       'format' => 'custom',
                       'before' => '<li>&bull;&nbsp;',
                       'after'  => '</li>' );
wp_get_archives($params); ?>

参数类型

WordPress模板标签中的参数分为三种:字符串型、整数型、布尔型。

字符串型参数

一个字符串就是一个字符序列,字符串可能仅仅由一个字符组成,也可能由多个单词组成。一个字符串型参数经常选自两个以上可用选项,例如bloginfo()的参数show。普通字符串只是即将要显示的文本字符,例如wp_title()中的参数sep

在使用PHP函数类型参数的模板标签中,字符串的值应该被放入单引号(')或双引号('')中。如果某部分字符串需要使用单引号/双引号,可以混合使用单引号和双引号(如果参数值中有单引号,应使用双引号来引用参数),也可以使用PHP转义符(反斜线符号\)。下面的代码为模板标签the_title()的参数beforeafter赋值(指定的值是单引号):

<?php the_title('\'', '\''); ?>   

整数型参数

…, -2, -1, 0, 1, 2,…这样的数被称为整数。整数型参数主要用于日期和存档型信息,例如模板标签 get_month_link()中的参数year和month。整数型参数还可以为博客上的某个功能指定数值, get_permalink()中的参数id就是这样一种整数型参数。

无论整数值是否使用引号,该整数值被传递到参数为PHP函数类型的模板标签中时都能够正常运行。因此以下两种用法都可行:

<?php get_permalink('100'); ?>   
<?php get_permalink(100); ?>  

布尔型参数

布尔型参数的值只有两种:true或false。

例如 the_date()模板标签的参数echo的值不是TRUE就是FALSE;如果参数值为TRUE,页面上会显示日期,如果参数值为FALSE, the_date()会将日期返回,用在其它PHP代码中。

我们可以将布尔型参数看成数值:TRUE相当于1,FALSE相当于0。在参数为PHP函数类型的模板标签中:

  • 1 = TRUE = true
  • 0 = FALSE = false

尽管如此,请不要在引号中使用布尔值。并且在参数为查询字符串类型的模板标签中只能使用数值型布尔值(1或0)。