跳转至主要内容

晴雨技术笔记

WordPress 简单表情简码

杏川铭心 杏川铭心
最后编辑于 2025年8月30日

首先我们不要管这个拗口的标题,细心的小伙伴或许已经发现了,上一篇文章中出现了大量的知乎里的 emoji。一个一个手动输入肯定不现实,毕竟 WordPress 编辑器不支持直接插入那么小的图片,更何况自定义的 emoji 需要一些独特的样式才能看起来舒服。所以我最终采取了简码的方式来实现自定义 emoji 的功能。

顺带说一下,目前也有一些主题是采用这种方式实现自定义 emoji 的。

什么是简码?

简码是一个 WordPress 中挺古老的功能,2.5 版本就有了,可以实现不少有意思的玩法。语法跟 BBCode 一模一样,都是模仿 HTML 标签的形式,可以说在易用性和简洁性之间做到了很好的平衡。

简码类似于这个样子:

[shortcode]

[shortcode]一些内容[/shortcode]

[shortcode 参数="一些内容"]

其中最主要的是三个东西,简码名称,参数,和内容。

创建简码

可以使用 add_shortcode() 命令来创建简码。

首先需要一个函数,作为简码本体:

function myemoji_surprise_shortcode( $atts = [], $content = null, $tag = '' ) {
    // 简码中的操作...
    return $content; // 也可以不是 $content,返回什么都可以,这里返回的内容会成为最终简码渲染出的内容
}

然后注册简码:

add_shortcode( '简码名称', 'myemoji_surprise_shortcode' );

最后就可以使用简码了,你给你的简码取了什么名字就怎么调用。

Emoji 简码

现在我们知道了如何创建简码,就可以开始添加我们的 emoji 简码了。

首先肯定是从一个插件开始,创建一个名字叫 myemoji 的文件夹,大概是这个结构:

myemoji
    |- assets
        |- style.css
        |- emoji1.png
        |- emoji2.png
        |- ...
        |- index.php // 这个文件只是简单做个占位符,防止插件目录被直接访问,可以不要
    |- myemoji.php
    |- index.php // 同理

然后先打开 myemoji.php 编写介绍:

<?php
/*
 * Plugin Name:       自定义 emoji
 * Description:       添加自定义 emoji 简码
 * Version:           1.0
 * Requires at least: 6.8
 * Requires PHP:      8.3
 * Text Doamin:       myemoji
 */

单个 emoji

单个 emoji 简码,比如说 [emoji_name] 这种,那就不需要加参数,因为一个简码就是一个独立的东西,不需要内容或者别的参数。

核心其实就是获取到表情所在的文件位置,然后返回。

function myemoji_emoji1_shortcode() {
    $path = plugin_dir_url(__FILE__);
    $path .= 'assets/emoji1.png';
    return '<img class="myemoji" src="' . esc_url( $path ) . '">';
}
add_shortcode( 'emoji1', 'myemoji_emoji1_shortcode' );

接下来需要编写相关的样式,不然你的 emoji 会非常突兀的挂在你的文章里面。

打开 /assets/style.css,编写:

.myemoji {
    width: 1em;
    height: 1em;
    margin: 0;
    margin-bottom: -0.11em; /* 这一行是个有点 hacky 的写法,有的 emoji 因为大小原因会和你的文字对不齐。数值和bottom/top需要自行修改。 */
    padding: 0;
}

最后需要注册样式:

function myemoji_enqueue_stylesheet() {
    $path = plugin_dir_url(__FILE__);
    wp_register_style( 'myemoji_style', $path . 'assets/style.css' );
    wp_enqueue_style( 'myemoji_style' );
}
add_action( 'init', 'myemoji_enqueue_stylesheet' );

最终效果:

多个 emoji

有的时候我们可能会希望使用多个 emoji,当然你可以把上面的流程重复操作几遍(我就是这么干的),emoji 量小的时候自然是很合适。

不过当 emoji 的量大起来的时候,肯定这种方式就不太高效了。

这里我们可以利用参数来指定要使用哪个 emoji。

既然需要使用参数,那么就需要在简码函数中支持参数:

function myemoji_emoji_shortcode( $atts = [], $content = null, $tag = '' )

接下来修改逻辑,这里采用的是类似于 [myemoji emoji_name] 这样的格式:

function myemoji_emoji_shortcode( $atts = [], $content = null, $tag = '' ) {
    if ( empty( $atts ) ) { // 检查是否提供了 emoji 名称
        return ''; // 没有提供就返回空值
    }
    $emojis = Array( 'emoji1', 'emoji2' ); // 可用的 emoji 列表
    $emoji_name = $atts[0]; // 获取 emoji 名称,上面这种简码写法最终会在 $atts 中提供 Array( 0 => 'emoji_name' )
    if ( in_array( $emoji_name, $emoji ) ) { // 检查 emoji 是否存在
        $path = plugin_dir_url(__FILE__) . 'assets/' . $emoji_name . '.png'; // 这一行假设你 emoji 文件名是对应的!否则请自行修改!
        return '<img class="myemoji" src="' . esc_url( $path ) . '">' // 别忘了过滤!永远不要相信用户的输入数据!
    } else {
        return ''; // 不存在就返回空值,当然你也可以返回一个别的什么东西
    }
}

后续的内容和单个 emoji 就一样了,这边不做更多展示。

安装插件

把刚刚那个 myemoji 文件夹打包成 .zip,上传。

OK,现在你可以快乐地在文章中使用你自己的 emoji 了!

杏川铭心
杏川铭心

名字越改越尬,但是网站一点没动🤪 曾用名Frank419(现在也是我在很多地方的用户名),网站站长。

上一篇文章

Windows 11 创建本地账户 

下一篇文章

无更新文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注