什么是简码?
简码是一种在WordPress内容中插入动态内容的方式。简码的概念在WordPress 2.5版本中被引入,目的是让用户可以在文章中动态地添加相册、视频、表单等内容。
举例:就像在文档中插入一个占位符,简码可以在不插入PHP代码的情况下,动态地呈现内容。
速记句:简码是WordPress中动态插入内容的占位符。
为什么使用简码?
简码的主要优点是保持文章内容的干净和语义化。它避免了直接在文章中添加HTML标记,并且可以通过调整简码参数来修改内容的显示。
举例:想象一下,你在桌面上放置一个标签,而不是直接摆放物品,这样可以随时根据需要调整物品的排列。
速记句:使用简码,内容更干净,调整更灵活。
如何创建基本简码?
要创建一个基本简码,您可以使用 add_shortcode()
函数。这个函数接受两个参数:简码的名称和回调函数。
示例代码:
function wporg_shortcode($atts = [], $content = null) {
return $content;
}
add_shortcode('wporg', 'wporg_shortcode');
解析:在上面的示例中,wporg
是创建的简码名称,当用户在文章中使用
[wporg] 时,WordPress会调用 wporg_shortcode
函数来处理内容。
速记句:使用 add_shortcode()
为WordPress创建自定义简码。
自闭合简码与闭合简码
简码有两种形式:自闭合简码和闭合简码。自闭合简码类似于HTML中的 <br>
标签,不需要结束标记。而闭合简码则类似于 <div></div>
这样的标签,需要有开始和结束标记。
示例:
[wporg]content[/wporg]
// 闭合简码
[wporg] // 自闭合简码
解析:闭合简码允许您操作包裹在简码中的内容,而自闭合简码则不包含任何内容。
速记句:自闭合简码像
<br>
,闭合简码像<div>
。
带参数的简码
简码可以接受参数,这些参数就像HTML标签的属性,可以用于定制简码的输出内容。
示例:
[wporg title="WordPress.org"]Content here.[/wporg]
解析:在这个例子中,
title
是简码的参数,开发者可以在简码的回调函数中通过$atts
数组获取并使用这些参数。速记句:简码参数像HTML属性,提供更多控制选项。
处理简码的属性
为了正确处理简码的属性,开发者通常会使用
shortcode_atts()
函数来设置默认值并解析用户传入的属性。示例代码:
$atts = shortcode_atts([ 'title' => 'WordPress.org', ], $atts, $tag);
解析:该代码确保即使用户未提供
title
参数,简码仍然会使用默认值WordPress.org
。速记句:用
shortcode_atts()
解析简码属性,确保有默认值。
嵌套简码
简码解析器默认只处理一次内容。如果简码的内容中包含另一个简码,您需要在回调函数中使用
do_shortcode()
来递归解析。示例代码:
function wporg_shortcode($atts = [], $content = null) { $content = do_shortcode($content); return $content; }
解析:这段代码确保在处理内容时,嵌套的简码也会被解析。
速记句:用
do_shortcode()
解析嵌套简码。
删除简码
如果不再需要某个简码,可以使用
remove_shortcode()
来删除它。确保在删除之前已经正确注册过该简码。示例代码:
remove_shortcode('wporg');
解析:这段代码会从WordPress中移除
wporg
简码,确保该简码不再被解析。速记句:用
remove_shortcode()
删除不需要的简码。
检查简码是否存在
在某些情况下,您可能需要检查简码是否已经注册过,可以使用
shortcode_exists()
来进行检查。示例代码:
if (shortcode_exists('wporg')) { // Do something }
解析:这段代码会检查
wporg
简码是否存在,存在时执行相应操作。速记句:用
shortcode_exists()
检查简码是否已存在。
简码的最佳实践
简码开发的最佳实践包括始终返回内容、为简码添加前缀以避免冲突、对输入进行消毒以及对输出进行转义。确保为用户提供所有简码属性的明确文档。
速记句:返回内容、加前缀、消毒输入、转义输出,简码更安全。
总结
本文介绍了WordPress简码的基本概念、创建方法、使用场景及一些最佳实践。通过简码,我们可以在文章中轻松插入动态内容,并通过参数灵活定制输出效果。记住,简码的关键在于保持代码简洁、安全,并确保用户使用时的便利性。
参考文献:
<?php function wporg_shortcode($atts = [], $content = null, $tag = '') { // normalize attribute keys, lowercase $atts = array_change_key_case((array)$atts, CASE_LOWER); // override default attributes with user attributes $wporg_atts = shortcode_atts([ 'title' => 'WordPress.org', ], $atts, $tag); // start output $o = ''; // start box $o .= '<div class="wporg-box">'; // title $o .= '<h2>' . esc_html__($wporg_atts['title'], 'wporg') . '</h2>'; // enclosing tags if (!is_null($content)) { // secure output by executing the_content filter hook on $content $o .= apply_filters('the_content', $content); // run shortcode parser recursively $o .= do_shortcode($content); } // end box $o .= '</div>'; // return output return $o; } function wporg_shortcodes_init() { add_shortcode('wporg', 'wporg_shortcode'); } add_action('init', 'wporg_shortcodes_init');
代码解析
1. 定义简码的回调函数
function wporg_shortcode($atts = [], $content = null, $tag = '') { // normalize attribute keys, lowercase $atts = array_change_key_case((array)$atts, CASE_LOWER);
解析:
wporg_shortcode
是简码的回调函数,接收三个参数:
$atts
:简码的属性数组。$content
:简码包裹的内容(如果有的话)。$tag
:简码的名称。首先,代码使用
array_change_key_case()
将属性数组的键名转换为小写,这是为了确保用户使用大小写不敏感的属性名。
2. 设置默认属性
// override default attributes with user attributes $wporg_atts = shortcode_atts([ 'title' => 'WordPress.org', ], $atts, $tag);
解析:
shortcode_atts()
函数用于将用户提供的属性与默认属性合并。在这个例子中,默认title
属性的值为 “WordPress.org”,用户可以通过简码修改这个值。
3. 开始输出 HTML 代码
// start output $o = ''; // start box $o .= '<div class="wporg-box">';
解析:准备输出的内容。首先,代码初始化了一个空字符串
$o
,然后开始构建 HTML 结构,在这里是一个div
容器。
4. 输出标题
// title $o .= '<h2>' . esc_html__($wporg_atts['title'], 'wporg') . '</h2>';
解析:将简码的
title
属性值输出为标题(<h2>
标签)。esc_html__()
函数用于对标题文本进行安全处理,防止XSS攻击。
5. 处理包裹的内容
// enclosing tags if (!is_null($content)) { // secure output by executing the_content filter hook on $content $o .= apply_filters('the_content', $content); // run shortcode parser recursively $o .= do_shortcode($content); }
解析:如果简码是闭合简码且包裹了一些内容,则执行以下步骤:
- 通过
apply_filters('the_content', $content)
处理内容,使其符合WordPress的内容过滤规则。- 通过
do_shortcode($content)
递归解析内容中的其他简码。
6. 结束 HTML 结构
// end box $o .= '</div>';
解析:结束
div
容器的 HTML 结构。
7. 返回输出结果
// return output return $o; }
解析:返回完整的 HTML 结构,WordPress会将其插入到文章内容中。
8. 注册简码
function wporg_shortcodes_init() { add_shortcode('wporg', 'wporg_shortcode'); }
解析:
wporg_shortcodes_init
函数使用add_shortcode()
将wporg
简码与wporg_shortcode
回调函数关联起来。
9. 将函数挂载到
init
钩子add_action('init', 'wporg_shortcodes_init');
解析:使用
add_action()
将wporg_shortcodes_init
函数挂载到init
动作钩子上,确保简码在WordPress初始化完成后注册。
总结
这段代码展示了如何创建一个功能强大且安全的WordPress简码。它不仅支持自定义属性,还能够处理封闭简码中嵌套的内容,并且通过确保输出的安全性来防止潜在的安全问题。
你可以通过在文章中使用
[wporg title="Your Title"]Content goes here[/wporg]
来调用这个简码,生成一个带有自定义标题和内容的盒子。