详解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 相关文章推荐
windows7下安装php的imagick和imagemagick扩展教程
Jul 04 PHP
php获取一个变量的名字的方法
Sep 05 PHP
php压缩和解压缩字符串的方法
Mar 14 PHP
Laravel 5框架学习之日期,Mutator 和 Scope
Apr 08 PHP
8个PHP数组面试题
Jun 23 PHP
PHP设置头信息及取得返回头信息的方法
Jan 25 PHP
php封装的mysqli类完整实例
Oct 18 PHP
PHP面向对象程序设计OOP继承用法入门示例
Dec 27 PHP
php可变长参数处理函数详解
Feb 22 PHP
Swoole实现异步投递task任务案例详解
Apr 02 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
Aug 27 PHP
laravel接管Dingo-api和默认的错误处理方式
Oct 25 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/26 PHP
php通过两层过滤获取留言内容的方法
2016/07/11 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
PHP入门教程之操作符与控制结构流程详解
2016/09/09 PHP
javascript引用对象的方法代码
2007/08/13 Javascript
javascript &amp;&amp;和||运算法的另类使用技巧
2009/11/28 Javascript
Jquery之Ajax运用 学习运用篇
2011/09/26 Javascript
jQuery快速上手:写jQuery与直接写JS的区别详细解析
2013/08/26 Javascript
浅谈Javascript线程及定时机制
2015/07/02 Javascript
基于javascript实现listbox左右移动
2016/01/29 Javascript
js获取页面及个元素高度、宽度的代码
2016/04/26 Javascript
node+express制作爬虫教程
2016/11/11 Javascript
如何学JavaScript?前辈的经验之谈
2016/12/28 Javascript
详解vue-Resource(与后端数据交互)
2017/01/16 Javascript
CSS3+JavaScript实现翻页幻灯片效果
2017/06/28 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
2017/07/05 Javascript
深入浅析javascript继承体系
2017/10/23 Javascript
使用vue官方提供的模板vue-cli搭建一个helloWorld案例分析
2018/01/16 Javascript
vue自定义底部导航栏Tabbar的实现代码
2018/09/03 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
2018/10/11 Javascript
利用JS如何获取form表单数据
2019/12/19 Javascript
Python装饰器decorator用法实例
2014/11/10 Python
如何实现删除numpy.array中的行或列
2018/05/08 Python
python中ImageTk.PhotoImage()不显示图片却不报错问题解决
2018/12/06 Python
python爬取抖音视频的实例分析
2021/01/19 Python
图解CSS3制作圆环形进度条的实例教程
2016/05/26 HTML / CSS
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
资料员的岗位职责
2013/11/20 职场文书
幼儿园儿童节活动主持词+串词大全
2014/03/21 职场文书
保密工作目标责任书
2014/07/28 职场文书
民主生活会对照检查材料范文
2014/10/01 职场文书
夫妻忠诚协议书范本
2014/11/17 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
php去除deprecated的实例方法
2021/11/17 PHP
win10频率超出范围怎么办?win10老显示超出工作频率范围的解决方法
2022/07/07 数码科技
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技