web-dev-qa-db-ja.com

更新プロセスを中断することなくワードプレスプラグインを編集する方法

私はすでに利用可能なWordPressのプラグインといくつかの追加の機能を追加したいと思います。

プラグインの更新中に私のカスタマイズを引き継ぐことは可能ですか?

6
Aadi

おそらくそうではありません。

あなたの拡張機能をプラグインに取り込むための推奨される方法は以下の通りです。あなたの修正を開発者に送り、そしてそれらをオリジナルにマージするように依頼してください。あなたの変更がかなり個人的なカスタマイズであるならば、これは起こりません。

プラグインが厳密なOOPスタイルで書かれている場合は、必要に応じて元のクラスからクラスを拡張した2番目のプラグインを作成できます(子プラグインのようなものです)。残念ながら、ほとんどのプラグイン開発者はこの必要性を認識しておらず、それに従ってコードを書いていません。 ロード順の問題に注意してください

どのプラグインを拡張したいのか、正確に何を変更したいのかを説明していただければ、さらに助力することができます。

8
fuxia

残念ながら、それは完全にプラグインに依存します(より正確には、プラグインの作者に!)。作者が積極的に考え、拡張可能にするような方法でプラグインを作成したなら、そう、追加するOWNプラグインを作成できます。既存のプラグインの機能に。

Toschoが指摘したことを書き留めておいてください - あなたのプラグインの順番は重要です(ここでもリンクは here です)。

フック

プラグインを拡張可能にするための最も一般的な方法は、フック(アクションフックとフィルタフック)を追加することです。これを自分のプラグインで利用することができます。もしあなたが良いコードエディタを持っているなら(今のところ私は NetBeans を使っています)、プラグインのソースファイルでdo_actionapply_filtersを検索してください。プラグインの作成者がこれらのフックを提供している場合は、これがデフォルトを上書きしたり独自のコードを挿入したりするための非常に便利で簡単な方法です。

プラガブル関数

プラグインの作者が精通していても、プラグイン関数にグローバル名前空間を使用している場合、彼/彼女はプラグインの関数をif ( function_exists() )条件文の中にラップしているかもしれません。これがあなたの利益のために働くためには、あなたのプラグインが最初にロードされることを確かめなければなりません(それは挑戦かもしれません)。あなたがしなければならないのは、全く同じ名前空間の中でまったく同じ名前であなたの関数を宣言することであり、それからあなたの関数はプラグインによって使用されるものを置き換えるでしょう。

拡張子

もしプラグインの作者が良いOOPのコーダーであれば、彼/彼女は拡張のために開かれている十分にきめ細かい方法でプラグインコードを書くかもしれません。 。プラグインクラスの細かさを調べてください。つまり、小さく、非常に具体的なタスクを実行するメソッドで、プラグインのクラスを拡張する独自のクラスでオーバーライドすることができます。もちろん、Toschoが述べているように、クラスはオーバーライドできるように、そしてデフォルトの実装がそれ自体を完全には呼び出さないように設計される必要があります。

フォークまたはパッチ

プラグインの作成者が gitHub を使用しているか、他の方法でソースを開いている場合は、修正案を追加してパッチを作成者に送信することができます。あるいは、ソースをダウンロードして、オリジナルの作者が更新をプッシュしたときに更新されなくなるまでプラグインヘッダーを修正し、できれば更新版をに送信することができます。作者、または自身のエンティティとして 直接WordPressに 。 WPにプラグインを送信する場合は、そのサイトを用意する必要があり、他の人がダウンロードした場合はそれをサポートする準備ができている必要があります。

5
Tom Auger

私はこの質問は本当に古いと思いますが、これは誰かに役立つかもしれないと感じました。

変更がコミュニティに役立つと思われる場合は、開発者に送信してください。ただし、変更内容がご使用のシステムに固有のものである場合は、引き続き以下の内容を読むことができます。

私はテーマの更新版への変更を引き継ぐことについてこの問題を抱えていました。 old_versionからmodified_old_versionまで再帰的に diff を実行してから、 patch ツールを使用してテーマの新しいバージョンに作成したパッチを適用しました。

パッチツールは、自動的には適用できない変更を含むファイルを作成します。私たちはそれらのうちのいくつかを持っていて、それらの変更を簡単に識別して手動で行うことができました。

変更するときは、自動インデントなどのエディタ機能を使用してファイル全体の間隔を変更しないようにする必要があります。つまり、必要な場合にのみ変更を加えます。それは変更を引き継ぐプロセスが後でより多くの時間を費やすことになります。

0

私はそれが非常に古い質問であることを知っています、しかし私は私が解決策を見つけたと思います...

私は私のクライアントの開発者の一人が更新されたときにファイルが削除されプラグインがクラッシュするディレクトリとサブディレクトリの制限までそれを修正したプラグインを持っています。オリジナルのプラグインをコアアップデートから独立させるために、私は変更されたファイルとフォルダをextensionという名前のディレクトリ内の別のプラグインに移動しました。

https://Gist.github.com/wpsmith/af206df2cf6a38e4e2f0 にあるコードを使用する

Tarvis Smithによって定義されたクラスをWPS_Extend_Plugin.phpに追加し、それを私のプラグインに含めました。 WPS_Extend_Pluginクラスを使用して、私は拡張ファイル/フォルダーディレクトリをターゲットフォルダーextensionに向けました。まだ失敗はありませんが、これがプラグインを拡張する正しい方法であるかどうかはわかりません。

// Require WPS_Extend_Plugin class
require_once( 'classes/WPS_Extend_Plugin.php' );

// Extend Sitepress Multilingual CMS
new WPS_Extend_Plugin( 'sitepress-multilingual-cms/sitepress.php', __FILE__, '3.9.0', 'CHERRY' );
// Extend AddThis
new WPS_Extend_Plugin( 'extension', __DIR__, '0.1', 'CHERRY' );
0
Hassan Alvi