从头开始创建 WordPress 插件时要记住的事情

已发表: 2022-01-02

WordPress 插件实际上是单个文件或一组文件,可扩展或增强 WordPress 站点的功能。

每个新开发人员都知道“如何编码?”,但是在 WordPress 中创建插件时,除了代码质量、安全性和功能之外,开发人员还必须记住创建 WordPress 插件的一些基本要求。

本指南介绍了从头开始创建 WordPress 插件时要记住的重要步骤。

在 WordPress 插件中,需要理解的关键是 WordPress Hooks,例如操作和过滤器。 挂钩允许插件在 WordPress 功能中的特定时间以定义的功能运行。

动作钩子列表:https://codex.wordpress.org/Plugin_API/Action_Reference

 定义('WP_DEBUG',真);
--- 在 WordPress 2.3.1 版中添加了 WP_DEBUG 选项。
--- 默认情况下,假设它是假的。 但是,它通常在 wp-config.php 文件中设置为 true。

–>将插件特定的信息标题添加到我们在插件文件夹中新创建的文件中。

 /*
插件名称:推荐帖子类型
插件 URI:https://wordpress.org/plugins/testimonial-post-type/
描述:创建一个推荐帖子类型,它是分类法和标签。
版本:1.0
作者:Elsner Technologies Pvt。 有限公司
作者 URI:https://www.elsner.com
文本域:推荐帖类型
域路径:/languages
*/

相关:Elsner 最近推出的 WordPress 插件:Posts Slider Shortcode

–> 所有插件必须有唯一的函数名、定义和类名。

这可以防止您的插件与其他插件或主题发生冲突。

–> 不要使用 __(双下划线)、wp_ 或 _(单下划线)作为前缀。

这些是为 WordPress 本身保留的。 您可以在类中使用它们,但不能作为独立函数使用

–> 请保护您的插件免受直接文件访问。

 if (!defined('ABSPATH')) 退出; // 如果直接访问则退出

— 您可以通过将此代码放在所有 php 文件的顶部来避免直接访问文件:

–> 请在您的 POST 调用中添加一个 nonce 以防止未经授权的访问。

nonce(使用一次的数字)

WordPress nonces 不是数字,而是由数字和字母组成的散列。 它们也不是只使用一次,而是有一个有限的“生命周期”,之后它们就会过期。

通常我们会生成一个像这样删除 post_id 174 的 url
http://example.com/wp-admin/post.php?post=123&action=trash

这个网址是完美的,但不是安全的。 假设,攻击者知道帖子的 id,然后攻击者可以在您不知情的情况下删除带有此 url 的帖子。

添加随机数将防止这种情况。 例如,当使用 nonce 时,WordPress 为用户生成的 url 如下所示:
http://example.com/wp-admin/post.php?post=123&action=trash&_wpnonce=b192fc4204

 $nonce = wp_create_nonce('my-action_trash');

— 这只是返回 nonce 值本身。

— 您可以将此值放入 URL 中,例如

action='http://example.com/wp-admin/post.php?post=123&action=trash&_wpnonce='.$nonce;

— 验证传入 URL 的 nonce

 wp_verify_nonce( $_REQUEST['_wpnonce'], 'my-action_trash');

相关:如何将您的插件提交到 WordPress 插件目录?

–> 请清理、转义和验证您的 POST 调用

消毒:清理用户输入
永远不能在数据库中插入原始数据,即使是通过更新函数或使用 prepare() 调用也不行。

在用于进行操作调用或 URL 重定向时清理 POST 数据将减少 XSS 漏洞的可能性。

sanitize_text_field($_POST['post_name']);
— 可以使用上述功能清理数据。
— 在幕后,该函数做了以下提到的事情:
检查无效的 UTF-8
将单个 < 字符转换为实体
剥离所有标签
删除换行符、制表符和多余的空白
剥离八位字节
— sanitize_*() 类辅助函数
https://developer.wordpress.org/plugins/security/securing-input/

验证:检查用户输入
除了清理之外,您还应该验证所有调用。 如果 $_POST 调用应该只是一个数字,请在传递任何内容之前确保它是一个 int() 。 任何时候向数据库添加数据时,它都应该是正确的数据。

 intval( $_POST['post'] );
--- 如果 $_POST['post']

有一个数值,它会返回真。 如果不是,则为假。

转义:保护输出
转义是获取您已有的数据,并在将其呈现给最终用户之前对其进行保护。

转义/投射输出只会消除任何歧义,并增加清晰度。

 <h4> <?php echo esc_html( $title ); ?> </h4>
--- esc_html()

应该在 HTML 元素包含我们所拥有的输出的一部分数据时使用。

 esc_html ( 字符串 $text )

转义 HTML 块。

 esc_html_e ( 字符串 $text )

显示已转义以在 HTML 输出中安全使用的翻译文本。

 esc_html__ ( 字符串 $text )

检索 $text 的翻译并将其转义以在 HTML 输出中安全使用。

 <img alt="" src="<?php echo esc_url( $picture_url ); ?>
--- esc_url()

应该在每个 URL 上使用,包括 HTML 元素的“src”和“href”属性中的那些。

 <?php echo esc_js( $value ); ?>
--- esc_js()

用于内联 Javascript。

 <ul class="<?php echo esc_attr( $stored_class ); ?>">
--- esc_attr()

可用于打印到 HTML 元素属性中的所有其他内容。

笔记 :-
请检查以下链接以了解文件夹的位置以及如何最好地调用它们
https://codex.wordpress.org/Determining_Plugin_and_Content_Directories

如果可能,将数据保存到 wp_options 表。

所有这一切的最终目标是确保无效和不安全的数据永远不会被处理或显示。 清洁、检查、逃避一切。 此外,永远不要相信用户总是输入合理的数据。

相关:如何自定义 WordPress 登录页面