問題描述

我需要為 Wordpress 外掛新增相對較小的功能,我可以選擇直接編輯外掛,或者完全廢棄外掛,並從另一個網站重新使用 PHP 程式碼來做同樣的事情。重複使用 non-Wordpress 這樣一個小小的變化的 PHP 程式碼似乎很愚蠢,我在編輯外掛時會使用幾行 PH​​P 。我的問題是編輯一個外掛是個好主意?

我知道當編輯主題時,如果編輯直接對舊的程式碼完成,當主題更新時,更改將會丟失。這是否與外掛一起發生?有沒有解決的辦法?

對於那些想知道變化有多複雜的人,我將簡要解釋一下。客戶我想要提交表單去交易商和使用者。但在某些情況下,取決於使用者的電子郵件地址 (如果結束在”.gov” 或其他一些結尾… 是的,我知道這不是最好的想法,我試圖說服客戶端,但他們是堅定的) 客戶想要電郵去別人。當然這可以透過外掛中的幾條小的 PHP 行來解決,但外掛根據使用者傳送的內容沒有”conditional recipients” 的功能。所以我想要為這個網站新增功能 (如果可以快速完成),或者我想用直接的 PHP 替換外掛,這似乎會導致比最初修復的問題更多的問題。時間就是生命。非常感謝你的幫助!

最佳解決方案

你必須問自己最重要的問題是我是主題或外掛的作者?如果您的答案是肯定的,並且您負責外掛或主題的保留,請繼續更改並根據需要進行修改。

如果你的答案是否定的話,那麼你不應該做任何修改,甚至不是一個簡單的點. 。 WordPress 核心檔案也是一樣。簡單的原因是,如你所說,如果主題/外掛/核心被更新,你將失去對主題/外掛/核心所做的任何事情。

我建議您使用此額外功能建立您自己的小型 functionality plugin 。它是快速和容易的,並將會節省你許多眼淚,因為它不會被覆蓋,除非你自己做。

次佳解決方案

一般來說,您不想修改外掛,因為下次更新外掛時將會鬆開您的修改。主題有點不同,您可以在其中設定小孩主題。

如果外掛使用 wp_mail()功能傳送電子郵件,可以嘗試使用 wp_mail 過濾器來更改收件人。

嘗試編寫自己的外掛來克服這個問題。

這是一個這樣一個外掛 (未經測試) 的示例:

/* Plugin Name: Change recipients for .gov emails */

add_filter( 'wp_mail',
    function ( $args ) {

        // Check if the recipent's email ends with .gov
        if( 'vog.' === strtolower( substr( strrev( $args['to'] ), 0, 4 ) ) )
        {
            // Replace it with a new email address:
            $args['to'] = 'new@email.com';
        }

        return $args;
    }
);

您可能需要外掛提供的一些額外的鉤子。

第三種解決方案

我認為我們幾年來一直在 Wordpress 工作的人都犯有這樣的一個階段。我不得不對原始作者不再支援的外掛進行修改,並且與更高版本的 Wordpress 有一些相容性問題。

在某些情況下,編輯您不是原作者的現有外掛已被接受:

  • 該外掛不再被維護或支援

  • 該外掛有一些明顯的安全問題,可能會損害您的伺服器/網站,您不想等待更新,需要外掛

這些是真正的兩種情況,我可以想到編輯外掛是可以接受的。在一個理想的世界中,所有的 Wordpress 外掛作者都將使用 Wordpress 中的鉤子/過濾器功能,所以我們可以輕鬆地擴充套件它們,並且不需要編輯外掛檔案就可以改變它們,但是我們都知道,沒有支援用於掛鉤或過濾器。

如果您需要為外掛新增更多功能,那麼我的第一條建議就是構建自己的外掛,並自己編寫這些功能。但是,有些情況下,您可能想要刪除一個 Javascript 庫並將其包含在外掛中,但作者決定使用 include 並不使用 Wordpress 函式。這是這樣的情況可能會變得棘手,因為你必須編輯一兩個檔案。

在需要編輯外掛檔案的情況下 (這是瀏覽所有其他選項後的最後一種情況),您應該在 plugin 目錄中保留修改檔案,我有一個名為”CHANGES.txt” 的檔案,只需列出已更改的檔案,行號,如果我有時間,我會列出我做的。然後,如果需要更新並檢視更改的內容,則可以對檔案進行區分。

最後的手段是不理想的,它有缺陷,違反了程式設計規律。但是,正如我所提到的,如果外掛寫得不好或不容易允許在主題或自定義外掛中覆蓋/擴充套件,則需要編輯外掛檔案。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。