详解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 09 PHP
《PHP边学边教》(02.Apache+PHP环境配置――下篇)
Dec 13 PHP
PHP脚本中include文件出错解决方法
Nov 20 PHP
php获取后台Job管理的实现代码
Jun 10 PHP
有关phpmailer的详细介绍及使用方法
Jan 28 PHP
php+jQuery.uploadify实现文件上传教程
Dec 26 PHP
php读取flash文件高宽帧数背景颜色的方法
Jan 06 PHP
php include类文件超时问题处理
Feb 06 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
May 27 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
Jan 07 PHP
php+Ajax处理xml与json格式数据的方法示例
Mar 04 PHP
浅谈PHP7中的一些小技巧
May 29 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获取某个目录大小的代码
2008/09/10 PHP
细谈php中SQL注入攻击与XSS攻击
2012/06/10 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
基于PHP实现微信小程序客服消息功能
2019/08/12 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
2020/01/23 PHP
jquery选择器(常用选择器说明)
2010/09/28 Javascript
说明你的Javascript技术很烂的五个原因
2011/04/26 Javascript
jQuery代码优化 事件委托篇
2011/11/01 Javascript
jquery插件制作 手风琴Panel效果实现
2012/08/17 Javascript
jquery固定底网站底部菜单效果
2013/08/13 Javascript
javascript 获取网页标题代码实例
2014/01/22 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
2014/04/23 Javascript
使用Chrome调试JavaScript的断点设置和调试技巧
2014/12/16 Javascript
Bootstrap每天必学之导航条
2015/11/27 Javascript
jquery实现全选、反选、获得所有选中的checkbox
2020/09/13 Javascript
jQuery中数据缓存$.data的用法及源码完全解析
2016/04/29 Javascript
仿iframe效果Aajx文件上传实例
2016/11/18 Javascript
[01:14]辉夜杯战队访谈宣传片—NEWBEE.Y
2015/12/26 DOTA
使用Python的toolz库开始函数式编程的方法
2018/11/15 Python
pandas使用apply多列生成一列数据的实例
2018/11/28 Python
Python基于plotly模块实现的画图操作示例
2019/01/23 Python
余弦相似性计算及python代码实现过程解析
2019/09/18 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
2019/10/09 Python
Django 再谈一谈json序列化
2020/03/16 Python
Django的ListView超详细用法(含分页paginate)
2020/05/21 Python
Python函数调用追踪实现代码
2020/11/27 Python
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
代理人委托书
2014/08/01 职场文书
先进工作者推荐材料
2014/12/23 职场文书
工作时间调整通知
2015/04/24 职场文书
Python如何利用正则表达式爬取网页信息及图片
2021/04/17 Python
python保存大型 .mat 数据文件报错超出 IO 限制的操作
2021/05/10 Python
pytorch通过训练结果的复现设置随机种子
2021/06/01 Python
vue Element-ui表格实现树形结构表格
2021/06/07 Vue.js