详解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实现短域名互转
Jul 05 PHP
php权重计算方法代码分享
Jan 09 PHP
destoon实现底部添加你是第几位访问者的方法
Jul 15 PHP
ci检测是ajax还是页面post提交数据的方法
Nov 10 PHP
php常用hash加密函数
Nov 22 PHP
PHP获取一年中每个星期的开始和结束日期的方法
Feb 12 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
Apr 21 PHP
PHP实现在线阅读PDF文件的方法
Jun 23 PHP
详解WordPress中简码格式标签编写的基本方法
Dec 22 PHP
PHP入门教程之操作符与控制结构流程详解
Sep 09 PHP
PHP 传输会话curl函数的实例详解
Sep 12 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
Apr 13 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
基于xcache的配置与使用详解
2013/06/18 PHP
PHP 断点续传实例详解
2017/11/11 PHP
PHP函数积累总结
2019/03/19 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
仅Firefox中链接A无法实现模拟点击以触发其默认行为
2011/07/31 Javascript
jquery绑定原理 简单解析与实现代码分享
2011/09/06 Javascript
基于jquery的拖动布局插件
2011/11/25 Javascript
jQuery照片伸缩效果不影响其他元素的布局
2014/05/09 Javascript
JS对象与json字符串格式转换实例
2014/10/28 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
jQuery获得document和window对象宽度和高度的方法
2015/03/25 Javascript
javascript事件模型介绍
2016/05/31 Javascript
基于JavaScript实现Tab选项卡切换效果
2016/11/24 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
JS中cookie的使用及缺点讲解
2017/05/13 Javascript
详解Angular Reactive Form 表单验证
2017/07/06 Javascript
详解JS数值Number类型
2018/02/07 Javascript
JavaScript数组去重算法实例小结
2018/05/07 Javascript
javascript将非数值转换为数值
2018/09/13 Javascript
如何在JavaScript中谨慎使用代码注释
2019/06/21 Javascript
微信小程序实现一张或多张图片上传(云开发)
2019/09/25 Javascript
layui的select联动实现代码
2019/09/28 Javascript
微信小程序静默登录的实现代码
2020/01/08 Javascript
python执行子进程实现进程间通信的方法
2015/06/02 Python
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
python中numpy包使用教程之数组和相关操作详解
2017/07/30 Python
python numpy格式化打印的实例
2018/05/14 Python
Python开发的十个小贴士和技巧及长常犯错误
2018/09/27 Python
python中必要的名词解释
2019/11/20 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
银行办理业务介绍信
2014/01/18 职场文书
社会实践感言
2014/01/25 职场文书
英文请假条
2014/04/11 职场文书
2014法制宣传日活动总结
2014/07/09 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
2015年机关作风和效能建设工作总结
2015/07/23 职场文书