详解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/ 所谓的复制对象,首先要分配一个和源对象同样 ...
随机推荐
- JavaScript定义类的方式与其它OO语言有些差异
JavaScript面向对象的程序编写与其它OO语言有一些出入,所以使用JavaScript的面向对象特性的时候,需要注意一些规范性的问题.下面就简单地谈一下,JavaScript如何定义一个类,在定 ...
- 解决 cmd dos 下 无法显示中文
在做程序开发的时候经常需要在使用命令行进行操作, dos环境本身是不支持中文的,有时候中文编码的问题就像苍蝇一样讨厌,下面提供几种常用的手段解决win7环境下中文显示乱码的问题: 方法一: 修改注册表 ...
- Friendship POJ - 1815 基本建图
In modern society, each person has his own friends. Since all the people are very busy, they communi ...
- 南阳ACM 题目8:一种排序 Java版
一种排序 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复:还知道这个长方形的宽和长,编号.长.宽都是整数:现 ...
- Tomcat 7下如何利用 catalina.properties 部署公用类
Tomcat 有很多配置文件,其中一个是 catalina.properties ,本文介绍catalina.properties 中的设置项. 一.组成 catalina.properties ...
- 【NOIP】提高组2015 运输计划
[题意]n个点的树,m条链,求将一条边的权值置为0使得最大链长最小. [算法]二分+树上差分 [题解] 最大值最小化问题,先考虑二分最大链长. 对所有链长>mid的链整体+1(树上差分). 然后 ...
- springboot:Spring boot中mongodb的使用(山东数漫江湖)
mongodb是最早热门非关系数据库的之一,使用也比较普遍,一般会用做离线数据分析来使用,放到内网的居多.由于很多公司使用了云服务,服务器默认都开放了外网地址,导致前一阵子大批 MongoDB 因配置 ...
- 【洛谷 P2762】 太空飞行计划问题(最大权闭合图)
题目链接 最大权闭合图模型,参考 具体做法是从源点向每个实验连一条流量为这个实验的报酬的边,从每个实验向这个实验需要的所有器材各连一条流量为\(INF\)的边,再从每个器材向汇点连一条流量为这个器材的 ...
- idea ssm框架搭建
1.分享一篇完整的ssm框架搭建连接 大牛博客:https://www.cnblogs.com/toutou/p/ssm_spring.html#_nav_0 2.我的搭建的完整项目连接,可以进入我的 ...
- ASP.NET 设置DropDownList的当前选项
1.通过显示字符Text DropDownList.Items.FindByText("你的值").Selected=true; 如果在设置之前,进行过设置,应用如下格式: Dro ...