從頭開始創建 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 登錄頁面