详解WordPress中简码格式标签编写的基本方法


Posted in PHP onDecember 22, 2015

WordPress 简码是一种类似于论坛标签的东西,格式类似于把尖括号换成中括号的 Html 标签。简码很多人叫做短代码,但官方的翻译应该是简码,在这里纠正一下。

简码的开发的逻辑比较简单,主要就是添加、删除和判断,会在本文全部介绍。

简码格式

简码的格式非常灵活,可以是有属性、无属性、闭合、非闭合等等:

[example]

[example]内容[/example]

[example attr="属性" attr-hide="1"]内容[/example]

[example "属性"]

添加简码

添加简码需要使用 add_shortcode() 函数,两个属性,第一个为简码名,第二个是简码的回调函数。

add_shortcode( $tag, $func );

例如添加名为 test 的简码,回调 Bing_shortcode_test() 函数:

function Bing_shortcode_test( $attr, $content ){
  return 'Hello World!';
}
add_shortcode( 'test', 'Bing_shortcode_test' );

在文章中添加 [test] 就会输出 “Hello World!”。

从上边的例子可以看到,简码的回调函数需要接收两个参数。第一个是简码所有的属性,通过数组储存;第二个是简码的内容(闭合简码中的内容)。

移除简码

remove_shortcode() 函数可以移除一个简码,只需要指定简码的名称即可移除。

remove_shortcode( 'test' );

remove_all_shortcodes() 函数用来移除当前添加的所有简码。

remove_all_shortcodes();

判断简码

关于判断简码,有两个函数,shortcode_exists() 函数判断简码是否存在。

remove_all_shortcodes();
if( shortcode_exists( 'test' ) ) echo '简码 test 存在';//False
add_shortcode( 'test', 'Bing_shortcode_test' );
if( shortcode_exists( 'test' ) ) echo '简码 test 存在';//True

还有一个 has_shortcode() 函数,判断字符串中是否出现某某简码。

$content = '测试测试测试测试测试测试测试测试';
if( has_shortcode( $content, 'test' ) ) echo '字符串中有 test 简码';//False
$content = '测试测试测试测[test]测试[/test]试测试测试测试测试';
if( has_shortcode( $content, 'test' ) ) echo '字符串中有 test 简码';//True

执行简码

do_shortcode() 函数用来在字符串中查找简码,并在简码处调用之前添加的回调函数,把简码执行成需要的内容。

WordPress 添加的钩子:

add_filter( 'the_content', 'do_shortcode', 11 );

例子:

function Bing_shortcode_test( $attr, $content ){
  return 'Hello World!';
}
add_shortcode( 'test', 'Bing_shortcode_test' );
$content = '测试测试测试测[test]试测试测试测试测试';
echo do_shortcode( $content );//测试测试测试测Hello World!试测试测试测试测试

简码属性

简码支持各种格式的属性,接受给简码回调函数的第一个参数。如果你要给参数设置默认值,可以使用 shortcode_atts() 函数:

function Bing_shortcode_test( $attr, $content ){
  extract( shortcode_atts( array(
    'url' => 'http://www.bgbk.org',
    'hide' => false,
    'text' => '点击隐藏 / 显示'
  ), $attr ) );
  $hide = $hide ? ' style="display:none;"' : '';
  return '<a href="' . $url . '"' . $hide . '>' . $text . '</a>';
}
add_shortcode( 'test', 'Bing_shortcode_test' );

只有页面中使用了简码的时候才加载脚本
而在开发的过程中,有时会遇到这种问题:简码模块需要加载 JS 或者 CSS 脚本,而当页面没有使用简码的时候就会造成资源浪费。

比如下边的这个 Google 地图插件:

//添加简码
function Bing_add_google_map( $atts, $content ){
  //content...
}
add_shortcode( 'google_map', 'Bing_add_google_map');
 
//挂载脚本
function Bing_add_javascript(){
  wp_enqueue_script( 'map_scripts' );
}
add_action( 'wp_enqueue_scripts', 'Bing_add_javascript' );

只有在页面中使用了 [google_map] 简码的时候才需要加载脚本,这怎么做到呢?

其实很简单,只需要在简码函数触发的时候在页脚挂载脚本即可。

//添加简码
function Bing_add_google_map( $atts, $content ){
  $GLOBALS['google_map_shortcode'] = true;
  return '地图的代码';
}
add_shortcode( 'google_map', 'Bing_add_google_map');
 
//挂载脚本
function Bing_add_javascript(){
  global $google_map_shortcode;
  if( isset( $google_map_shortcode ) && $google_map_shortcode ) wp_enqueue_script( 'map_scripts' );
}
add_action( 'wp_footer', 'Bing_add_javascript' );

总结

简码是个非常强大的功能,对文章内容是一种很好的扩展,利用好可以让添加某些东西变的方便快捷。

关于简码的函数都在:wp-includes/shortcode.php 文件里,有能力的朋友可以阅读一下,了解原理。

PHP 相关文章推荐
利用PHP制作简单的内容采集器的原理分析
Oct 01 PHP
PHP 计算代码执行耗时的代码修正网上普遍错误
May 14 PHP
利用curl 多线程 模拟 并发的详解
Jun 14 PHP
深入浅析php中sprintf与printf函数的用法及区别
Jan 08 PHP
WordPress中设置Post Type自定义文章类型的实例教程
May 10 PHP
smarty的section嵌套循环用法示例
May 28 PHP
详解PHP5.6.30与Apache2.4.x配置
Jun 02 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
PHP cURL获取微信公众号access_token的实例
Apr 28 PHP
laravel批量生成假数据的方法
Oct 09 PHP
PHP 代码简洁之道(小结)
Oct 16 PHP
php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析
Apr 20 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
Dec 22 #PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
Dec 22 #PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
Dec 22 #PHP
解析WordPress中函数钩子hook的作用及基本用法
Dec 22 #PHP
WordPress中使主题支持小工具以及添加插件启用函数
Dec 22 #PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
Dec 22 #PHP
PHP使用mkdir创建多级目录的方法
Dec 22 #PHP
You might like
php中在PDO中使用事务(Transaction)
2011/05/14 PHP
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
Linux下PHP连接Oracle数据库
2014/08/20 PHP
php中spl_autoload详解
2014/10/17 PHP
深入浅析yii2-gii自定义模板的方法
2016/04/26 PHP
基于swoole实现多人聊天室
2018/06/14 PHP
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
js二维数组定义和初始化的三种方法总结
2014/03/03 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
2014/09/01 Javascript
JavaScript中string对象
2015/06/12 Javascript
js获取当前年月日-YYYYmmDD格式的实现代码
2016/06/01 Javascript
jQuey将序列化对象在前台显示地实现代码(方法总结)
2016/12/13 Javascript
jQuery排序插件tableSorter使用方法
2017/02/10 Javascript
vue.js计算属性computed用法实例分析
2018/07/06 Javascript
angularjs 动态从后台获取下拉框的值方法
2018/08/13 Javascript
layui 解决form表单点击无反应的问题
2019/10/25 Javascript
[15:56]Heroes18_暗影萨满(完美)
2014/10/31 DOTA
设计模式中的原型模式在Python程序中的应用示例
2016/03/02 Python
Python入门_浅谈for循环、while循环
2017/05/16 Python
Python使用re模块实现信息筛选的方法
2018/04/29 Python
Python中的Numpy矩阵操作
2018/08/12 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
pyqt 多窗口之间的相互调用方法
2019/06/19 Python
Python搭建Keras CNN模型破解网站验证码的实现
2020/04/07 Python
python属于解释型语言么
2020/06/15 Python
英国豪华家具和经典家居饰品购物网站:OKA
2020/06/05 全球购物
好家长事迹材料
2014/01/23 职场文书
简历里的自我评价
2014/01/31 职场文书
放飞蜻蜓反思
2014/02/05 职场文书
经贸韩语专业大学生职业规划
2014/02/14 职场文书
住宅使用说明书
2014/05/09 职场文书
化妆品促销活动总结
2015/05/07 职场文书
离婚起诉书范文2016
2015/11/26 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
gojs实现蚂蚁线动画效果
2022/02/18 Javascript