详解WordPress中简码格式标签编写的基本方法
WordPress 简码是一种类似于论坛标签的东西,格式类似于把尖括号换成中括号的 Html 标签。简码很多人叫做短代码,但官方的翻译应该是简码,在这里纠正一下。
简码的开发的逻辑比较简单,主要就是添加、删除和判断,会在本文全部介绍。
简码格式
简码的格式非常灵活,可以是有属性、无属性、闭合、非闭合等等:
[example]
[example]内容[/example]
[example attr="属性" attr-hide="1"]内容[/example]
[example "属性"]
添加简码
添加简码需要使用 add_shortcode() 函数,两个属性,第一个为简码名,第二个是简码的回调函数。
1
|
add_shortcode( $tag , $func ); |
例如添加名为 test 的简码,回调 Bing_shortcode_test() 函数:
1
2
3
4
|
function Bing_shortcode_test( $attr , $content ){ return 'Hello World!' ; } add_shortcode( 'test' , 'Bing_shortcode_test' ); |
在文章中添加 [test] 就会输出 “Hello World!”。
从上边的例子可以看到,简码的回调函数需要接收两个参数。第一个是简码所有的属性,通过数组储存;第二个是简码的内容(闭合简码中的内容)。
移除简码
remove_shortcode() 函数可以移除一个简码,只需要指定简码的名称即可移除。
1
|
remove_shortcode( 'test' ); |
remove_all_shortcodes() 函数用来移除当前添加的所有简码。
1
|
remove_all_shortcodes(); |
判断简码
关于判断简码,有两个函数,shortcode_exists() 函数判断简码是否存在。
1
2
3
4
|
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() 函数,判断字符串中是否出现某某简码。
1
2
3
4
|
$content = '测试测试测试测试测试测试测试测试' ; if ( has_shortcode( $content , 'test' ) ) echo '字符串中有 test 简码' ; //False $content = '测试测试测试测[test]测试[/test]试测试测试测试测试' ; if ( has_shortcode( $content , 'test' ) ) echo '字符串中有 test 简码' ; //True |
执行简码
do_shortcode() 函数用来在字符串中查找简码,并在简码处调用之前添加的回调函数,把简码执行成需要的内容。
WordPress 添加的钩子:
1
|
add_filter( 'the_content' , 'do_shortcode' , 11 ); |
例子:
1
2
3
4
5
6
|
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() 函数:
1
2
3
4
5
6
7
8
9
10
|
function Bing_shortcode_test( $attr , $content ){ extract( shortcode_atts( array ( '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 地图插件:
1
2
3
4
5
6
7
8
9
10
11
|
//添加简码 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] 简码的时候才需要加载脚本,这怎么做到呢?
其实很简单,只需要在简码函数触发的时候在页脚挂载脚本即可。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
//添加简码 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 文件里,有能力的朋友可以阅读一下,了解原理。
详解WordPress中简码格式标签编写的基本方法的更多相关文章
- 详解HTML中的表格标签
详细代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" ...
- Usermod 命令详解 ------工作中修改shell时用 usermod -s /bin/csh home
Usermod 命令详解 2012-09-11 11:01:36 标签:usermod 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.htt ...
- 使用IDEA详解Spring中依赖注入的类型(上)
使用IDEA详解Spring中依赖注入的类型(上) 在Spring中实现IoC容器的方法是依赖注入,依赖注入的作用是在使用Spring框架创建对象时动态地将其所依赖的对象(例如属性值)注入Bean组件 ...
- Java基础进阶:多态与接口重点摘要,类和接口,接口特点,接口详解,多态详解,多态中的成员访问特点,多态的好处和弊端,多态的转型,多态存在的问题,附重难点,代码实现源码,课堂笔记,课后扩展及答案
多态与接口重点摘要 接口特点: 接口用interface修饰 interface 接口名{} 类实现接口用implements表示 class 类名 implements接口名{} 接口不能实例化,可 ...
- jQuery:详解jQuery中的事件(二)
上一篇讲到jQuery中的事件,深入学习了加载DOM和事件绑定的相关知识,这篇主要深入讨论jQuery事件中的合成事件.事件冒泡和事件移除等内容. 接上篇jQuery:详解jQuery中的事件(一) ...
- 图文详解Unity3D中Material的Tiling和Offset是怎么回事
图文详解Unity3D中Material的Tiling和Offset是怎么回事 Tiling和Offset概述 Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置. 这样说当然是隔 ...
- 深入详解SQL中的Null
深入详解SQL中的Null NULL 在计算机和编程世界中表示的是未知,不确定.虽然中文翻译为 “空”, 但此空(null)非彼空(empty). Null表示的是一种未知状态,未来状态,比如小明兜里 ...
- java 乱码详解_jsp中pageEncoding、charset=UTF -8"、request.setCharacterEncoding("UTF-8")
http://blog.csdn.net/qinysong/article/details/1179480 java 乱码详解__jsp中pageEncoding.charset=UTF -8&quo ...
- 详解Java中的clone方法
详解Java中的clone方法 参考:http://blog.csdn.net/zhangjg_blog/article/details/18369201/ 所谓的复制对象,首先要分配一个和源对象同样 ...
随机推荐
- 除了love和hate,还能怎么表达那些年的“爱恨情仇”?
实用英语 帮你全面提高英语水平 关注 童鞋们每次刷美剧的时候,相信都会被CP感满满的男女主角虐得体无完肤吧. 可是,一到我们自己表达爱意或者恨意的时候,却苦于词穷,只会用love, like, hat ...
- Stars POJ - 2352
Astronomers often examine star maps where stars are represented by points on a plane and each star h ...
- [LeetCode] 1. Two Sum ☆
Given an array of integers, return indices of the two numbers such that they add up to a specific ta ...
- 数据结构:ST表
BZOJ1699 在经历了树套树和主席树的洗礼之后,所有的数据结构都显得格外地亲切,和自然.. ST算法能够实现O(nlogn)的预处理的情况下完成O(1)的区间最值查询 虽然这要求区间是静态的,也就 ...
- python学习笔记(二)之python简单实践
1 安装python开发环境 Linux环境下自动安装好了python,可以通过以下命令更新到python最新版本. #echo "alias python=/usr/bin/python3 ...
- 崩坏3mmd中的渲染技术研究
http://youxiputao.com/articles/11839 主要是参考该篇文章做一个微小的复盘. 漫反射与高光 文章中的漫反射与高光并不是类似于普通的 resultCol = Diffu ...
- centos 挂载数据盘
第一.检查硬盘设备是否有数据盘 fdisk -l 第二.数据硬盘分区 fdisk /dev/vdb 第三.ext3格式化分区 mkfs.ext3 /dev/vdb1 第四.挂载新分区 A - 新建目录 ...
- HDU 1728 逃离迷宫 (广搜)
题目链接 Problem Description 给定一个m × n (m行, n列)的迷宫,迷宫中有两个位置,gloria想从迷宫的一个位置走到另外一个位置,当然迷宫中有些地方是空地,gloria可 ...
- position的用法与心得
position的四个属性值: relative absolute fixed static 为了便于理解,首先创建对应的div <div class="main"> ...
- LCD实验学习笔记(七):NAND FLASH
s3c2440 CPU内置NAND FLASH控制器.相关寄存大器起始地址为0x4e000000. 通过设置NFCONF寄存器,设置NAND FLASH 时序. 通过设置NFCONT寄存器,使能NAN ...