【WP|4】WordPress 简码(Shortcode)开发详解

简码(Shortcode)是 WordPress
提供的一项强大功能,允许开发者创建自定义的代码块,以便在文章、页面或小工具中轻松插入动态内容。本文将详细讲解简码的开发,从基础概念到高级用法,帮助你充分利用这一功能。

一、简码的基础

简码是一段简短的代码,用户可以在 WordPress 编辑器中使用它来插入动态内容。简码通常以方括号包围,例如 [shortcode]

1. 创建简单的简码

让我们从创建一个简单的简码开始,该简码将输出一段文本。首先,在你的主题的 functions.php 文件中添加以下代码:

function hello_world_shortcode() {return 'Hello, World!';
}
add_shortcode('hello_world', 'hello_world_shortcode');

以上代码定义了一个名为 hello_world_shortcode 的函数,该函数返回一段简单的文本 'Hello, World!'。然后,通过 add_shortcode 函数将此函数注册为一个简码,简码标签为 hello_world

在文章或页面中使用 [hello_world] 即可显示 Hello, World!

2. 带参数的简码

简码可以接受参数,使其更具灵活性。以下是一个带参数的简码示例:

function custom_message_shortcode($atts) {$atts = shortcode_atts(array('message' => 'Hello, World!',), $atts, 'custom_message');return $atts['message'];
}
add_shortcode('custom_message', 'custom_message_shortcode');

在这个例子中,shortcode_atts 函数用于定义简码的默认参数,然后将用户提供的参数与默认参数合并。在文章或页面中使用 [custom_message message="Hello, WordPress!"] 即可显示 Hello, WordPress!

二、高级简码用法

1. 处理内容的简码

简码不仅可以生成内容,还可以处理包含在简码中的内容。以下是一个处理内容的简码示例:

function wrap_content_shortcode($atts, $content = null) {return '<div class="custom-wrap">' . do_shortcode($content) . '</div>';
}
add_shortcode('wrap_content', 'wrap_content_shortcode');

使用该简码 [wrap_content]Your content here[/wrap_content],可以将包含的内容包裹在一个 div 标签中。

2. 嵌套简码

简码可以嵌套使用,这需要确保简码内容经过正确的处理。下面的示例展示了如何处理嵌套简码:

function outer_shortcode($atts, $content = null) {return '<div class="outer">' . do_shortcode($content) . '</div>';
}
add_shortcode('outer', 'outer_shortcode');function inner_shortcode() {return '<span class="inner">Inner content</span>';
}
add_shortcode('inner', 'inner_shortcode');

在文章中使用 [outer][inner][/outer],会正确解析嵌套的简码,并输出:

<div class="outer"><span class="inner">Inner content</span>
</div>

3. 复杂输出的简码

简码不仅可以输出简单的文本,还可以输出复杂的 HTML 结构或动态内容。以下是一个复杂输出的简码示例:

function recent_posts_shortcode($atts) {$atts = shortcode_atts(array('posts' => 5,), $atts, 'recent_posts');$query = new WP_Query(array('posts_per_page' => $atts['posts'],));$output = '<ul class="recent-posts">';while ($query->have_posts()) {$query->the_post();$output .= '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';}wp_reset_postdata();$output .= '</ul>';return $output;
}
add_shortcode('recent_posts', 'recent_posts_shortcode');

使用 [recent_posts posts="3"] 可以显示最近的三篇文章标题和链接。

三、简码的最佳实践

1. 使用命名空间

为了避免简码名称冲突,建议为你的简码添加前缀。例如,如果你的简码属于某个插件,可以使用插件名作为前缀:

add_shortcode('plugin_recent_posts', 'recent_posts_shortcode');

2. 安全输出

在输出 HTML 内容时,确保使用适当的 WordPress 函数进行转义,以防止 XSS 攻击。

function secure_message_shortcode($atts) {$atts = shortcode_atts(array('message' => 'Hello, World!',), $atts, 'secure_message');return esc_html($atts['message']);
}
add_shortcode('secure_message', 'secure_message_shortcode');

3. 处理空内容

确保处理简码内容为空的情况,以提高代码的健壮性。

function safe_wrap_content_shortcode($atts, $content = null) {if (is_null($content)) {return '';}return '<div class="custom-wrap">' . do_shortcode($content) . '</div>';
}
add_shortcode('safe_wrap_content', 'safe_wrap_content_shortcode');

结语

简码是 WordPress 提供的一项强大功能,能够帮助开发者创建灵活、可复用的内容块。通过本文的讲解,你可以了解从基础到高级的简码开发技巧。掌握这些技巧,可以让你在开发 WordPress 主题和插件时,更加高效地实现各种动态内容和复杂功能。希望这篇文章对你的简码开发之路有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/17899.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

fine-tune Microsoft/Phi-3-mini-128k-instruct

目录 logging超参数模型和Tokenizer加载数据处理数据集加载与处理训练保存微调模型参考使用transformers在聊天指令数据集上使用LoRA对Phi-3语言模型进行微调,以改进会话理解和响应生成。 logging 日志记录:设置日志记录以跟踪训练过程。 import sys import loggingimport …

【RabbitMQ】SpringAMQP--消息转换器

SpringAMQP–消息转换器 测试发送Object类型消息 1.声明队列 Configuration public class FanoutConfig {Beanpublic Queue objectQueue(){return new Queue("object.queue");} }运行消费者后&#xff1a; 2.发送消息 RunWith(SpringRunner.class) SpringBootTes…

【数据结构与算法】七大排序算法(上)

【数据结构与算法】七大排序算法(上) &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;数据结构与算法&#x1f345; &#x1f33c;文章目录&#x1f33c; 1. 排序的概念及应用 1.1 排序的概念 1.2 排序的应用 1.3 常见排序算法 2. 常…

开源博客项目Blog .NET Core源码学习(23:App.Hosting项目结构分析-11)

本文学习并分析App.Hosting项目中后台管理页面的标签管理页面、轮播图维护页面。 标签管理页面 标签管理页面用于显示、检索、新建、编辑、删除标签数据&#xff0c;以便在前台页面的首页及文章专栏等页面显示标签数据。标签管理页面附带一新建及编辑页面&#xff0c;以支撑新…

设计井字棋游戏(一)

创建游戏登录注册窗口 用户名admin 密码admin&#xff08;可自行改变&#xff09; 主页面 1. 导包 import pickle&#xff1a;导入 pickle 模块&#xff0c;这是一个 Python 的内置模块&#xff0c;用于将 Python 对象序列化和反序列化。序列化是指将对象转换为字节流&am…

如同“水生态”的存储引擎|OceanBase数据转储合并技术解读(一)

本系列文章主要围绕 OceanBase数据库存储引擎中的转储合并进行解读&#xff0c;涉及到数据存储、转储合并、数据校验等方面的内容&#xff0c;旨在让读者了解OceanBase数据库的存储引擎中与转储合并有关的各种概念&#xff0c;帮助读者更好地理解OceanBase数据库的存储技术原理…

基于STM32实现智能饮水机控制系统

目录 引言环境准备智能饮水机控制系统基础代码示例&#xff1a;实现智能饮水机控制系统 温度传感器数据读取水泵和加热器控制水位传感器数据读取用户界面与显示应用场景&#xff1a;家庭和办公室的智能饮水管理问题解决方案与优化收尾与总结 1. 引言 本教程将详细介绍如何在S…

关于pdfbox读取pdf

最近&#xff0c;想着将pdf的文件进行读取其内容&#xff0c;发现了一个比较好用的依赖pdfbox。目前使用这个依赖&#xff0c;进行实现一个简单实例&#xff0c;如果之后需要使用到更深的了解&#xff0c;会进行更新。这里提醒一下&#xff1a;jdk8尽量采用pdfbox3.x版本。 对…

Linux一键安装Docker、kkfileviewer

Linux一键安装Docker、kkfileviewer 一、安装docker 安装docker脚本 vi initDocker.sh脚本内容 #安装前先更新yum&#xff0c;防止连接镜像失败 yum -y update#卸载系统之前的docker&#xff08;可选择&#xff0c;我这里直接注释了&#xff09; #yum remove docker docker…

香橙派KunpengPro测评之使用C语言操控40pin引脚

香橙派KunpengPro测评之使用C语言操控40pin引脚 香橙派KunpengPro介绍香橙派实物图香橙派登录界面香橙派KunpengPro的登录界面香橙派KunpengPro的原始桌面香橙派KunpengPro内安装了VScode等软件香橙派KunpengPro的终端 香橙派硬件参数核心性能图形与显示接口丰富性扩展与兼容性…

