详解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 相关文章推荐
通过html表格发电子邮件
Oct 09 PHP
PHP基础学习小结
Apr 17 PHP
php 目录与文件处理-郑阿奇(续)
Jul 04 PHP
解决PhpMyAdmin中导入2M以上大文件限制的方法分享
Jun 06 PHP
php一维二维数组键排序方法实例总结
Nov 13 PHP
Laravel 5框架学习之用户认证
Apr 09 PHP
PHP模板引擎smarty详细介绍
May 26 PHP
PHP批量去除BOM头内容信息代码
Mar 11 PHP
使用JavaScript创建新样式表和新样式规则
Jun 14 PHP
PHP批量修改文件名称的方法分析
Feb 27 PHP
php封装单文件上传到数据库(路径)
Oct 15 PHP
通过代码实例解析PHP session工作原理
Dec 11 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
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
javascript转换字符串为dom对象(字符串动态创建dom)
2010/05/10 Javascript
jquery通过closest选择器修改上级元素的方法
2015/03/17 Javascript
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
JavaScript多并发问题如何处理
2015/10/28 Javascript
使用jQuery获取data-的自定义属性
2015/11/10 Javascript
利用jQuery设计一个简单的web音乐播放器的实例分享
2016/03/08 Javascript
jquery选择器中的空格与大于号&gt;、加号+与波浪号~的区别介绍
2016/06/24 Javascript
jQuery操作iframe中js函数的方法小结
2016/07/06 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
2016/09/14 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
jQuery如何跳转到另一个网页 就这么简单
2016/12/28 Javascript
JS闭包用法实例分析
2017/03/27 Javascript
Node接收电子邮件的实例代码
2017/07/21 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
[06:09]辉夜杯主赛事开幕式
2015/12/25 DOTA
Python的Bottle框架中实现最基本的get和post的方法的教程
2015/04/30 Python
pandas DataFrame数据转为list的方法
2018/04/11 Python
Django 使用logging打印日志的实例
2018/04/28 Python
Python+AutoIt实现界面工具开发过程详解
2019/08/07 Python
python如何从文件读取数据及解析
2019/09/19 Python
python实现b站直播自动发送弹幕功能
2021/02/20 Python
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
美国益智玩具购物网站:Fat Brain Toys
2017/11/03 全球购物
英国健身超市:Fitness Superstore
2019/06/17 全球购物
本科毕业生求职自荐信
2014/04/09 职场文书
《秋游》教学反思
2014/04/24 职场文书
护林防火标语
2014/06/27 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
辞职信怎么写
2015/02/27 职场文书
学会感恩主题班会
2015/08/12 职场文书
2016大学军训心得体会
2016/01/11 职场文书
2019暑假阅读倡议书
2019/06/24 职场文书
MySQL数据迁移相关总结
2021/04/29 MySQL
win10频率超出范围怎么办?win10老显示超出工作频率范围的解决方法
2022/07/07 数码科技