WordPress Shortcode / 简码是什么?有什么用?

2023-05-0211:46:33后端程序开发Comments699 views字数 2466阅读模式

WordPress Shortcode 指的是使用 [] 包含的简码或者短代码,WordPress 会识别这些代码并根据它们定义的回调函数输出相应的内容。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38249.html

Shortcode API 这个功能是 WordPress 从 2.5 版本开始引入的,使用它可以给文章内容添加各种功能,并且它的接口非常容易使用,并且功能非常强大。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38249.html

Shortcode 类型

Shortcode API 支持几乎所有可能的组合形式:自关闭标签,开放标签,含有参数的标签等。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38249.html

[mycode]
[mycode foo="bar" id="123" color="red" something="data"]
[mycode]一些内容[/mycode]
[mycode]<p><a href="http://example.com/">HTML 内容</a<>/p>[/mycode]
[mycode]内容 [another-shotcode] 更多内容[/mycode]
[mycode foo="bar" id="123"]一些内容[/mycode]

使用 Shortcode

在后台撰写的文章的时候,如果是古腾堡编辑器,直接可以选择简码的区块,它在小工具分类的比较下面:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38249.html

WordPress Shortcode / 简码是什么?有什么用?

然后在简码的区块中输入具体简码:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38249.html

WordPress Shortcode / 简码是什么?有什么用?
如果不是古腾堡编辑器则直接输入简码。

Shortcode 怎么执行

Shortcode 是怎么解析成所需的内容的呢?这是因为每个 Shortcode 都定义了一个对应的回调函数来处理,这个回调函数一般有两个参数:属性($attr)和内容($content):文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38249.html

function my_shortcode_func($attr, $content){
    // $attr $key=>$value 的数组
    // $content 是 shortcode 中包含的字符串内容
    // 对 $attr 和 $content 进行处理
    // 返回预期的值
}

然后把定义的 Shortcode 和其处理函数管理起来,以便 [mycode attr="value"]content[/mycode] 能够按照预期执行。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38249.html

add_shortcode('mycode', 'my_shortcode_func');

查看所有 Shortcode

WordPress 系统定义了哪些 Shortcode,我们可以使用 WPJAM Basic 插件的「常用简码」扩展来查看,激活扩展之后,在 「WPJAM」菜单的「常用简码」子菜单中即可查看:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38249.html

WordPress Shortcode / 简码是什么?有什么用?

除了 WordPress 本身定义的 Shotcode 之外,「常用简码」还定义了一些常用的 Shortcode,上图中函数以 WPJAM_Shortocode 类的 callback 方法就是「常用简码」扩展定义的。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38249.html

Shortcode 相关的函数

WordPress 定义了以下和 Shortcode 相关的函数:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38249.html

  • add_shortcode('mycode', 'function_name'); // 定义新的 Shortcode
  • remove_shortcode('mycode'); // 移除已定义的 Shortcode
  • remove_all_shortcodes(); // 移除所有的 Shortcode
  • $return = do_shortcode($content); // 解析 $content 中的 Shortcode 并返回
  • $return = strip_shortcodes($content); // 删除 $content 中的 Shortcode 标签并返回

一个简单的 Shortcode 例子

以 WPJAM Basic 插件的常用简码扩展中 email 简码为例讲解一下,它将输入的 email 地址转义成 HTML 实体,防止 email 地址被机器识别,然后被抓取。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38249.html

[email] 这个 Shortcode,它的内容($content)就是邮箱地址,还定义了属性 $link,它的值为 1 时候,邮箱显示为可点击,详细代码如下,我这里回调函数使用了闭包:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38249.html

add_shortcode('email', function($atts, $content='') {
	extract( shortcode_atts( array(
		'link' => '0'
	), $atts ) );

	if($link){
		return '<a href="mailto:'.antispambot($content,1).'" title="mail to '.antispambot($content,0).'">'.antispambot($content,0).'</a>';
	}else{
		return antispambot( $content,0);
	}
});

Shortcode 高级使用技巧:

只有 Shortcode 存在时才载入相关脚本文件,我们可以使用 has_shortcode() 这个函数来检测,存在才加载:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38249.html

add_action('wp_enqueue_scripts', function(){
	global $post;

	if(is_singular() && has_shortcode($post->post_content, 'your-shortcode')){
		wp_enqueue_script('whatever'); //检测到有用到简码后之后才加载脚本
	}
});

如果我们希望保持首页和其他列表页尽可能的简单,希望移除 Shortcode文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38249.html

add_filter('the_content', function($content) {
	if(!is_singular()){
		return strip_shortcodes($content);
	}
	return $content;
});

在其他地方使用 Shortcode?比如在侧边栏的 Widgets 中:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38249.html

add_filter('widget_text', 'do_shortcode');

在主题中,直接调用 do_shortcode 方法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38249.html

echo do_shortcode("[my_shortcode]");

我们在内容中想直接输出 shortcode 而不想执行,即如何转义,在 shortcode 外面多加一层 []文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38249.html

[[email]xxx@wpjam.com[/email]]
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/38249.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/38249.html

Comment

匿名网友 填写信息

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

确定