如何自定义WordPress中的短代码

0 459

在wordpress系统中,短代码可以被无数次的重复使用,这大大提升了代码的复用性,只需要写一个方法,就可以在多处运行,非常的方便和实用,今天就介绍下这wordpress中如何定义自己的短代码。

WordPress短代码的使用非常简单。比如说我们想显示给定的最新文章,我们可以使用类似下面的代码:
[new-posts]

再进一步的,我们可以通过设定一个参数来控制现实的文章的数量:
[new-posts posts=”5″]

同样的,我们还可以为文章列表增加一个标题:
[new-posts posts=”5″]The post title[/new-posts]

接下来我们尝试下自己创建一个短代码,步骤大致如下:

  1. 创建一个函数,当 WordPress 发现短代码的时候会调用此函数;
  2. 通过设置一个唯一的名称来注册短代码;
  3. 把注册的函数绑定到Wordpress的action上。

第一步:创建回调函数;
当wordpress发现短代码的时候,它会被一个称作回调函数的一段代码所代替,所以我们先创建一个函数,从数据库中获取最新的文章,贴上代码:

function new_posts_function() {
	query_posts(array('orderby' => 'date', 'order' => 'DESC' , 'showposts' => 1));
	if (have_posts()){
	     while (have_posts()){
                the_post();
                $return_string = '<a href="'.get_permalink().'">'.get_the_title().'</a>';
	     }
	}
	wp_reset_query();
	return $return_string;
}

以上函数我们查询数据库,获取最新的文章信息,并返回一个带有链接的字符串。

第二步:注册短代码;
我们现在把第一步的函数注册到Wordpress系统中,这个函数是一个短代码,代码如下:

function register_shortcodes(){
	add_shortcode('new-posts', 'new_posts_function');
}

使用wordpress勾子(Hook into WordPress),将我们的函数在文章展现的时候被调用,代码如下:
add_action( ‘init’, ‘register_shortcodes’);

第三步:实际应用;
做好上面的步骤后,接下来我们就可以在文章中直接使用我们自己的短代码了;调用方式如下:
[new-posts]

到此,一个简单的短代码就已经完成了。

接下来我们再深入些,创建带参数的短代码;短代码非常灵活,因为它允许我们添加参数以使它们具有更多的功能。假定我们需要显示一定数量的最新文章。为了实现这个,我们需要给短代码增加额外的选择来指定显示最新的多少篇文章。

我们需要使用两个函数,第一个是Wordpress内置的 shortcode_atts() 函数,它把用户的短代码属性与本地属性结合在一起,并填充到所需要的位置。第二个是PHP的 extract() 函数,顾名思义,它提取短代码的各个属性。

扩展我们的回调函数,我们添加一个参数,它是一个数组,从中我们可以提取到我们需要获取的文章的数量。我们查询数据库,获取指定数量的文章,并返回一个列表:

function new_posts_function($atts){
	extract(shortcode_atts(array(
		'posts' => 1,
	), $atts));
 
	$return_string = '<ul>';
	query_posts(array('orderby' => 'date', 'order' => 'DESC' , 'showposts' => $posts));
	if (have_posts()) :
		while (have_posts()) : the_post();
			$return_string .= '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
		endwhile;
	endif;
	$return_string .= '</ul>';
 
	wp_reset_query();
	return $return_string;
}

如果用户不指定该选项,1将是默认值。我们可以添加更多的属性,使短代码接受更多的参数。用这个增强的函数,我们可以指定调用最新文章的数量:
[new-posts posts=”5″]

在浏览器中显示时,你将看到最新的五篇文章列表;
wordpress-shortcode-2

接下来我们再往短代码中添加内容:
我们可以更进一步扩展我们的短代码,添加一些内容作为参数来传递,这将是最新文章列表的标题。为了实现此功能,我们需要在回调函数中增加第二个参数 $content ,并把它显示在列表前面的一个标签中。新的函数如下:

function new_posts_function($atts, $content = null) {
	extract(shortcode_atts(array(
		'posts' => 1,
	), $atts));
 
	$return_string = '<h3>'.$content.'</h3>';
	$return_string .= '<ul>';
	query_posts(array('orderby' => 'date', 'order' => 'DESC' , 'showposts' => $posts));
	if (have_posts()) :
		while (have_posts()) : the_post();
			$return_string .= '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
		endwhile;
	endif;
	$return_string .= '</ul>';
 
	wp_reset_query();
	return $return_string;
}

这种短代码类似于一个HTML标签:
[new-posts posts=”5″]This is the list heading[/new-posts]
除了文章列表多了一个标题,其余的内容和上一个示例是一样的:
wordpress-shortcode-3

wordpress默认情况下,侧边栏小工具是忽略短代码的,那么我们如果想在小工具中也使用我们自己的短代码应该怎么做呢?我们可以通过一行代码来启用这个函数,为了使侧边栏小工具支持短代码,添加如下的代码:
add_filter(‘widget_text’, ‘do_shortcode’);

同样的,在评论中启用短代码:
add_filter( ‘comment_text’, ‘do_shortcode’ );

以及在摘要中启用短代码:
add_filter( ‘the_excerpt’, ‘do_shortcode’);

发表评论

您的电子邮件地址将不会发布。