【驱动】串口硬件流控和RS485自动收发

1、流控(Flow Control) 串口通信中的流控(Flow Control)是一种用于管理数据传输速率,防止数据丢失的机制。 流控可以分为硬件流控(Hardware Flow Control)和软件流控(Software Flow Control),两者的目的都是确保发送方和接收方在数据传输过程中同步。 1.1 硬件流控…

十四天学会Vue——Vue核心(理论+实战)上篇(第一天)

一、Vue核心&#xff08;上篇&#xff09; 热身tops&#xff1a;选取开发模式 ①用于开发模式 我们只需要知道 我们是开发模式&#xff0c;开发模式他会跟你提示代码出现错误的地方以及出错原因&#xff0c;而生产模式比较简洁。 ②用于生产模式 1.1 new Vue()实例 了解Vue&a…

数据库语法树优化

目录 一、σ、π、⋈ 1.选择σ 2.投影π 3.连接⋈ 二、 构建语法树 ① 解读sql语句 ② 写出关系代数表达式 ③ 画出语法树 三、优化语法树 四、练习 语法树优化方法 一、σ、π、⋈ 1.选择σ 选择就是在关系R中选择满足给定条件的诸元组。 通过条件SdeptIS选择出系别…

基于香橙派搭建家庭网盘

一、概述 家庭网盘是一种用于家庭用户的在线存储和文件共享服务。它允许家庭成员在云端存储、同步和分享照片、视频、文档等文件&#xff0c;方便快捷地访问和管理个人和家庭数据。家庭网盘通常提供安全可靠的数据存储和备份功能&#xff0c;保障用户数据的安全性。此外&#x…

Day-02面向对象

一、匿名函数 和函数的作用一致&#xff0c;都是进行代码逻辑的封装&#xff0c; 区别1 在定义时&#xff0c;匿名函数可以不指定函数的名字 区别2 匿名函数执行实现简单的计算 区别3 匿名函数会自动将计算的结果返回 定义格式 lambda 参数1,参数2...:计算逻辑(参数的处理逻辑…

一文解决弹窗交互设计难题,轻松上手

弹窗交互的分类 我们每天所说的弹出窗口是一个非常笼统的概念。我们习惯性地称所有的对话框、浮层和提示条为弹出窗口。事实上&#xff0c;弹出窗口可以分为两种类型&#xff1a;模态弹出框和非模态弹出框。在 UI 在设计中&#xff0c;当它迫使用户与之交互时&#xff0c;我们…

【算法】【二叉树,DFS,哈希集合,分类讨论】力扣1110. 删点成林

1110. 删点成林 文章目录 【算法】力扣【二叉树&#xff0c;DFS&#xff0c;哈希集合&#xff0c;分类讨论】1110. 删点成林题目描述示例 1&#xff1a;示例 2&#xff1a; 输入输出示例解释思路解析核心思想算法步骤复杂度分析 代码实现总结 【算法】力扣【二叉树&#xff0c…

ElasticSearch - 删除已经设置的认证密码(7.x)

文章目录 Pre版本号 7.x操作步骤检查当前Elasticsearch安全配置停止Elasticsearch服务修改Elasticsearch配置文件删除密码重启Elasticsearch服务验证配置 小结 Pre Elasticsearch - Configuring security in Elasticsearch 开启用户名和密码访问 版本号 7.x ES7.x 操作步骤 …

马斯克xAI融资60亿美元,宣布打造世界第一超算中心,10万张H100GPU

昨天&#xff0c;埃隆马斯克的xAI初创公司宣布获得60亿美元的巨额融资&#xff0c;主要用于打造一台巨大的超级计算机&#xff0c;马斯克称之为“超级计算工厂”。 从创立OpenAI到如今的xAI&#xff0c;技术和算力的发展历经了几个时代&#xff0c;但似乎马斯克的吸金能力一直…

一文讲透redis实现分布式锁里面的坑

一.前提 相信大家在使用分布式锁的时候都会选择redis或者zookeeper来实现。今天我们来讲一讲使用Redis实现分布式锁里面的坑。大家要避免 二.错误案例 1.jedis.setnx方法和jedis.expire组合实现加锁 上代码&#xff1a; Long result jedis.setnx(lockKey, requestId);if (re…