详解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(

    ‘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 地图插件:

?


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 文件里,有能力的朋友可以阅读一下,了解原理。

时间: 2024-10-07 05:16:04

详解WordPress中简码格式标签编写的基本方法的相关文章

详解MYSQL中重命名procedure的一种方法

最近有用到对存储过程(procedure)重命名的功能,在网上找了一下资料都没有讲到在mysql中是如何实现的,当然可以删掉再重建,但是应该有别的方法,在“mysql”这个数据库(自带)中找了一下,发现两张表:func.proc,发现func表是空的,proc表记录了有关procedure和function有关的信息. 尝试对proc表进行更新,重命名成功了! 原文地址:https://www.cnblogs.com/tacatno/p/10921942.html

CSS学习笔记(9)--详解CSS中:nth-child的用法

详解CSS中:nth-child的用法 前端的哥们想必都接触过css中一个神奇的玩意,可以轻松选取你想要的标签并给与修改添加样式,是不是很给力,它就是":nth-child". 下面我将用几个典型的实例来给大家讲解:nth-child的实际用途: Tips:还用低版本的IE浏览器的哥们请绕过! :nth-child(2)选取第几个标签,"2可以是你想要的数字" .demo01 li:nth-child(2){background:#090} :nth-child(n

图文详解Unity3D中Material的Tiling和Offset是怎么回事

图文详解Unity3D中Material的Tiling和Offset是怎么回事 Tiling和Offset概述 Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置. 这样说当然是隔靴搔痒. 下面用*.3ds文件作为模型,介绍Tiling和Offset到底是怎么回事. 3DS格式解析 比如我有这样一个tank_player.3ds模型.右侧的'select'处的图片就是贴图. *.3ds文件最基本的内容包括顶点列表Vertices.贴图坐标列表UVs.面列表Faces.其中Ve

详解CSS中:nth-child的用法_大前端

http://www.daqianduan.com/3737.html 前端的哥们想必都接触过css中一个神奇的玩意,可以轻松选取你想要的标签并给与修改添加样式,是不是很给力,它就是":nth-child". 下面我将用几个典型的实例来给大家讲解:nth-child的实际用途: Tips:还用低版本的IE浏览器的哥们请绕过! :nth-child(2)选取第几个标签,"2可以是你想要的数字" .demo01 li:nth-child(2){background:#0

(转)详解Android中AsyncTask的使用

转载自:详解Android中AsyncTask的使用 在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更新,这种方式对于整个过程的控制比较精细,但也是有缺点的,例如代码相对臃肿,在多个任务同时执行时,不易对线程进行精确的控制.关于Handler的相关知识,前面也有所介绍,不清楚的朋友们可以参照一下. 为了简化操作,Android1.5提供了工具类a

详解MathType中如何更改公式颜色

在MathType数学公式编辑器中可以通过更改公式颜色,起到美化.标注公式的效果.本教程将详解MathType中如何更改公式颜色. 点击菜单栏中的样式->格式->颜色,用户就可以根据自己的喜好选择想要的颜色. 更改字体颜色后的效果图: 如果默认的这几个颜色不够选择的话,还可以点击“其他”按钮,打开颜色库,点击需要的颜色后,点击“确定”按钮即可. 如果需要将某一颜色设为默认颜色,则需点击“编辑颜色菜单”按钮,设定好颜色后,点击“设为默认值”即可. 通过以上操作,即可完成在MathType数学公式

详解BLE 空中包格式—兼BLE Link layer协议解析

BLE有几种空中包格式?常见的PDU命令有哪些?PDU和MTU的区别是什么?DLE又是什么?BLE怎么实现重传的?BLE ACK机制原理是什么?希望这篇文章能帮你回答以上问题. 虽然BLE空中包(packet)涉及BLE协议栈link layer,L2CAP,SMP和ATT等各层次,但link layer跟空中包格式关系最紧密,掌握了BLE packet的格式,就很容易理解BLE link layer协议的工作原理,因此文章取名"详解BLE空中包格式-兼BLE link layer协议解析&qu

详解Linux中的日志及用日志来排查错误的方法

这篇文章主要介绍了详解Linux中的日志及用日志来排查错误的方法,是Linux入门学习中的基础知识,需要的朋友可以参考下 Linux 系统日志许多有价值的日志文件都是由 Linux 自动地为你创建的.你可以在 /var/log 目录中找到它们.下面是在一个典型的 Ubuntu 系统中这个目录的样子: 一些最为重要的 Linux 系统日志包括: /var/log/syslog 或 /var/log/messages 存储所有的全局系统活动数据,包括开机信息.基于 Debian 的系统如 Ubunt

详解Linux中的cat文本输出命令用法

作系统 > LINUX > 详解Linux中的cat文本输出命令用法 Linux命令手册   发布时间:2016-01-14 14:14:35   作者:张映    我要评论 这篇文章主要介绍了Linux中的cat文本输出命令用法,是Linux入门学习中的基础知识,需要的朋友可以参考下 cat命令是linux下的一个文本输出命令,通常是用于观看某个文件的内容的.一.功能cat主要有三大功能:1.一次显示整个文件. 复制代码 代码如下: $ cat filename 2.从键盘创建一个文件. 复