详解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/ 所谓的复制对象,首先要分配一个和源对象同样 ...
随机推荐
- 两年Java的面试经验
前言:从过年前就萌生出要跳槽的想法,到过年来公司从3月初提出离职到23号正式离职,上班的时间也出去面试过几家公司,后来总觉的在职找工作总是得请假,便决心离职后找工作.到4月10号找到了一家互联网公司成 ...
- PowerDesigner12.5下载汉化及破解
一.下载: 在网上直接输入PowerDesigner12.5下载,很多地方都可以下载成功. 二.汉化: 直接将解压的汉化文件复制[覆盖]到安装目录即可. 三.破解[稍微费事一点]: 1.安装完成后,修 ...
- [nginx]proxy_pass&rewrite知识点
While passing request nginx replaces URI part which corresponds to location with one indicated in pr ...
- 美国选举问题/完全背包/Knapsack
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Knap ...
- CMDB资产管理系统开发【day26】:批准资产入库
刚才都是一条像内存,硬盘,网卡.多条的话如何操作 只有一条数据 下面的是有多条数据的 硬盘必须字段的验证 def __create_disk_component(self): disk_info = ...
- Elasticsearch6.0 IKAnalysis分词使用
Elasticsearch 内置的分词器对中文不友好,会把中文分成单个字来进行全文检索,不能达到想要的结果,在全文检索及新词发展如此快的互联网时代,IK可以进行友好的分词及自定义分词. IK Anal ...
- LightOJ 1058 - Parallelogram Counting 几何思维
http://www.lightoj.com/volume_showproblem.php?problem=1058 题意:给你顶点,问能够成多少个平行四边形. 思路:开始想使用长度来扫描有多少根,但 ...
- PHP扩展--APC缓存安装与使用
apc安装 wget http://pecl.php.net/get/APC-3.1.13.tgz tar zxvf APC-3.1.13.tgz cd APC-3.1.13 /usr/local/p ...
- elasticsearch中Node的创建
要连接到集群,首先要告诉集群:你是谁,你有什么特征.在es中体现为实例化节点,elasticsearch通过org.elasticsearch.node.NodeBuilder的build()或者no ...
- 如何查看由EF生成的SQL?
如下: query = from c in query group c by c.Id into cGroup orderby cGroup.Key select cGroup.FirstOrDefa ...