私は「フリーミアム」プラグインを持っていて、いくつかの主要な更新を行っています。もともと、プロ バージョンを購入したユーザーは、無料のプラグインをアンインストールしてから、プロ バージョンをインストールしていました。面倒ですが、私は初心者でした。そのため、ユーザーが無料のプラグインをインストールしてから、機能を計画どおりに拡張するプロ アップグレードをインストールできるようにしたいと考えています。
現在のプラグインは class MyFreePlugin { __construct() ... } クラスを使用しており、アップグレード プラグインはクラスを拡張しています: class MyProPlugin extends MyFreePlugin { ... }
これが私の問題です。プラグインの設定ページと tnyMCE ポップアップ ウィンドウに機能を追加し、無料版のアクション、フィルター、機能の一部を完全にオーバーライドしたいと考えています。
例: 無料のプラグインには
add_action('admin_head',array(&$this,'my_free_admin_head_fn'));
管理メニューにいくつかのスクリプトを追加/エンキューします。元のアクションを削除/オーバーライドして、スクリプトをプロ プラグインのキューに入れたい:
add_action('admin_head',array(&$this,'pro_other_admin_head_fn').
また、特に WordPress のコンテキストで php クラスを初めて使用する場合、拡張クラスはどのようにして親の変数値を取得できますか?
これはすべて可能ですか?例があれば、さらに良いでしょう。PHP のマニュアルを掘り下げましたが、フィルターやアクションをオーバーライドしようとするとあまり役に立ちません。助けてくれてありがとう!
... あなたの答えに反論するには Janw 残念ながら、それはうまくいかないようです。例を次に示します。無料のプラグインの __construct() には、次のものがあります。
add_action('admin_menu', array(&$this,'add_plugin_menu'));
管理サイドバーにメニューを追加する関数を呼び出します。プラグインの「プロ」バージョンでは、次のいずれかで起動する前にそのアクションを削除できるかどうかをテストしています。
remove_action('admin_menu', array(&$this,'add_plugin_menu')); (nothing)
remove_action('admin_menu', array(parent,'add_plugin_menu')); (nothing)
remove_action('admin_menu', array(&parent,'add_plugin_menu')); (throws an error)
remove_action('admin_menu', 'parent::add_plugin_menu'); (nothing)
など。基本的に、無料のプラグインはプロの前にロードされるため、削除/上書きする前にアクションが実行されているようです。さらに、親の変数をすべて公開しない限り、親の変数にアクセスすることはできません。