详解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&amp;mysql(三)
Oct 09 PHP
main.php
Dec 09 PHP
PHP迅雷、快车、旋风下载专用链转换代码
Jun 15 PHP
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
Jan 12 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
Apr 21 PHP
PHP中使用localhost连接Mysql不成功的解决方法
Aug 20 PHP
在WordPress中安装使用视频播放器插件Hana Flv Player
Jan 04 PHP
简单谈谈php延迟静态绑定
Jan 26 PHP
thinkPHP3.1验证码的简单实现方法
Apr 22 PHP
yii2控制器Controller Ajax操作示例
Jul 23 PHP
基于PHP的加载类操作以及其他两种魔术方法的应用实例
Aug 28 PHP
php让json_encode不自动转义斜杠“/”的方法
Apr 27 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面向对象的使用教程 简单数据库连接
2006/11/25 PHP
php中一个完整表单处理实现代码
2011/11/10 PHP
Nginx下配置codeigniter框架方法
2015/04/07 PHP
php生成数字字母的验证码图片
2015/07/14 PHP
PHP抓取及分析网页的方法详解
2016/04/26 PHP
javascript 获取图片颜色
2009/04/05 Javascript
Mootools 1.2教程 定时器和哈希简介
2009/09/15 Javascript
js 剪切板应用clipboardData详细解析
2013/12/17 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
Node.js和MongoDB实现简单日志分析系统
2015/04/25 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
JQuery解析XML的方法小结
2016/04/02 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
给easyui的datebox控件添加清空按钮的实现方法
2016/11/09 Javascript
Angular工具方法学习
2016/12/26 Javascript
前端分页功能的实现以及原理(jQuery)
2017/01/22 Javascript
bootstrap常用组件之头部导航实现代码
2017/04/20 Javascript
浅析vue中的MVVM实现原理
2019/03/04 Javascript
Python 常用的安装Module方式汇总
2017/05/06 Python
python with提前退出遇到的坑与解决方案
2018/01/05 Python
python try except 捕获所有异常的实例
2018/10/18 Python
手把手教你pycharm专业版安装破解教程(linux版)
2019/09/26 Python
Python 中的pygame安装与配置教程详解
2020/02/10 Python
美国半成品食材配送服务商:Home Chef
2018/01/25 全球购物
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
自我鉴定怎么写
2013/12/05 职场文书
应届毕业生求职信范文
2013/12/18 职场文书
联谊活动策划书
2014/01/26 职场文书
团日活动总结书格式
2014/05/08 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
2015年数学教研工作总结
2015/07/22 职场文书
《只有一个地球》教学反思
2016/02/16 职场文书
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript